Skip to content

Commit 4767f51

Browse files
committed
Reorganise test
1 parent 442d155 commit 4767f51

3 files changed

Lines changed: 140 additions & 60 deletions

File tree

;

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
namespace PowerSync.Common.Tests;
2+
3+
using PowerSync.Common.DB.Schema;
4+
5+
public class TestSchemaTodoList
6+
{
7+
public static Table Todos = new Table
8+
{
9+
Name = "todos",
10+
Columns =
11+
{
12+
["list_id"] = ColumnType.Text,
13+
["created_at"] = ColumnType.Text,
14+
["completed_at"] = ColumnType.Text,
15+
["description"] = ColumnType.Text,
16+
["created_by"] = ColumnType.Text,
17+
["completed_by"] = ColumnType.Text,
18+
["completed"] = ColumnType.Integer,
19+
},
20+
Indexes =
21+
{
22+
["list"] = ["list_id"]
23+
}
24+
};
25+
26+
public static Table Lists = new Table
27+
{
28+
Name = "lists",
29+
Columns =
30+
{
31+
["created_at"] = ColumnType.Text,
32+
["name"] = ColumnType.Text,
33+
["owner_id"] = ColumnType.Text,
34+
}
35+
};
36+
37+
public static readonly Schema AppSchema = new Schema(Todos, Lists);
38+
}
39+
40+
public class TestSchema
41+
{
42+
public static readonly Dictionary<string, ColumnType> AssetsColumns = new()
43+
{
44+
["created_at"] = ColumnType.Text,
45+
["make"] = ColumnType.Text,
46+
["model"] = ColumnType.Text,
47+
["serial_number"] = ColumnType.Text,
48+
["quantity"] = ColumnType.Integer,
49+
["user_id"] = ColumnType.Text,
50+
["customer_id"] = ColumnType.Text,
51+
["description"] = ColumnType.Text,
52+
};
53+
54+
public static readonly Table Assets = new Table
55+
{
56+
Name = "assets",
57+
Columns = AssetsColumns,
58+
Indexes =
59+
{
60+
["makemodel"] = ["make", "model"]
61+
}
62+
};
63+
64+
public static readonly Table Customers = new Table
65+
{
66+
Name = "customers",
67+
Columns =
68+
{
69+
["name"] = ColumnType.Text,
70+
["email"] = ColumnType.Text,
71+
}
72+
};
73+
74+
public static readonly Schema AppSchema = new Schema(Assets, Customers);
75+
76+
public static Schema GetSchemaWithCustomAssetOptions(TableOptions? assetOptions = null)
77+
{
78+
var customAssets = new Table("assets", AssetsColumns, assetOptions);
79+
80+
return new Schema(customAssets, Customers);
81+
}
82+
83+
public static Schema MakeOptionalSyncSchema(bool synced)
84+
{
85+
string SyncedName(string name) => synced ? name : $"inactice_synced_{name}";
86+
string LocalName(string name) => synced ? $"inactive_local_{name}" : name;
87+
88+
return new Schema(
89+
new Table
90+
{
91+
Name = SyncedName("assets"),
92+
Columns = AssetsColumns,
93+
ViewName = SyncedName("assets"),
94+
},
95+
new Table
96+
{
97+
Name = LocalName("local_assets"),
98+
Columns = AssetsColumns,
99+
ViewName = LocalName("assets"),
100+
LocalOnly = true,
101+
}
102+
);
103+
}
104+
}
105+

Tests/PowerSync/PowerSync.Common.Tests/Client/PowerSyncDatabaseTests.cs

Lines changed: 12 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ namespace PowerSync.Common.Tests.Client;
33
using System.Diagnostics;
44

55
using Microsoft.Data.Sqlite;
6+
67
using Newtonsoft.Json;
8+
79
using PowerSync.Common.Client;
810
using PowerSync.Common.DB.Schema;
911

@@ -695,65 +697,14 @@ await db.Execute(
695697
[Fact(Timeout = 2000)]
696698
public async Task WatchSchemaResetTest()
697699
{
698-
var initialSchema = new Schema(
699-
new Table
700-
{
701-
Name = "assets_local",
702-
ViewName = "assets",
703-
LocalOnly = true,
704-
Columns =
705-
{
706-
["make"] = ColumnType.Text,
707-
["model"] = ColumnType.Text,
708-
["description"] = ColumnType.Text,
709-
}
710-
},
711-
new Table
712-
{
713-
Name = "assets_synced",
714-
ViewName = "assets_synced_inactive",
715-
LocalOnly = false,
716-
Columns =
717-
{
718-
["make"] = ColumnType.Text,
719-
["model"] = ColumnType.Text,
720-
["description"] = ColumnType.Text,
721-
}
722-
}
723-
);
724-
var updatedSchema = new Schema(
725-
new Table
726-
{
727-
Name = "assets_local",
728-
ViewName = "assets_local_inactive",
729-
LocalOnly = true,
730-
Columns =
731-
{
732-
["make"] = ColumnType.Text,
733-
["description"] = ColumnType.Text,
734-
}
735-
},
736-
new Table
737-
{
738-
Name = "assets_synced",
739-
ViewName = "assets",
740-
LocalOnly = false,
741-
Columns =
742-
{
743-
["make"] = ColumnType.Text,
744-
["description"] = ColumnType.Text,
745-
}
746-
}
747-
);
748-
749700
var dbId = Guid.NewGuid().ToString();
750701
var db = new PowerSyncDatabase(new()
751702
{
752703
Database = new SQLOpenOptions
753704
{
754705
DbFilename = $"powerSyncWatch_{dbId}.db",
755706
},
756-
Schema = initialSchema
707+
Schema = TestSchema.MakeOptionalSyncSchema(false)
757708
});
758709

759710
var sem = new SemaphoreSlim(0);
@@ -772,9 +723,9 @@ public async Task WatchSchemaResetTest()
772723
Assert.True(await sem.WaitAsync(100));
773724
Assert.Equal(0, lastCount);
774725

775-
var initialResolved = await GetSourceTables(db, querySql);
776-
Assert.Contains("ps_data_local__assets_local", initialResolved);
777-
Assert.DoesNotContain("ps_data__assets_synced", initialResolved);
726+
var resolved = await GetSourceTables(db, querySql);
727+
Assert.Single(resolved);
728+
Assert.Contains("ps_data_local__local_assets", resolved);
778729

779730
for (int i = 0; i < 3; i++)
780731
{
@@ -787,19 +738,20 @@ await db.Execute(
787738
}
788739
Assert.Equal(3, lastCount);
789740

790-
await db.UpdateSchema(updatedSchema);
741+
await db.UpdateSchema(TestSchema.MakeOptionalSyncSchema(true));
791742

792-
var updatedResolved = await GetSourceTables(db, querySql);
793-
Assert.Contains("ps_data__assets_synced", updatedResolved);
794-
Assert.DoesNotContain("ps_data_local__assets_local", updatedResolved);
743+
resolved = await GetSourceTables(db, querySql);
744+
Assert.Single(resolved);
745+
Assert.Contains("ps_data__assets", resolved);
795746

796747
Assert.True(await sem.WaitAsync(100));
797748
Assert.Equal(0, lastCount);
798749

799-
await db.Execute("insert into assets select * from assets_local_inactive");
750+
await db.Execute("insert into assets select * from inactive_local_assets");
800751
Assert.True(await sem.WaitAsync(100));
801752
Assert.Equal(3, lastCount);
802753

754+
// Sanity check
803755
query.Dispose();
804756

805757
await db.Execute("delete from assets");

Tests/PowerSync/PowerSync.Common.Tests/TestSchema.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,27 @@ public static Schema GetSchemaWithCustomAssetOptions(TableOptions? assetOptions
7979

8080
return new Schema(customAssets, Customers);
8181
}
82+
83+
public static Schema MakeOptionalSyncSchema(bool synced)
84+
{
85+
string SyncedName(string name) => synced ? name : $"inactice_synced_{name}";
86+
string LocalName(string name) => synced ? $"inactive_local_{name}" : name;
87+
88+
return new Schema(
89+
new Table
90+
{
91+
Name = "assets",
92+
Columns = AssetsColumns,
93+
ViewName = SyncedName("assets"),
94+
},
95+
new Table
96+
{
97+
Name = "local_assets",
98+
Columns = AssetsColumns,
99+
ViewName = LocalName("assets"),
100+
LocalOnly = true,
101+
}
102+
);
103+
}
82104
}
105+

0 commit comments

Comments
 (0)