Skip to content

Commit b4685b6

Browse files
authored
Added query-with-index C# regression tests (#4123)
# Description of Changes Adds C# regression tests for Query with Indexes. # API and ABI breaking changes No. Regression tests only, does not touch backend code. # Expected complexity level and risk 1 # Testing - [X] Built and ran regression tests locally, confirming that new regression test asserts pass.
1 parent 8348151 commit b4685b6

14 files changed

Lines changed: 449 additions & 11 deletions

File tree

sdks/csharp/examples~/regression-tests/client/Program.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
/// then in a separate terminal run `tools~/run-regression-tests.sh PATH_TO_SPACETIMEDB_REPO_CHECKOUT`.
44
/// This is done on CI in .github/workflows/test.yml.
55
using System;
6+
using System.Collections.Generic;
67
using System.Diagnostics;
78
using System.Linq;
89
using System.Runtime.CompilerServices;
@@ -72,6 +73,15 @@ void OnConnected(DbConnection conn, Identity identity, string authToken)
7273
"SELECT * FROM my_log",
7374
"SELECT * FROM Admins",
7475
"SELECT * FROM nullable_vec_view",
76+
"SELECT * FROM users_named_alice",
77+
"SELECT * FROM users_age_18_65",
78+
"SELECT * FROM users_age_18_plus",
79+
"SELECT * FROM users_age_under_18",
80+
"SELECT * FROM scores_player_123",
81+
"SELECT * FROM scores_player_123_range",
82+
"SELECT * FROM scores_player_123_level5",
83+
"SELECT * FROM user",
84+
"SELECT * FROM score",
7585
]);
7686

7787
// If testing against Rust, the indexed parameter will need to be changed to: ulong indexed
@@ -241,6 +251,32 @@ void ValidateReducerErrorDoesNotContainStackTrace(Exception exception)
241251
Debug.Assert(!exception.Message.Contains(" at "), "Reducer error message should not contain stack trace");
242252
}
243253

254+
void ValidateQueryingWithIndexesExamples(IRemoteDbContext conn)
255+
{
256+
Log.Debug("Checking 'Querying with Indexes' documentation examples...");
257+
258+
var usersNamedAlice = conn.Db.UsersNamedAlice.Iter().Select(u => u.Name).ToList();
259+
Debug.Assert(usersNamedAlice.Count == 1 && usersNamedAlice[0] == "Alice", "Expected exactly one Alice in users_named_alice view");
260+
261+
var ages18To65 = conn.Db.UsersAge1865.Iter().Select(u => u.Name).ToHashSet();
262+
Debug.Assert(ages18To65.SetEquals(new[] { "Alice", "Charlie" }), "Expected Alice and Charlie in 18-65 age range");
263+
264+
var ages18OrOlder = conn.Db.UsersAge18Plus.Iter().Select(u => u.Name).ToHashSet();
265+
Debug.Assert(ages18OrOlder.SetEquals(new[] { "Alice", "Charlie" }), "Expected Alice and Charlie to be >= 18");
266+
267+
var youngerThan18 = conn.Db.UsersAgeUnder18.Iter().Select(u => u.Name).ToHashSet();
268+
Debug.Assert(youngerThan18.SetEquals(new[] { "Bob" }), "Expected Bob to be the only minor");
269+
270+
var player123Scores = conn.Db.ScoresPlayer123.Iter().ToList();
271+
Debug.Assert(player123Scores.Count == 3, $"Expected 3 scores for player 123, got {player123Scores.Count}");
272+
273+
var player123LevelRange = conn.Db.ScoresPlayer123Range.Iter().ToList();
274+
Debug.Assert(player123LevelRange.Count == 3, "Expected three scores for player 123 between levels 1 and 10 inclusive");
275+
276+
var player123Level5 = conn.Db.ScoresPlayer123Level5.Iter().ToList();
277+
Debug.Assert(player123Level5.Count == 1 && player123Level5[0].Points == 5_000, "Expected a single level-5 score worth 5,000 points for player 123");
278+
}
279+
244280
void OnSubscriptionApplied(SubscriptionEventContext context)
245281
{
246282
applied = true;
@@ -322,6 +358,8 @@ void OnSubscriptionApplied(SubscriptionEventContext context)
322358

323359
ValidateNullableVecView(context, expectedHasPos: true, expectedX: 1, expectedY: 2);
324360

361+
ValidateQueryingWithIndexesExamples(context);
362+
325363
Log.Debug("Calling Iter on View");
326364
var viewIterRows = context.Db.MyPlayer.Iter();
327365
var expectedPlayer = new Player

sdks/csharp/examples~/regression-tests/client/module_bindings/SpacetimeDBClient.g.cs

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdks/csharp/examples~/regression-tests/client/module_bindings/Tables/Score.g.cs

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdks/csharp/examples~/regression-tests/client/module_bindings/Tables/ScoresPlayer123.g.cs

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdks/csharp/examples~/regression-tests/client/module_bindings/Tables/ScoresPlayer123Level5.g.cs

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdks/csharp/examples~/regression-tests/client/module_bindings/Tables/ScoresPlayer123Range.g.cs

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdks/csharp/examples~/regression-tests/client/module_bindings/Tables/User.g.cs

Lines changed: 21 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdks/csharp/examples~/regression-tests/client/module_bindings/Tables/UsersAge1865.g.cs

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdks/csharp/examples~/regression-tests/client/module_bindings/Tables/UsersAge18Plus.g.cs

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdks/csharp/examples~/regression-tests/client/module_bindings/Tables/UsersAgeUnder18.g.cs

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)