diff --git a/E2eTest/CursorTest.cs b/E2eTest/CursorTest.cs new file mode 100644 index 0000000..010a180 --- /dev/null +++ b/E2eTest/CursorTest.cs @@ -0,0 +1,110 @@ +using E2eTest.Extensions; +using E2eTestWebApp.TestPages; + +namespace E2eTest; + +[TestClass] +public class CursorTest : TestBase +{ +[TestMethod] + public async Task Force_Cursor_Equal_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere36); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Basic_Cursor_Equal_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere41); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Multiple_Cursor_Conditions_OR(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere48); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Take_And_With_Index_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere54); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task TakeLast_And_With_Index_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere55); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Cursor_Last_Or_Default_Where_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere61); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Index_Last_Or_Default_Where_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere65); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Cursor_Where_Plus_OrderBy_Plus_Skip_Plus_Take(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere69); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Cursor_Where_Plus_OrderBy_Plus_Skip_Plus_Take_Plus_first_or_default(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere70); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Cursor_Where_Plus_OrderBy_Plus_Skip_Plus_Take_Plus_last_or_default(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere71); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Index_Where_Plus_OrderBy_Plus_Skip_Plus_Take(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere72); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Index_Where_Plus_OrderBy_Desc_Plus_Skip_Plus_Take(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere73); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Where_Plus_OrderByDescending_Plus_TakeLast(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere74); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Cursor_Test_Equals(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere85); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Where_Plus_OrderBy_Plus_Skip_Plus_TakeLast(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere91); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Paginated_Index_Query_with_AND_Condition(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere92); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Paginated_Cursor_Query_with_AND_Condition(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere93); + Assert.AreEqual("OK", result); + } +} diff --git a/E2eTest/OpenTest.cs b/E2eTest/OpenTest.cs index e90740f..9aeb640 100644 --- a/E2eTest/OpenTest.cs +++ b/E2eTest/OpenTest.cs @@ -1,6 +1,6 @@ using E2eTest.Entities; using E2eTest.Extensions; -using E2eTestWebApp.Models; +using TestBase.Models; using E2eTestWebApp.TestPages; using Magic.IndexedDb; @@ -12,7 +12,6 @@ public class OpenTest : TestBase [TestMethod] public async Task DirectOpenTest() { - var page = await this.NewPageAsync(); await page.DeleteDatabaseAsync("Person"); @@ -22,7 +21,7 @@ public async Task DirectOpenTest() var databases = await page.EvaluateAsync("indexedDB.databases()"); // The actual version will be 10: // https://dexie.org/docs/Dexie/Dexie.version() - Assert.IsTrue(databases!.Any(x => x.Name == "Person" && x.Version == 10)); + Assert.IsTrue(databases!.Any(x => x.Name == "Employee" && x.Version == 10)); } diff --git a/E2eTest/SingleRecordBasicTest.cs b/E2eTest/SingleRecordBasicTest.cs index d15e7b5..39b2352 100644 --- a/E2eTest/SingleRecordBasicTest.cs +++ b/E2eTest/SingleRecordBasicTest.cs @@ -9,9 +9,6 @@ public class SingleRecordBasicTest : TestBase [TestMethod] public async Task AddTest() { - var page = await this.NewPageAsync(); - await page.DeleteDatabaseAsync("Person"); - var result = await this.RunTestPageMethodAsync(p => p.Add); Assert.AreEqual(result, "OK"); } @@ -19,9 +16,6 @@ public async Task AddTest() [TestMethod] public async Task DeleteTest() { - var page = await this.NewPageAsync(); - await page.DeleteDatabaseAsync("Person"); - var result = await this.RunTestPageMethodAsync(p => p.Delete); Assert.AreEqual(result, "OK"); } @@ -29,9 +23,6 @@ public async Task DeleteTest() [TestMethod] public async Task UpdateTest() { - var page = await this.NewPageAsync(); - await page.DeleteDatabaseAsync("Person"); - var result = await this.RunTestPageMethodAsync(p => p.Update); Assert.AreEqual(result, "OK"); } @@ -39,9 +30,6 @@ public async Task UpdateTest() [TestMethod] public async Task GetAllTest() { - var page = await this.NewPageAsync(); - await page.DeleteDatabaseAsync("Person"); - var result = await this.RunTestPageMethodAsync(p => p.GetAll); Assert.AreEqual(result, "OK"); } diff --git a/E2eTest/TestBase.cs b/E2eTest/TestBase.cs index 178f981..1327d6c 100644 --- a/E2eTest/TestBase.cs +++ b/E2eTest/TestBase.cs @@ -4,6 +4,7 @@ using Microsoft.Playwright; using System.Linq.Expressions; using System.Reflection; +using E2eTest.Extensions; namespace E2eTest; @@ -49,6 +50,10 @@ protected async ValueTask RunTestPageMethodAsync( await page.GotoAsync(typeof(TPage).GetCustomAttribute()?.Template ?? ""); await this.Expect(page.GetByTestId("output")).ToHaveValueAsync("Loaded."); + + await page.DeleteDatabaseAsync("Animal"); + await page.DeleteDatabaseAsync("Client"); + await page.DeleteDatabaseAsync("Employee"); await page.GetByTestId("method").FillAsync(ResolveMethod(method)); await page.WaitForTimeoutAsync(500); diff --git a/E2eTest/WhereTest.cs b/E2eTest/WhereTest.cs index b09f4cf..9f8642f 100644 --- a/E2eTest/WhereTest.cs +++ b/E2eTest/WhereTest.cs @@ -7,11 +7,455 @@ namespace E2eTest; public class WhereTest : TestBase { [TestMethod] - public async Task Where1Test() - { - var page = await this.NewPageAsync(); - await page.DeleteDatabaseAsync("Person"); - var result = await this.RunTestPageMethodAsync(p => p.Where1); - Assert.AreEqual(result, "OK"); + public async Task Date_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere0); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Not_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere1); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Greater_Than(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere2); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Greater_Than_Or_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere3); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Less_Than(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere4); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Less_Than_Or_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere5); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Year_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere6); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Year_Not_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere7); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Year_Greater_Than(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere8); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Year_Greater_Than_Or_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere9); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Year_Less_Than(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere10); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Year_Less_Than_Or_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere11); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Month_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere12); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere13); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Year_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere14); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Year_Not_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere15); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Year_Greater_Than(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere16); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Year_Greater_Than_Or_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere17); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Year_Less_Than(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere18); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Year_Less_Than_Or_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere19); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Week_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere20); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Week_Greater_Than(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere21); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Week_Greater_Than_Or_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere22); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Week_Less_Than(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere23); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Date_Day_Of_Week_Less_Than_Or_Equal(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere24); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task String_Length_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere25); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Nullable_Date_Time_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere26); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Not_Null_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere27); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Is_Null_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere28); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task One_Char_contains(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere29); + Assert.AreEqual("OK", result); + + result = await this.RunTestPageMethodAsync(p => p.TestWhere30); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Ends_With_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere31); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Ends_With_Negative_Test1(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere32); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Contains_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere33); + Assert.AreEqual("OK", result); + + result = await this.RunTestPageMethodAsync(p => p.TestWhere38); + Assert.AreEqual("OK", result); + + result = await this.RunTestPageMethodAsync(p => p.TestWhere44); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Combined_Query_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere34); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Get_All_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere35); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Not_Equals_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere37); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Not_Contains_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere39); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Basic_Index_Equal_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere40); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Greater_Than_Age_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere42); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Less_Than_or_Equal_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere43); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task StartsWith_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere45); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Multiple_Conditions_AND(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere46); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Multiple_Index_Conditions_OR(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere47); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Nested_AND_OR(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere49); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Ordering_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere50); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Order_Descending_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere51); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Skip_Test1(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere52); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Take_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere53); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Take_Index_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere56); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task TakeLast_Index_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere57); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Cursor_First_Or_Default_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere58); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Cursor_First_Or_Default_Where_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere59); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Cursor_Last_Or_Default_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere60); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Index_First_Or_Default_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere62); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Index_First_Or_Default_Where_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere63); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Index_Last_Or_Default_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere64); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task TakeLast_Cursor_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere66); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Chained_Where_Conditions(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere67); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Chained_Where_with_AND_OR(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere68); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Nested_OR_within_AND(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere75); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Nested_AND_within_OR(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere76); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task No_Matching_Records(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere77); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Null_DateOfBirth_Handling(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere78); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Null_Field_with_OR(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere79); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Skip_and_Take_Across_Boundaries(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere80); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Large_Take_Last_Test(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere81); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Return_ToListAsync(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere82); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Universal_Truth_Where_Condition(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere83); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Universal_False_Where_Condition(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere84); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task NOT_EQUAL(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere86); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task NOT_Contains(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere87); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task NOT_Greater_Than(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere88); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Deeply_Nested_OR_within_AND(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere89); + Assert.AreEqual("OK", result); + } + + [TestMethod] + public async Task Query_on_Not_mapped_Property(){ + var result = await this.RunTestPageMethodAsync(p => p.TestWhere90); + Assert.AreEqual("OK", result); } } diff --git a/E2eTestWebApp/E2eTestWebApp.csproj b/E2eTestWebApp/E2eTestWebApp.csproj index 546ac5c..9846fed 100644 --- a/E2eTestWebApp/E2eTestWebApp.csproj +++ b/E2eTestWebApp/E2eTestWebApp.csproj @@ -8,6 +8,12 @@ + + + + + <_ContentIncludedByDefault Remove="Pages\Error.razor" /> + <_ContentIncludedByDefault Remove="Pages\Home.razor" /> diff --git a/E2eTestWebApp/Models/IndexedDbContext.cs b/E2eTestWebApp/Models/IndexedDbContext.cs deleted file mode 100644 index bfa9460..0000000 --- a/E2eTestWebApp/Models/IndexedDbContext.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Magic.IndexedDb; -using Magic.IndexedDb.Interfaces; - -namespace E2eTestWebApp.Models; - -public class IndexedDbContext : IMagicRepository -{ - public static readonly IndexedDbSet Person = new("Person"); -} \ No newline at end of file diff --git a/E2eTestWebApp/Models/Person.cs b/E2eTestWebApp/Models/Person.cs deleted file mode 100644 index 7f2f5bb..0000000 --- a/E2eTestWebApp/Models/Person.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Magic.IndexedDb; -using Magic.IndexedDb.SchemaAnnotations; - -namespace E2eTestWebApp.Models; - -public class Person : MagicTableTool, IMagicTable -{ - public int Id { get; set; } - - public IMagicCompoundKey GetKeys() => - CreatePrimaryKey(x => x.Id, true); // Auto-incrementing primary key - - public List? GetCompoundIndexes() => []; - - public string GetTableName() => "Person"; - public IndexedDbSet GetDefaultDatabase() => IndexedDbContext.Person; - - public DbSets Databases { get; } = new(); - public sealed class DbSets - { - public readonly IndexedDbSet Person = IndexedDbContext.Person; - } - - [MagicIndex] // Creates an index on this field - public string Name { get; set; } - - [MagicUniqueIndex("guid")] // Unique constraint - public Guid UniqueGuid { get; set; } = Guid.NewGuid(); - - public int Age { get; set; } - - [MagicNotMapped] // Exclude from IndexedDB schema - public string Secret { get; set; } -} \ No newline at end of file diff --git a/E2eTestWebApp/Pages/Error.razor b/E2eTestWebApp/Pages/Error.razor deleted file mode 100644 index 576cc2d..0000000 --- a/E2eTestWebApp/Pages/Error.razor +++ /dev/null @@ -1,36 +0,0 @@ -@page "/Error" -@using System.Diagnostics - -Error - -

Error.

-

An error occurred while processing your request.

- -@if (ShowRequestId) -{ -

- Request ID: @RequestId -

-} - -

Development Mode

-

- Swapping to Development environment will display more detailed information about the error that occurred. -

-

- The Development environment shouldn't be enabled for deployed applications. - It can result in displaying sensitive information from exceptions to end users. - For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development - and restarting the app. -

- -@code{ - [CascadingParameter] - private HttpContext? HttpContext { get; set; } - - private string? RequestId { get; set; } - private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); - - protected override void OnInitialized() => - RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; -} diff --git a/E2eTestWebApp/Pages/Home.razor b/E2eTestWebApp/Pages/Home.razor deleted file mode 100644 index 8e9f60e..0000000 --- a/E2eTestWebApp/Pages/Home.razor +++ /dev/null @@ -1,7 +0,0 @@ -@page "/" - -Home - -

Hello, world!

- -This project is designed for end-to-end test. Please run the tests. diff --git a/E2eTestWebApp/TestPages/CursorTestPage.cs b/E2eTestWebApp/TestPages/CursorTestPage.cs new file mode 100644 index 0000000..f7fd95b --- /dev/null +++ b/E2eTestWebApp/TestPages/CursorTestPage.cs @@ -0,0 +1,184 @@ +using Magic.IndexedDb; +using Magic.IndexedDb.Helpers; +using Microsoft.AspNetCore.Components; +using System.Text.Json; +using TestBase.Data; +using TestBase.Models; + +namespace E2eTestWebApp.TestPages; + +[Route("/CursorTest")] +public class CursorTestPage(IMagicIndexedDb magic) : TestPageBase +{ + public async Task> SetupData() + { + var db = await magic.Query(); + await db.AddRangeAsync(PersonData.persons); + return db; + } + + public async Task GetDebugString() + { + var db = await SetupData(); + var items = await db.ToListAsync(); + var ret = string.Empty; + foreach (var item in items) + { + ret += System.Text.Json.JsonSerializer.Serialize(item) + "\n"; + } + return ret; + } + + public async Task TestWhere36() { + var result = RunTest("Force Cursor Equal Test", await (await SetupData()).Cursor(x => x.Name == "Zack").ToListAsync(), + PersonData.persons.Where(x => x.Name == "Zack")); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere41() { + var result = RunTest("Basic Cursor Equal Test", await (await SetupData()).Cursor(x => x._Age == 35).ToListAsync(), + PersonData.persons.Where(x => x._Age == 35)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere48() { + var result = RunTest("Multiple Cursor Conditions OR", await (await SetupData()).Cursor(x => x._Age > 50 || x.TestInt == 3).ToListAsync(), + PersonData.persons.Where(x => x._Age > 50 || x.TestInt == 3)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere54() { + var result = RunTest("Take & With Index Test", await (await SetupData()).Cursor(x => x.Name.StartsWith("J")) + .OrderBy(x => x.Name).Take(2).ToListAsync(), + PersonData.persons.Where(x => x.Name.StartsWith("J")).OrderBy(x => x.Name).ThenBy(x => x._Id).Take(2)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere55() { + var result = RunTest("TakeLast & With Index Test", await (await SetupData()).Cursor(x => x.Name.StartsWith("J")) + .OrderBy(x => x.Name).TakeLast(2).ToListAsync(), + PersonData.persons.Where(x => x.Name.StartsWith("J")).OrderBy(x => x.Name).ThenBy(x => x._Id).TakeLast(2)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere61() { + var result = RunTest("Cursor Last Or Default Where Test", new List() { await (await SetupData()).Cursor(x => x.Name == "Victor").OrderBy(x => x._Age).LastOrDefaultAsync() }, + new List() { PersonData.persons.Where(x => x.Name == "Victor").OrderBy(x => x._Age).ThenBy(x => x._Id).LastOrDefault() }); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere65() { + var result = RunTest("Index Last Or Default Where Test", new List() { await (await SetupData()).Cursor(x => x.Name == "Victor").OrderBy(x => x._Id).LastOrDefaultAsync() }, + new List() { PersonData.persons.Where(x => x.Name == "Victor").OrderBy(x => x._Id).LastOrDefault() }); + return result.Success ? "OK" : result.Message; + } + + // 🔄 Mixing Where, OrderBy, Skip, and Take + public async Task TestWhere69() { + var result = RunTest("Cursor Where + OrderBy + Skip + Take", + await (await SetupData()).Cursor(x => x._Age > 30) + .OrderBy(x => x._Age) + .Take(3) + .Skip(2) + .ToListAsync(), + PersonData.persons.Where(x => x._Age > 30).OrderBy(x => x._Age).ThenBy(x => x._Id).Skip(2).Take(3)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere70() { + var result = RunTest("Cursor Where + OrderBy + Skip + Take + first or default", + new List() { await (await SetupData()).Cursor(x => x._Age > 30) + .OrderBy(x => x._Age) + .Take(3) + .Skip(2) + .FirstOrDefaultAsync() }, + new List() { PersonData.persons.Where(x => x._Age > 30).OrderBy(x => x._Age).ThenBy(x => x._Id).Skip(2).Take(3).FirstOrDefault() }); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere71() { + var result = RunTest("Cursor Where + OrderBy + Skip + Take + last or default", + new List() { await (await SetupData()).Cursor(x => x._Age > 30) + .OrderBy(x => x._Age) + .Take(3) + .Skip(2) + .LastOrDefaultAsync() }, + new List() { PersonData.persons.Where(x => x._Age > 30).OrderBy(x => x._Age).ThenBy(x => x._Id).Skip(2).Take(3).LastOrDefault() }); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere72() { + var result = RunTest("Index Where + OrderBy + Skip + Take", + await (await SetupData()).Cursor(x => x.Name.StartsWith("J")) + .OrderBy(x => x._Id) + .Take(3) + .Skip(2) + .ToListAsync(), + PersonData.persons.Where(x => x.Name.StartsWith("J")).OrderBy(x => x._Id).ThenBy(x => x._Id).Skip(2).Take(3)); +return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere73() { + var result = RunTest("Index Where + OrderBy Desc + Skip + Take", + await (await SetupData()).Cursor(x => x.Name.StartsWith("J")) + .OrderByDescending(x => x._Id) + .Take(3) + .Skip(2) + .ToListAsync(), + PersonData.persons.Where(x => x.Name.StartsWith("J")).OrderByDescending(x => x._Id).ThenByDescending(x => x._Id).Skip(2).Take(3)); +return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere74() { + var result = RunTest("Where + OrderByDescending + TakeLast", + await (await SetupData()).Cursor(x => x._Age < 60) + .OrderByDescending(x => x._Age) + .TakeLast(2) + .ToListAsync(), + PersonData.persons.Where(x => x._Age < 60).OrderByDescending(x => x._Age).ThenByDescending(x => x._Id).TakeLast(2)); + return result.Success ? "OK" : result.Message; + + //await Task.Delay(10000); + } + + public async Task TestWhere85() { + var result = RunTest("Cursor Test Equals", + await (await SetupData()).Cursor(x => x.Name == "Zack").ToListAsync(), + PersonData.persons.Where(x => x.Name == "Zack")); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere91() { + var result = RunTest("Where + OrderBy + Skip + TakeLast", + await (await SetupData()).Cursor(x => x.TestInt > 2) + .OrderBy(x => x._Id) + .TakeLast(2) + .ToListAsync(), + PersonData.persons.Where(x => x.TestInt > 2).OrderBy(x => x._Id).ThenBy(x => x._Id).TakeLast(2)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere92() { + var result = RunTest("Paginated Index Query with AND Condition", + await (await SetupData()).Cursor(x => x.TestInt > 2 && x.TestInt == 9) + .OrderBy(x => x._Id) + .Take(3) + .Skip(1) + .ToListAsync(), + PersonData.persons.Where(x => x.TestInt > 2 && x.TestInt == 9).OrderBy(x => x._Id).ThenBy(x => x._Id).Skip(1).Take(3)); +return result.Success ? "OK" : result.Message; + + + } + // 🔄 Complex Pagination with Condition + public async Task TestWhere93() { + var result = RunTest("Paginated Cursor Query with AND Condition", + await (await SetupData()).Cursor(x => x._Age > 30 && x.TestInt == 9) + .OrderBy(x => x._Age) + .Take(3) + .Skip(1) + .ToListAsync(), + PersonData.persons.Where(x => x._Age > 30 && x.TestInt == 9).OrderBy(x => x._Age).ThenBy(x => x._Id).Skip(1).Take(3)); + return result.Success ? "OK" : result.Message; + } +} \ No newline at end of file diff --git a/E2eTestWebApp/TestPages/OpenTestPage.cs b/E2eTestWebApp/TestPages/OpenTestPage.cs index 4228e69..b96e51f 100644 --- a/E2eTestWebApp/TestPages/OpenTestPage.cs +++ b/E2eTestWebApp/TestPages/OpenTestPage.cs @@ -1,6 +1,8 @@ -using E2eTestWebApp.Models; +using TestBase.Models; +using TestBase.Repository; using Magic.IndexedDb; using Microsoft.AspNetCore.Components; +using TestBase.Repository; namespace E2eTestWebApp.TestPages; @@ -9,7 +11,7 @@ public class OpenTestPage(IMagicIndexedDb magic) : TestPageBase { public async Task DirectOpen() { - var connection = await magic.Database(IndexedDbContext.Person); + var connection = await magic.Database(IndexDbContext.Employee); await connection.OpenAsync(); return "OK"; } diff --git a/E2eTestWebApp/TestPages/SingleRecordBasicTestPage.cs b/E2eTestWebApp/TestPages/SingleRecordBasicTestPage.cs index 9dd9d36..67ac900 100644 --- a/E2eTestWebApp/TestPages/SingleRecordBasicTestPage.cs +++ b/E2eTestWebApp/TestPages/SingleRecordBasicTestPage.cs @@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Components; using Magic.IndexedDb.SchemaAnnotations; using System.Text.Json; -using E2eTestWebApp.Models; +using TestBase.Models; namespace E2eTestWebApp.TestPages; @@ -13,7 +13,7 @@ public class SingleRecordBasicTestPage(IMagicIndexedDb magic) : TestPageBase public async Task Add() { var db = await magic.Query(); - await db.AddAsync(new Person { Age = 20, Name = "John" }); + await db.AddAsync(new Person { _Age = 20, Name = "John" }); var results = await db.ToListAsync(); return results.Count == 1 ? "OK" : "Incorrect"; @@ -22,8 +22,8 @@ public async Task Add() public async Task Delete() { var db = await magic.Query(); - await db.AddAsync(new Person { Id = 1, Age = 20, Name = "John" }); - await db.DeleteAsync(new Person {Id = 1, Age = 20, Name = "John" }); + await db.AddAsync(new Person { _Id = 1, _Age = 20, Name = "John" }); + await db.DeleteAsync(new Person {_Id = 1, _Age = 20, Name = "John" }); var results = await db.ToListAsync(); return results.Count == 0 ? "OK" : "Incorrect"; @@ -32,19 +32,19 @@ public async Task Delete() public async Task Update() { var db = await magic.Query(); - await db.AddAsync(new Person { Id = 1, Age = 20, Name = "John" }); - await db.UpdateAsync(new Person { Id = 1, Age = 25, Name = "John" }); + await db.AddAsync(new Person { _Id = 1, _Age = 20, Name = "John" }); + await db.UpdateAsync(new Person { _Id = 1, _Age = 25, Name = "John" }); var results = await db.ToListAsync(); - return results.First().Age == 25 ? "OK" : "Incorrect"; + return results.First()._Age == 25 ? "OK" : "Incorrect"; } public async Task GetAll() { var db = await magic.Query(); - await db.AddAsync(new Person { Age = 20, Name = "John" }); - await db.AddAsync(new Person { Age = 25, Name = "Peter" }); - await db.AddAsync(new Person { Age = 35, Name = "Bert" }); + await db.AddAsync(new Person { _Age = 20, Name = "John" }); + await db.AddAsync(new Person { _Age = 25, Name = "Peter" }); + await db.AddAsync(new Person { _Age = 35, Name = "Bert" }); var results = await db.ToListAsync(); return results.Count == 3 ? "OK" : "Incorrect"; diff --git a/E2eTestWebApp/TestPages/TestPageBase.razor.cs b/E2eTestWebApp/TestPages/TestPageBase.razor.cs index 0f86056..b46113a 100644 --- a/E2eTestWebApp/TestPages/TestPageBase.razor.cs +++ b/E2eTestWebApp/TestPages/TestPageBase.razor.cs @@ -1,3 +1,6 @@ +using TestBase.Helpers; +using TestBase.Models; + namespace E2eTestWebApp.TestPages; partial class TestPageBase @@ -36,4 +39,10 @@ private void Clear() { this.output = ""; } + + public TestResponse RunTest(string testName, + IEnumerable indexDbResults, IEnumerable correctResults) where T : class + { + return TestValidator.ValidateLists(correctResults, indexDbResults); + } } diff --git a/E2eTestWebApp/TestPages/WhereTestPage.cs b/E2eTestWebApp/TestPages/WhereTestPage.cs index 350a21b..d1beb03 100644 --- a/E2eTestWebApp/TestPages/WhereTestPage.cs +++ b/E2eTestWebApp/TestPages/WhereTestPage.cs @@ -1,32 +1,617 @@ using Magic.IndexedDb; -using Magic.IndexedDb.Helpers; using Microsoft.AspNetCore.Components; -using System.Text.Json; -using E2eTestWebApp.Models; +using TestBase.Models; +using TestBase.Data; namespace E2eTestWebApp.TestPages; [Route("/WhereTest")] public class WhereTestPage(IMagicIndexedDb magic) : TestPageBase { - /*[MagicTable("Records", null)] - private class Record + public async Task> SetupData() { - [MagicPrimaryKey("Id")] - public int Id { get; set; } + var db = await magic.Query(); + await db.AddRangeAsync(PersonData.persons); + return db; + } - public int Int32Field { get; set; } - }*/ + public async Task GetDebugString() + { + var db = await SetupData(); + var items = await db.ToListAsync(); + var ret = string.Empty; + foreach (var item in items) + { + ret += System.Text.Json.JsonSerializer.Serialize(item) + "\n"; + } + return ret; + } - public async Task Where1() + public async Task TestWhere0() { - var db = await magic.Query(); - await db.AddAsync(new Person { Age = 20, Name = "John" }); - await db.AddAsync(new Person { Age = 25, Name = "Peter" }); - await db.AddAsync(new Person { Age = 35, Name = "Bert" }); + var result = RunTest("Date Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Date == new DateTime(2020, 2, 10)).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Date == new DateTime(2020, 2, 10))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere1() { + var result = RunTest("Date Not Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Date != new DateTime(2020, 2, 10)).ToListAsync(), + PersonData.persons.Where(x => !x.DateOfBirth.HasValue || x.DateOfBirth.Value.Date != new DateTime(2020, 2, 10))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere2() { + var result = RunTest("Date Greater Than", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Date > new DateTime(2020, 2, 9)).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Date > new DateTime(2020, 2, 9))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere3() { + var result = RunTest("Date Greater Than Or Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Date >= new DateTime(2020, 2, 10)).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Date >= new DateTime(2020, 2, 10))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere4() { + var result = RunTest("Date Less Than", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Date < new DateTime(2020, 2, 11)).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Date < new DateTime(2020, 2, 11))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere5() { + var result = RunTest("Date Less Than Or Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Date <= new DateTime(2020, 2, 10)).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Date <= new DateTime(2020, 2, 10))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere6() { + var result = RunTest("Date Year Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Year == 2020).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Year == 2020)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere7() { + var result = RunTest("Date Year Not Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Year != 2021).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Year != 2021)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere8() { + var result = RunTest("Date Year Greater Than", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Year > 2019).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Year > 2019)); + return result.Success ? "OK" : result.Message; + } - var results = await db.Where(p => p.Age < 30).ToListAsync(); + public async Task TestWhere9() { + var result = RunTest("Date Year Greater Than Or Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Year >= 2020).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Year >= 2020)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere10() { + var result = RunTest("Date Year Less Than", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Year < 2021).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Year < 2021)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere11() { + var result = RunTest("Date Year Less Than Or Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Year <= 2020).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Year <= 2020)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere12() { + var result = RunTest("Date Month Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Month == 2).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Month == 2)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere13() { + var result = RunTest("Date Day Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.Day == 10).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Day == 10)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere14() { + var result = RunTest("Date Day Of Year Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfYear == 41).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfYear == 41)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere15() { + var result = RunTest("Date Day Of Year Not Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfYear != 41).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfYear != 41)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere16() { + var result = RunTest("Date Day Of Year Greater Than", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfYear > 40).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfYear > 40)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere17() { + var result = RunTest("Date Day Of Year Greater Than Or Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfYear >= 41).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfYear >= 41)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere18() { + var result = RunTest("Date Day Of Year Less Than", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfYear < 42).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfYear < 42)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere19() { + var result = RunTest("Date Day Of Year Less Than Or Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfYear <= 41).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfYear <= 41)); + return result.Success ? "OK" : result.Message; + } - return results.Count == 2 ? "OK" : "Incorrect"; + public async Task TestWhere20() { + var result = RunTest("Date Day Of Week Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfWeek == DayOfWeek.Monday).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfWeek == DayOfWeek.Monday)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere21() { + var result = RunTest("Date Day Of Week Greater Than", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfWeek > DayOfWeek.Sunday).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfWeek > DayOfWeek.Sunday)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere22() { + var result = RunTest("Date Day Of Week Greater Than Or Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfWeek >= DayOfWeek.Sunday).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfWeek >= DayOfWeek.Sunday)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere23() { + var result = RunTest("Date Day Of Week Less Than", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfWeek < DayOfWeek.Tuesday).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfWeek < DayOfWeek.Tuesday)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere24() { + var result = RunTest("Date Day Of Week Less Than Or Equal", + await (await SetupData()).Where(x => x.DateOfBirth.Value.DayOfWeek <= DayOfWeek.Monday).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfWeek <= DayOfWeek.Monday)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere25() { + var result = RunTest("String Length Test", await (await SetupData()).Where(x => x.Name.Length > 4).ToListAsync(), + PersonData.persons.Where(x => x.Name.Length > 4)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere26() { + var result = RunTest("Nullable Date Time Test", await (await SetupData()).Where(x => x.DateOfBirth == new DateTime(2020, 2, 10)).ToListAsync(), + PersonData.persons.Where(x => x.Name == "Zane")); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere27() { + var result = RunTest("Not Null Test", await (await SetupData()).Where(x => x.DateOfBirth != null).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth != null)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere28() { + var result = RunTest("Is Null Test", await (await SetupData()).Where(x => x.DateOfBirth == null).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth == null)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere29() { + var result = RunTest("One Char contains", await (await SetupData()).Where(x => x.TestInt >= 1 && x.TestInt < 10).ToListAsync(), + PersonData.persons.Where(x => x.TestInt >= 1 && x.TestInt < 10)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere30() { + var result = RunTest("One Char contains", await (await SetupData()).Where(x => x.Name.Contains("J")).ToListAsync(), + PersonData.persons.Where(x => x.Name.Contains("J"))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere31() { + var result = RunTest("Ends With Test", await (await SetupData()).Where(x => x.Name.EndsWith("ack")).ToListAsync(), + PersonData.persons.Where(x => x.Name.EndsWith("ack"))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere32() { + var result = RunTest("Ends With Negative Test", await (await SetupData()).Where(x => !x.Name.EndsWith("ack")).ToListAsync(), + PersonData.persons.Where(x => !x.Name.EndsWith("ack"))); + return result.Success ? "OK" : result.Message; + + int[] myArray = { 38, 39 }; + } + + public async Task TestWhere33() { + int[] myArray = { 38, 39 }; + var result = RunTest("Contains Test", await (await SetupData()).Where(x => myArray.Contains(x._Age)).ToListAsync(), + PersonData.persons.Where(x => myArray.Contains(x._Age))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere34() { + var result = RunTest("Combined Query Test", await (await SetupData()).Where(x => x.Name == "Zack" && x.TestIntStable2 == 10).ToListAsync(), + PersonData.persons.Where(x => x.Name == "Zack" && x.TestIntStable2 == 10)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere35() { + var result = RunTest("Get All Test", await (await SetupData()).ToListAsync(), + PersonData.persons); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere37() { + var result = RunTest("Not Equals Test", await (await SetupData()).Where(x => x.Name != "Zack").ToListAsync(), + PersonData.persons.Where(x => x.Name != "Zack")); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere38() { + var result = RunTest("Contains Test", await (await SetupData()).Where(x => x.Name.Contains("zac", StringComparison.OrdinalIgnoreCase)).ToListAsync(), + PersonData.persons.Where(x => x.Name.Contains("zac", StringComparison.OrdinalIgnoreCase))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere39() { + var result = RunTest("Not Contains Test", await (await SetupData()).Where(x => !x.Name.Contains("zac", StringComparison.OrdinalIgnoreCase)).ToListAsync(), + PersonData.persons.Where(x => !x.Name.Contains("zac", StringComparison.OrdinalIgnoreCase))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere40() { + var result = RunTest("Basic Index Equal Test", await (await SetupData()).Where(x => x.Name == "Zack").ToListAsync(), + PersonData.persons.Where(x => x.Name == "Zack")); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere42() { + var result = RunTest("Greater Than Age Test", await (await SetupData()).Where(x => x._Age > 40).ToListAsync(), + PersonData.persons.Where(x => x._Age > 40)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere43() { + var result = RunTest("Less Than or Equal Test", await (await SetupData()).Where(x => x._Age <= 35).ToListAsync(), + PersonData.persons.Where(x => x._Age <= 35)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere44() { + var result = RunTest("Contains Test", await (await SetupData()).Where(x => x.Name.Contains("bo", StringComparison.OrdinalIgnoreCase)).ToListAsync(), + PersonData.persons.Where(x => x.Name.Contains("bo", StringComparison.OrdinalIgnoreCase))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere45() { + var result = RunTest("StartsWith Test", await (await SetupData()).Where(x => x.Name.StartsWith("C", StringComparison.OrdinalIgnoreCase)).ToListAsync(), + PersonData.persons.Where(x => x.Name.StartsWith("C", StringComparison.OrdinalIgnoreCase))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere46() { + var result = RunTest("Multiple Conditions AND", await (await SetupData()).Where(x => x._Age > 30 && x.TestInt == 9).ToListAsync(), + PersonData.persons.Where(x => x._Age > 30 && x.TestInt == 9)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere47() { + var result = RunTest("Multiple Index Conditions OR", await (await SetupData()).Where(x => x.Name == "Isla" || x.Name == "Zack").ToListAsync(), + PersonData.persons.Where(x => x.Name == "Zack" || x.Name == "Isla")); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere49() { + var result = RunTest("Nested AND/OR", await (await SetupData()).Where(x => (x._Age > 35 && x.TestInt == 9) || x.Name.Contains("bo", StringComparison.OrdinalIgnoreCase)).ToListAsync(), + PersonData.persons.Where(x => (x._Age > 35 && x.TestInt == 9) || x.Name.Contains("bo", StringComparison.OrdinalIgnoreCase))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere50() { + var result = RunTest("Ordering Test", await (await SetupData()).OrderBy(x => x._Age).ToListAsync(), + PersonData.persons.OrderBy(x => x._Age).ThenBy(x => x._Id)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere51() { + var result = RunTest("Order Descending Test", await (await SetupData()).OrderByDescending(x => x._Age).ToListAsync(), + PersonData.persons.OrderByDescending(x => x._Age).ThenByDescending(x => x._Id)); + return result.Success ? "OK" : result.Message; + + var asdfsdfdsfsdf = await (await SetupData()).OrderBy(x => x._Age).Skip(3).ToListAsync(); + } + + public async Task TestWhere52() { + var result = RunTest("Skip Test", await (await SetupData()).OrderBy(x => x._Age).Skip(3).ToListAsync(), + PersonData.persons.OrderBy(x => x._Age).ThenBy(x => x._Id).Skip(3)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere53() { + var result = RunTest("Take Test", await (await SetupData()).OrderBy(x => x._Age).Take(2).ToListAsync(), + PersonData.persons.OrderBy(x => x._Age).ThenBy(x => x._Id).Take(2)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere56() { + var result = RunTest("Take Index Test", await (await SetupData()).OrderBy(x => x.Name).Take(2).ToListAsync(), + + /* + * Take last is special operation that changes order, + * but this altered version replicates the LINQ to SQL desired result + */ + PersonData.persons.OrderBy(x => x.Name).ThenBy(x => x._Id).Take(2)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere57() { + var result = RunTest("TakeLast Index Test", await (await SetupData()).OrderBy(x => x.Name).TakeLast(2).ToListAsync(), + + /* + * Take last is special operation that changes order, + * but this altered version replicates the LINQ to SQL desired result + */ + PersonData.persons.OrderBy(x => x.Name).ThenBy(x => x._Id).TakeLast(2)); + return result.Success ? "OK" : result.Message; + + var totalPersons = await (await SetupData()).CountAsync(); + var test1 = await (await SetupData()).FirstOrDefaultAsync(); + var test2 = await (await SetupData()).FirstOrDefaultAsync(x => x.Name == "Victor"); + + var asdffffff = await (await SetupData()).FirstOrDefaultAsync(x => x.Name == "asdfn3nxknnd"); + } + + public async Task TestWhere58() { + var result = RunTest("Cursor First Or Default Test", new List() { await (await SetupData()).OrderBy(x => x._Age).FirstOrDefaultAsync() }, + new List() { PersonData.persons.OrderBy(x => x._Age).ThenBy(x => x._Id).FirstOrDefault() }); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere59() { + var result = RunTest("Cursor First Or Default Where Test", new List() { await (await SetupData()).OrderBy(x => x._Age).FirstOrDefaultAsync(x => x.Name == "Victor") }, + new List() { PersonData.persons.OrderBy(x => x._Age).ThenBy(x => x._Id).FirstOrDefault(x => x.Name == "Victor") }); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere60() { + var result = RunTest("Cursor Last Or Default Test", new List() { await (await SetupData()).OrderBy(x => x._Age).LastOrDefaultAsync() }, + new List() { PersonData.persons.OrderBy(x => x._Age).ThenBy(x => x._Id).LastOrDefault() }); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere62() { + var result = RunTest("Index First Or Default Test", new List() { await (await SetupData()).OrderBy(x => x._Id).FirstOrDefaultAsync() }, + new List() { PersonData.persons.OrderBy(x => x._Id).ThenBy(x => x._Id).FirstOrDefault() }); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere63() { + var result = RunTest("Index First Or Default Where Test", new List() { await (await SetupData()).OrderBy(x => x._Id).FirstOrDefaultAsync(x => x.Name == "Victor") }, + new List() { PersonData.persons.OrderBy(x => x._Id).ThenBy(x => x._Id).FirstOrDefault(x => x.Name == "Victor") }); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere64() { + var result = RunTest("Index Last Or Default Test", new List() { await (await SetupData()).OrderBy(x => x._Id).LastOrDefaultAsync() }, + new List() { PersonData.persons.OrderBy(x => x._Id).ThenBy(x => x._Id).LastOrDefault() }); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere66() { + var result = RunTest("TakeLast Cursor Test", await (await SetupData()).OrderBy(x => x._Age).TakeLast(2).ToListAsync(), + PersonData.persons.OrderBy(x => x._Age).ThenBy(x => x._Id).TakeLast(2)); + return result.Success ? "OK" : result.Message; + + } + // 🛠️ Chaining Multiple Where Statements + public async Task TestWhere67() { + var result = RunTest("Chained Where Conditions", + await (await SetupData()).Where(x => x._Age > 30) + .Where(x => x.TestInt == 9) + .ToListAsync(), + PersonData.persons.Where(x => x._Age > 30).Where(x => x.TestInt == 9)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere68() { + var result = RunTest("Chained Where with AND/OR", + await (await SetupData()).Where(x => x._Age > 30) + .Where(x => x.TestInt == 9 || x.Name.StartsWith("C", StringComparison.OrdinalIgnoreCase)) + .ToListAsync(), + PersonData.persons.Where(x => x._Age > 30).Where(x => x.TestInt == 9 || x.Name.StartsWith("C", StringComparison.OrdinalIgnoreCase))); + return result.Success ? "OK" : result.Message; + + } + + // 🧩 Complex Nested Conditions + public async Task TestWhere75() { + var result = RunTest("Nested OR within AND", + await (await SetupData()).Where(// EXAMPLE of a deeply nested expression: + p => + ( + // Group 1: TestInt matches + (p.TestInt == 9 || p.TestInt == 3 || p.TestInt == 7) + + && + + // Group 2: Specific names or age range + ( + (p.Name == "Luna" || p.Name == "Jerry" || p.Name == "Jamie") + || (p._Age >= 35 && p._Age <= 40) + || (p.Name == "Zane" && p._Age > 45) + ) + + && + + // Group 3: Age-based logic only + (p._Age < 30 || p._Age > 50 || p._Age == 35) + ) + ).ToListAsync(), + PersonData.persons.Where(// EXAMPLE of a deeply nested expression: + p => + ( + // Group 1: TestInt matches + (p.TestInt == 9 || p.TestInt == 3 || p.TestInt == 7) + + && + + // Group 2: Specific names or age range + ( + (p.Name == "Luna" || p.Name == "Jerry" || p.Name == "Jamie") + || (p._Age >= 35 && p._Age <= 40) + || (p.Name == "Zane" && p._Age > 45) + ) + + && + + // Group 3: Age-based logic only + (p._Age < 30 || p._Age > 50 || p._Age == 35) + )).ToList()); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere76() { + var result = RunTest("Nested AND within OR", + await (await SetupData()).Where(x => (x._Age > 40 && x.TestInt == 9) || x.Name.Contains("bo", StringComparison.OrdinalIgnoreCase)) + .ToListAsync(), + PersonData.persons.Where(x => (x._Age > 40 && x.TestInt == 9) || x.Name.Contains("bo", StringComparison.OrdinalIgnoreCase))); + return result.Success ? "OK" : result.Message; + + } + // 🚀 Edge Cases + public async Task TestWhere77() { + var result = RunTest("No Matching Records", + await (await SetupData()).Where(x => x.Name == "NonExistentPerson").ToListAsync(), + PersonData.persons.Where(x => x.Name == "NonExistentPerson")); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere78() { + var result = RunTest("Null DateOfBirth Handling", + await (await SetupData()).Where(x => x.DateOfBirth == null).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth == null)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere79() { + var result = RunTest("Null Field with OR", + await (await SetupData()).Where(x => x.DateOfBirth == null || x._Age > 50).ToListAsync(), + PersonData.persons.Where(x => x.DateOfBirth == null || x._Age > 50)); + return result.Success ? "OK" : result.Message; + + } + // 📊 Pagination Stress Test + public async Task TestWhere80() { + var result = RunTest("Skip and Take Across Boundaries", + await (await SetupData()).OrderBy(x => x._Age) + .Take(5) + .Skip(3) + .ToListAsync(), + PersonData.persons.OrderBy(x => x._Age).ThenBy(x => x._Id).Skip(3).Take(5)); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere81() { + var result = RunTest("Large Take Last Test", + await (await SetupData()).OrderByDescending(x => x._Age) + .TakeLast(5) + .ToListAsync(), + PersonData.persons.OrderByDescending(x => x._Age).ThenByDescending(x => x._Id).TakeLast(5)); + return result.Success ? "OK" : result.Message; + + } + // Return ToListAsync + public async Task TestWhere82() { + var result = RunTest("Return ToListAsync", + await (await SetupData()).ToListAsync(), + PersonData.persons.ToList()); + return result.Success ? "OK" : result.Message; + + } + // ✅ Universal Truth Test (Always Returns Everything) + public async Task TestWhere83() { + var result = RunTest("Universal Truth Where Condition", + await (await SetupData()).Where(x => true).ToListAsync(), + PersonData.persons.Where(x => true)); + return result.Success ? "OK" : result.Message; + + } + + // ❌ Universal False Test (Always Returns Nothing) + public async Task TestWhere84() + { + var result = RunTest("Universal False Where Condition", + await (await SetupData()).Where(x => false).ToListAsync(), + PersonData.persons.Where(x => false)); + return result.Success ? "OK" : result.Message; + } + + // 🤯 Negation Tests + public async Task TestWhere86() + { + var result = RunTest("Negation Test (NOT EQUAL)", + await (await SetupData()).Where(x => x.Name != "Zack").ToListAsync(), + PersonData.persons.Where(x => x.Name != "Zack")); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere87() { + var result = RunTest("Negation Test (NOT Contains)", + await (await SetupData()).Where(x => !x.Name.Contains("bo", StringComparison.OrdinalIgnoreCase)).ToListAsync(), + PersonData.persons.Where(x => !x.Name.Contains("bo", StringComparison.OrdinalIgnoreCase))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere88() { + var result = RunTest("Negation Test (NOT Greater Than)", + await (await SetupData()).Where(x => !(x._Age > 40)).ToListAsync(), + PersonData.persons.Where(x => !(x._Age > 40))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere89() { + var result = RunTest("Deeply Nested OR within AND", + await (await SetupData()).Where(x => (x._Age < 50 || x.Name.StartsWith("Z")) && (x.TestInt == 9 && x.DateOfBirth != null)) + .ToListAsync(), + PersonData.persons.Where(x => (x._Age < 50 || x.Name.StartsWith("Z")) && (x.TestInt == 9 && x.DateOfBirth != null))); + return result.Success ? "OK" : result.Message; + } + + public async Task TestWhere90() { + var result = RunTest("Query on Not mapped Property", + await (await SetupData()).Where(x => x.DoNotMapTest.Contains("diary")).ToListAsync(), + []); + return result.Success ? "OK" : result.Message; } } \ No newline at end of file diff --git a/Magic.IndexedDb.sln b/Magic.IndexedDb.sln index feb4d79..8072d82 100644 --- a/Magic.IndexedDb.sln +++ b/Magic.IndexedDb.sln @@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestServer", "TestServer\Te EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestServer.Client", "TestServer\TestServer.Client\TestServer.Client.csproj", "{D34C8E12-2846-4F93-B51F-D68FCC2A850F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestBase", "TestBase\TestBase.csproj", "{6F5DD4C3-CCC8-4E79-8FA1-D334DED6A5A3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -45,6 +47,10 @@ Global {D34C8E12-2846-4F93-B51F-D68FCC2A850F}.Debug|Any CPU.Build.0 = Debug|Any CPU {D34C8E12-2846-4F93-B51F-D68FCC2A850F}.Release|Any CPU.ActiveCfg = Release|Any CPU {D34C8E12-2846-4F93-B51F-D68FCC2A850F}.Release|Any CPU.Build.0 = Release|Any CPU + {6F5DD4C3-CCC8-4E79-8FA1-D334DED6A5A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6F5DD4C3-CCC8-4E79-8FA1-D334DED6A5A3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6F5DD4C3-CCC8-4E79-8FA1-D334DED6A5A3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6F5DD4C3-CCC8-4E79-8FA1-D334DED6A5A3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/TestBase/Data/PersonData.cs b/TestBase/Data/PersonData.cs new file mode 100644 index 0000000..256a244 --- /dev/null +++ b/TestBase/Data/PersonData.cs @@ -0,0 +1,57 @@ +using TestBase.Models; + +namespace TestBase.Data; + +public static class PersonData +{ + public static Person[] persons = + [ + new Person { _Id = 1, Name = "Zack", DateOfBirth = null, TestInt = 9, _Age = 45, GUIY = Guid.NewGuid(), DoNotMapTest = "I buried treasure behind my house", Access=Person.Permissions.CanRead}, + new Person { _Id = 2, Name = "Luna", TestInt = 9, DateOfBirth = new DateTime(1980, 1, 1), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "Jerry is my husband and I had an affair with Bob.", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite}, + new Person { _Id = 3, Name = "Jerry", TestInt = 9, DateOfBirth = new DateTime(1981, 1, 1), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, + new Person { _Id = 4, Name = "Jamie", TestInt = 9, DateOfBirth = new DateTime(1982, 1, 1), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, + new Person { _Id = 5, Name = "James", TestInt = 9, DateOfBirth = new DateTime(1983, 1, 1), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, + new Person { _Id = 6, Name = "Jack", TestInt = 9, DateOfBirth = new DateTime(1984, 1, 1), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, + new Person { _Id = 7, Name = "Jon", TestInt = 9, DateOfBirth = new DateTime(1985, 1, 1), _Age = 37, GUIY = Guid.NewGuid(), DoNotMapTest = "I black mail Luna for money because I know her secret", Access = Person.Permissions.CanRead}, + new Person { _Id = 8, Name = "Jack", TestInt = 9, DateOfBirth = new DateTime(1986, 1, 1), _Age = 37, GUIY = Guid.NewGuid(), DoNotMapTest = "I have a drug problem", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite}, + new Person { _Id = 9, Name = "Cathy", TestInt = 9, DateOfBirth = new DateTime(1987, 1, 1), _Age = 22, GUIY = Guid.NewGuid(), DoNotMapTest = "I got away with reading Bobs diary.", Access = Person.Permissions.CanRead | Person.Permissions.CanWrite}, + new Person { _Id = 10, Name = "Bob", TestInt = 3 , DateOfBirth = new DateTime(1988, 1, 1), _Age = 69, GUIY = Guid.NewGuid(), DoNotMapTest = "I caught Cathy reading my diary, but I'm too shy to confront her.", Access = Person.Permissions.CanRead }, + new Person { _Id = 11, Name = "Alex", TestInt = 3 , DateOfBirth = null, _Age = 80, GUIY = Guid.NewGuid(), DoNotMapTest = "I'm naked! But nobody can know!" }, + new Person { _Id = 12, Name = "Zapoo", DateOfBirth = null, TestInt = 9, _Age = 45, GUIY = Guid.NewGuid(), DoNotMapTest = "I buried treasure behind my house", Access=Person.Permissions.CanRead}, + + new Person { _Id = 13, Name = "Sarah", TestInt = -1, _Age = 30, GUIY = Guid.NewGuid(), DoNotMapTest = "I hate my job", Access=Person.Permissions.CanRead}, + new Person { _Id = 14, Name = "Michael", TestInt = 15, _Age = 50, GUIY = Guid.NewGuid(), DoNotMapTest = "I'm hiding a big secret", Access=Person.Permissions.CanRead | Person.Permissions.CanWrite}, + new Person { _Id = 15, Name = "Tommy", TestInt = 7, _Age = 12, GUIY = Guid.NewGuid(), DoNotMapTest = "I am just a kid" }, + new Person { _Id = 16, Name = "Grace", TestInt = 3, _Age = 90, GUIY = Guid.NewGuid(), DoNotMapTest = "I have seen the world" }, + new Person { _Id = 17, Name = "Xylophone", TestInt = 9, _Age = 27, GUIY = Guid.NewGuid(), DoNotMapTest = "I have the weirdest name" }, + new Person { _Id = 18, Name = "Yasmine", TestInt = 9, _Age = 40, GUIY = Guid.NewGuid(), DoNotMapTest = null }, + + // Additional test case persons to stress-test LINQ validation + new Person { _Id = 19, Name = "Alicia", TestInt = 42, _Age = 16, GUIY = Guid.NewGuid(), DoNotMapTest = "I just got my driver's license" }, + new Person { _Id = 20, Name = "Ben", TestInt = 0, _Age = 25, GUIY = Guid.NewGuid(), DoNotMapTest = "I have no TestInt value" }, + new Person { _Id = 21, Name = "Clara", TestInt = 100, _Age = 65, GUIY = Guid.NewGuid(), DoNotMapTest = "I retired last week", Access = Person.Permissions.CanRead | Person.Permissions.CanWrite }, + new Person { _Id = 22, Name = "Danny", TestInt = 9, _Age = 40, GUIY = Guid.NewGuid(), DoNotMapTest = null }, // Null handling + new Person { _Id = 23, Name = "Elliot", TestInt = -20, _Age = 55, GUIY = Guid.NewGuid(), DoNotMapTest = "My test int is negative" }, + new Person { _Id = 24, Name = "Fiona", TestInt = 11, _Age = 33, GUIY = Guid.NewGuid(), DoNotMapTest = "I like puzzles" }, + new Person { _Id = 25, Name = "George", TestInt = 8, _Age = 72, GUIY = Guid.NewGuid(), DoNotMapTest = "I fought in a war", Access = Person.Permissions.CanRead | Person.Permissions.CanWrite | Person.Permissions.CanCreate }, + new Person { _Id = 26, Name = "Henry", TestInt = 99, _Age = 29, GUIY = Guid.NewGuid(), DoNotMapTest = "I almost made it to 100 TestInt" }, + new Person { _Id = 27, Name = "Isla", TestInt = 2, _Age = 18, GUIY = Guid.NewGuid(), DoNotMapTest = "I just turned into an adult" }, + new Person { _Id = 28, Name = "Jackie", TestInt = 75, _Age = 60, GUIY = Guid.NewGuid(), DoNotMapTest = "I love cooking" }, + new Person { _Id = 29, Name = "Kevin", TestInt = 5, _Age = 48, GUIY = Guid.NewGuid(), DoNotMapTest = "I own a small business" }, + new Person { _Id = 30, Name = "Liam", TestInt = 9, _Age = 55, GUIY = Guid.NewGuid(), DoNotMapTest = "I just became a grandfather" }, + new Person { _Id = 31, Name = "Mona", TestInt = 88, _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "I am a detective", Access = Person.Permissions.CanRead | Person.Permissions.CanWrite }, + new Person { _Id = 32, Name = "Nathan", TestInt = 7, _Age = 27, GUIY = Guid.NewGuid(), DoNotMapTest = "I play guitar" }, + new Person { _Id = 33, Name = "Olivia", TestInt = 13, _Age = 45, GUIY = Guid.NewGuid(), DoNotMapTest = "I run marathons" }, + new Person { _Id = 34, Name = "Patrick", TestInt = 3, _Age = 52, GUIY = Guid.NewGuid(), DoNotMapTest = "I work in IT" }, + new Person { _Id = 35, Name = "Quinn", TestInt = 22, _Age = 42, GUIY = Guid.NewGuid(), DoNotMapTest = "I design board games" }, + new Person { _Id = 36, Name = "Rachel", TestInt = 77, _Age = 36, GUIY = Guid.NewGuid(), DoNotMapTest = "I am a pilot" }, + new Person { _Id = 37, Name = "Steve", TestInt = 9, _Age = 38, GUIY = Guid.NewGuid(), DoNotMapTest = "I am an engineer" }, + new Person { _Id = 38, Name = "Tina", TestInt = 3, _Age = 68, GUIY = Guid.NewGuid(), DoNotMapTest = "I just got my pension" }, + new Person { _Id = 39, Name = "Uma", TestInt = 14, _Age = 39, GUIY = Guid.NewGuid(), DoNotMapTest = "I teach yoga" }, + new Person { _Id = 40, Name = "Victor", TestInt = 6, _Age = 31, GUIY = Guid.NewGuid(), DoNotMapTest = "I am an artist" }, + new Person { _Id = 41, Name = "Wendy", TestInt = 50, _Age = 50, GUIY = Guid.NewGuid(), DoNotMapTest = "My age matches my test int" }, + new Person { _Id = 42, Name = "Xander", TestInt = 19, _Age = 21, GUIY = Guid.NewGuid(), DoNotMapTest = "I am a college student" }, + new Person { _Id = 43, Name = "Yara", TestInt = 90, _Age = 32, GUIY = Guid.NewGuid(), DoNotMapTest = "I work in finance" }, + new Person { _Id = 44, Name = "Zane", TestInt = 101, _Age = 47, DateOfBirth = new DateTime(2020, 2, 10), GUIY = Guid.NewGuid(), DoNotMapTest = "I love motorcycles" } + ]; +} \ No newline at end of file diff --git a/Magic.IndexedDb/Testing/Helpers/AllPaths.cs b/TestBase/Helpers/AllPaths.cs similarity index 99% rename from Magic.IndexedDb/Testing/Helpers/AllPaths.cs rename to TestBase/Helpers/AllPaths.cs index d646cb4..e16ad5b 100644 --- a/Magic.IndexedDb/Testing/Helpers/AllPaths.cs +++ b/TestBase/Helpers/AllPaths.cs @@ -1,6 +1,7 @@ using System.Linq.Expressions; +using Magic.IndexedDb; -namespace Magic.IndexedDb.Testing.Helpers; +namespace TestBase.Helpers; public class QueryTestBlueprint { diff --git a/Magic.IndexedDb/Testing/Helpers/MagicQueryPathWalker.cs b/TestBase/Helpers/MagicQueryPathWalker.cs similarity index 99% rename from Magic.IndexedDb/Testing/Helpers/MagicQueryPathWalker.cs rename to TestBase/Helpers/MagicQueryPathWalker.cs index 45c68dc..846dd9c 100644 --- a/Magic.IndexedDb/Testing/Helpers/MagicQueryPathWalker.cs +++ b/TestBase/Helpers/MagicQueryPathWalker.cs @@ -1,6 +1,7 @@ -using Magic.IndexedDb.Interfaces; +using Magic.IndexedDb; +using Magic.IndexedDb.Interfaces; -namespace Magic.IndexedDb.Testing.Helpers; +namespace TestBase.Helpers; internal static class MagicInMemoryExecutor { diff --git a/Magic.IndexedDb/Testing/Helpers/TestHelper.cs b/TestBase/Helpers/TestHelper.cs similarity index 97% rename from Magic.IndexedDb/Testing/Helpers/TestHelper.cs rename to TestBase/Helpers/TestHelper.cs index 4647aeb..8c1638c 100644 --- a/Magic.IndexedDb/Testing/Helpers/TestHelper.cs +++ b/TestBase/Helpers/TestHelper.cs @@ -1,11 +1,11 @@ -using Magic.IndexedDb.Helpers; +using System.Reflection; +using System.Text.Json; +using Magic.IndexedDb.Helpers; using Magic.IndexedDb.Models; using Magic.IndexedDb.SchemaAnnotations; -using Magic.IndexedDb.Testing.Models; -using System.Reflection; -using System.Text.Json; +using TestBase.Models; -namespace Magic.IndexedDb.Testing.Helpers; +namespace TestBase.Helpers; public static class TestValidator { diff --git a/TestServer/TestServer/Models/Car.cs b/TestBase/Models/Car.cs similarity index 90% rename from TestServer/TestServer/Models/Car.cs rename to TestBase/Models/Car.cs index 924085c..b76c26b 100644 --- a/TestServer/TestServer/Models/Car.cs +++ b/TestBase/Models/Car.cs @@ -1,7 +1,7 @@ using Magic.IndexedDb; -using TestWasm.Repository; +using TestBase.Repository; -namespace TestWasm.Models; +namespace TestBase.Models; public class Car : MagicTableTool, IMagicTable { diff --git a/TestServer/TestServer/Models/DbNames.cs b/TestBase/Models/DbNames.cs similarity index 71% rename from TestServer/TestServer/Models/DbNames.cs rename to TestBase/Models/DbNames.cs index 31f1d41..1467040 100644 --- a/TestServer/TestServer/Models/DbNames.cs +++ b/TestBase/Models/DbNames.cs @@ -1,4 +1,4 @@ -namespace TestWasm.Models; +namespace TestBase.Models; public static class DbNames { diff --git a/TestServer/TestServer/Models/Person.cs b/TestBase/Models/Person.cs similarity index 82% rename from TestServer/TestServer/Models/Person.cs rename to TestBase/Models/Person.cs index d89b658..a0e70db 100644 --- a/TestServer/TestServer/Models/Person.cs +++ b/TestBase/Models/Person.cs @@ -1,10 +1,9 @@ using Magic.IndexedDb; - using Magic.IndexedDb.SchemaAnnotations; -using TestWasm.Repository; -using static TestWasm.Models.Person; +using TestBase.Repository; +using static TestBase.Models.Person; -namespace TestWasm.Models; +namespace TestBase.Models; public class Nested { @@ -12,18 +11,20 @@ public class Nested } -public class Person : MagicTableTool, IMagicTable +public class Person : MagicTableTool, IMagicTable { public List GetCompoundIndexes() => new List() { CreateCompoundIndex(x => x.TestIntStable2, x => x.Name) }; - public IMagicCompoundKey GetKeys() => - CreateCompoundKey(x => x.TestIntStable2, x => x.TestIntStable); + // When using this, the e2e fails, but the Testserver succeeds + /*public IMagicCompoundKey GetKeys() => + CreateCompoundKey(x => x.TestIntStable2, x => x.TestIntStable);*/ - //public IMagicCompoundKey GetKeys() => - // CreatePrimaryKey(x => x._Id, true); + // When using this, the e2e succeeds, but the Testserver fails when not in debug mode 🤯 + public IMagicCompoundKey GetKeys() => + CreatePrimaryKey(x => x._Id, true); public string GetTableName() => "Person"; public IndexedDbSet GetDefaultDatabase() => IndexDbContext.Client; diff --git a/Magic.IndexedDb/Testing/Models/TestResponse.cs b/TestBase/Models/TestResponse.cs similarity index 72% rename from Magic.IndexedDb/Testing/Models/TestResponse.cs rename to TestBase/Models/TestResponse.cs index db0a11c..736dd29 100644 --- a/Magic.IndexedDb/Testing/Models/TestResponse.cs +++ b/TestBase/Models/TestResponse.cs @@ -1,4 +1,4 @@ -namespace Magic.IndexedDb.Testing.Models; +namespace TestBase.Models; public class TestResponse { diff --git a/TestServer/TestServer/Repository/IndexDbContext.cs b/TestBase/Repository/IndexDbContext.cs similarity index 90% rename from TestServer/TestServer/Repository/IndexDbContext.cs rename to TestBase/Repository/IndexDbContext.cs index 59a007d..d5ac6fb 100644 --- a/TestServer/TestServer/Repository/IndexDbContext.cs +++ b/TestBase/Repository/IndexDbContext.cs @@ -1,7 +1,7 @@ using Magic.IndexedDb; using Magic.IndexedDb.Interfaces; -namespace TestWasm.Repository; +namespace TestBase.Repository; public class IndexDbContext : IMagicRepository { diff --git a/Magic.IndexedDb/SnapshotBuilder/BuildTools.cs b/TestBase/SnapshotBuilder/BuildTools.cs similarity index 96% rename from Magic.IndexedDb/SnapshotBuilder/BuildTools.cs rename to TestBase/SnapshotBuilder/BuildTools.cs index 6522bed..65b040d 100644 --- a/Magic.IndexedDb/SnapshotBuilder/BuildTools.cs +++ b/TestBase/SnapshotBuilder/BuildTools.cs @@ -1,8 +1,9 @@ -using Magic.IndexedDb.Helpers; -using System.Reflection; +using System.Reflection; using System.Text.Json; +using Magic.IndexedDb; +using Magic.IndexedDb.Helpers; -namespace Magic.IndexedDb.SnapshotBuilder; +namespace TestBase.SnapshotBuilder; public static class BuildTools { diff --git a/TestBase/TestBase.csproj b/TestBase/TestBase.csproj new file mode 100644 index 0000000..4924a89 --- /dev/null +++ b/TestBase/TestBase.csproj @@ -0,0 +1,13 @@ + + + + net8.0 + enable + enable + + + + + + + diff --git a/TestServer/TestServer/Components/Pages/CarTests.razor b/TestServer/TestServer/Components/Pages/CarTests.razor index f99bd66..69ca651 100644 --- a/TestServer/TestServer/Components/Pages/CarTests.razor +++ b/TestServer/TestServer/Components/Pages/CarTests.razor @@ -1,8 +1,7 @@ @page "/CarTests" @using Magic.IndexedDb -@using Magic.IndexedDb.Testing.Helpers -@using Magic.IndexedDb.Testing.Models -@using TestWasm.Models +@using TestBase.Helpers +@using TestBase.Models @using System.Linq; @rendermode InteractiveServer diff --git a/TestServer/TestServer/Components/Pages/Home.razor b/TestServer/TestServer/Components/Pages/Home.razor index 938d2be..fd04565 100644 --- a/TestServer/TestServer/Components/Pages/Home.razor +++ b/TestServer/TestServer/Components/Pages/Home.razor @@ -1,9 +1,8 @@ @page "/" @using Magic.IndexedDb -@using Magic.IndexedDb.Testing.Helpers -@using Magic.IndexedDb.Testing.Models -@using TestWasm.Models @using System.Linq; +@using TestBase.Helpers +@using TestBase.Models @rendermode InteractiveServer @inject IMagicIndexedDb _MagicDb @@ -42,7 +41,6 @@ // Display the storage size on the front-end

Storage Used: @storageUsageText

Storage Quota: @storageQuotaText

- } Example @@ -170,59 +168,7 @@ // // // DO NOT DO THIS! I only am allowing this for maximum flexibility but this is very dangerous. // IMagicQuery unassignedDbQuery = await _MagicDb.QueryOverride("DbName", "SchemaName"); - - - - Person[] persons = new Person[] { - new Person { Name = "Zack", DateOfBirth = null, TestInt = 9, _Age = 45, GUIY = Guid.NewGuid(), DoNotMapTest = "I buried treasure behind my house", Access=Person.Permissions.CanRead}, - new Person { Name = "Luna", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "Jerry is my husband and I had an affair with Bob.", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite}, - new Person { Name = "Jerry", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, - new Person { Name = "Jamie", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, - new Person { Name = "James", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, - new Person { Name = "Jack", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "My wife is amazing", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite|Person.Permissions.CanCreate}, - new Person { Name = "Jon", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 37, GUIY = Guid.NewGuid(), DoNotMapTest = "I black mail Luna for money because I know her secret", Access = Person.Permissions.CanRead}, - new Person { Name = "Jack", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 37, GUIY = Guid.NewGuid(), DoNotMapTest = "I have a drug problem", Access = Person.Permissions.CanRead|Person.Permissions.CanWrite}, - new Person { Name = "Cathy", TestInt = 9, DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 22, GUIY = Guid.NewGuid(), DoNotMapTest = "I got away with reading Bobs diary.", Access = Person.Permissions.CanRead | Person.Permissions.CanWrite}, - new Person { Name = "Bob", TestInt = 3 , DateOfBirth = GetDateWithSameMonthDay(GetRandomYear()), _Age = 69, GUIY = Guid.NewGuid(), DoNotMapTest = "I caught Cathy reading my diary, but I'm too shy to confront her.", Access = Person.Permissions.CanRead }, - new Person { Name = "Alex", TestInt = 3 , DateOfBirth = null, _Age = 80, GUIY = Guid.NewGuid(), DoNotMapTest = "I'm naked! But nobody can know!" }, - new Person { Name = "Zapoo", DateOfBirth = null, TestInt = 9, _Age = 45, GUIY = Guid.NewGuid(), DoNotMapTest = "I buried treasure behind my house", Access=Person.Permissions.CanRead}, - - new Person { Name = "Sarah", TestInt = -1, _Age = 30, GUIY = Guid.NewGuid(), DoNotMapTest = "I hate my job", Access=Person.Permissions.CanRead}, - new Person { Name = "Michael", TestInt = 15, _Age = 50, GUIY = Guid.NewGuid(), DoNotMapTest = "I'm hiding a big secret", Access=Person.Permissions.CanRead | Person.Permissions.CanWrite}, - new Person { Name = "Tommy", TestInt = 7, _Age = 12, GUIY = Guid.NewGuid(), DoNotMapTest = "I am just a kid" }, - new Person { Name = "Grace", TestInt = 3, _Age = 90, GUIY = Guid.NewGuid(), DoNotMapTest = "I have seen the world" }, - new Person { Name = "Xylophone", TestInt = 9, _Age = 27, GUIY = Guid.NewGuid(), DoNotMapTest = "I have the weirdest name" }, - new Person { Name = "Yasmine", TestInt = 9, _Age = 40, GUIY = Guid.NewGuid(), DoNotMapTest = null }, - - // Additional test case persons to stress-test LINQ validation - new Person { Name = "Alicia", TestInt = 42, _Age = 16, GUIY = Guid.NewGuid(), DoNotMapTest = "I just got my driver's license" }, - new Person { Name = "Ben", TestInt = 0, _Age = 25, GUIY = Guid.NewGuid(), DoNotMapTest = "I have no TestInt value" }, - new Person { Name = "Clara", TestInt = 100, _Age = 65, GUIY = Guid.NewGuid(), DoNotMapTest = "I retired last week", Access = Person.Permissions.CanRead | Person.Permissions.CanWrite }, - new Person { Name = "Danny", TestInt = 9, _Age = 40, GUIY = Guid.NewGuid(), DoNotMapTest = null }, // Null handling - new Person { Name = "Elliot", TestInt = -20, _Age = 55, GUIY = Guid.NewGuid(), DoNotMapTest = "My test int is negative" }, - new Person { Name = "Fiona", TestInt = 11, _Age = 33, GUIY = Guid.NewGuid(), DoNotMapTest = "I like puzzles" }, - new Person { Name = "George", TestInt = 8, _Age = 72, GUIY = Guid.NewGuid(), DoNotMapTest = "I fought in a war", Access = Person.Permissions.CanRead | Person.Permissions.CanWrite | Person.Permissions.CanCreate }, - new Person { Name = "Henry", TestInt = 99, _Age = 29, GUIY = Guid.NewGuid(), DoNotMapTest = "I almost made it to 100 TestInt" }, - new Person { Name = "Isla", TestInt = 2, _Age = 18, GUIY = Guid.NewGuid(), DoNotMapTest = "I just turned into an adult" }, - new Person { Name = "Jackie", TestInt = 75, _Age = 60, GUIY = Guid.NewGuid(), DoNotMapTest = "I love cooking" }, - new Person { Name = "Kevin", TestInt = 5, _Age = 48, GUIY = Guid.NewGuid(), DoNotMapTest = "I own a small business" }, - new Person { Name = "Liam", TestInt = 9, _Age = 55, GUIY = Guid.NewGuid(), DoNotMapTest = "I just became a grandfather" }, - new Person { Name = "Mona", TestInt = 88, _Age = 35, GUIY = Guid.NewGuid(), DoNotMapTest = "I am a detective", Access = Person.Permissions.CanRead | Person.Permissions.CanWrite }, - new Person { Name = "Nathan", TestInt = 7, _Age = 27, GUIY = Guid.NewGuid(), DoNotMapTest = "I play guitar" }, - new Person { Name = "Olivia", TestInt = 13, _Age = 45, GUIY = Guid.NewGuid(), DoNotMapTest = "I run marathons" }, - new Person { Name = "Patrick", TestInt = 3, _Age = 52, GUIY = Guid.NewGuid(), DoNotMapTest = "I work in IT" }, - new Person { Name = "Quinn", TestInt = 22, _Age = 42, GUIY = Guid.NewGuid(), DoNotMapTest = "I design board games" }, - new Person { Name = "Rachel", TestInt = 77, _Age = 36, GUIY = Guid.NewGuid(), DoNotMapTest = "I am a pilot" }, - new Person { Name = "Steve", TestInt = 9, _Age = 38, GUIY = Guid.NewGuid(), DoNotMapTest = "I am an engineer" }, - new Person { Name = "Tina", TestInt = 3, _Age = 68, GUIY = Guid.NewGuid(), DoNotMapTest = "I just got my pension" }, - new Person { Name = "Uma", TestInt = 14, _Age = 39, GUIY = Guid.NewGuid(), DoNotMapTest = "I teach yoga" }, - new Person { Name = "Victor", TestInt = 6, _Age = 31, GUIY = Guid.NewGuid(), DoNotMapTest = "I am an artist" }, - new Person { Name = "Wendy", TestInt = 50, _Age = 50, GUIY = Guid.NewGuid(), DoNotMapTest = "My age matches my test int" }, - new Person { Name = "Xander", TestInt = 19, _Age = 21, GUIY = Guid.NewGuid(), DoNotMapTest = "I am a college student" }, - new Person { Name = "Yara", TestInt = 90, _Age = 32, GUIY = Guid.NewGuid(), DoNotMapTest = "I work in finance" }, - new Person { Name = "Zane", TestInt = 101, _Age = 47, DateOfBirth = new DateTime(2020, 2, 10), GUIY = Guid.NewGuid(), DoNotMapTest = "I love motorcycles" }, - }; - + Person[] persons = TestBase.Data.PersonData.persons; var count = 0; foreach (var p in persons) @@ -233,15 +179,10 @@ p.TestIntStable2 = 10; } - - //var storageInfo = await _MagicDb.GetStorageEstimateAsync(); //storageQuota = storageInfo.QuotaInMegabytes; //storageUsage = storageInfo.UsageInMegabytes; - - - // WhereExample = await (manager.Where(x => x.Name.StartsWith("c", StringComparison.OrdinalIgnoreCase) // || x.Name.StartsWith("l", StringComparison.OrdinalIgnoreCase) // || x.Name.StartsWith("j", StringComparison.OrdinalIgnoreCase) && x._Age > 35 @@ -252,9 +193,7 @@ await personQuery.AddRangeAsync(persons); - allPeople = await personQuery.ToListAsync(); - - + allPeople = persons.ToList(); List people = await personQuery.ToListAsync(); StateHasChanged(); @@ -272,12 +211,9 @@ var asdf = d.DayOfWeek; var asdf2 = d.DayOfYear; - // I know the validation of "allPeople" targets differently but I know this is the right result. // This is a weird .NET memory grab weirdess. - - RunTest("Date Equal", await personQuery.Where(x => x.DateOfBirth.Value.Date == new DateTime(2020, 2, 10)).ToListAsync(), allPeople.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.Date == new DateTime(2020, 2, 10))); @@ -358,7 +294,6 @@ await personQuery.Where(x => x.DateOfBirth.Value.DayOfYear <= 41).ToListAsync(), allPeople.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfYear <= 41)); - RunTest("Date Day Of Week Equal", await personQuery.Where(x => x.DateOfBirth.Value.DayOfWeek == DayOfWeek.Monday).ToListAsync(), allPeople.Where(x => x.DateOfBirth.HasValue && x.DateOfBirth.Value.DayOfWeek == DayOfWeek.Monday)); @@ -423,7 +358,6 @@ RunTest("Contains Test", await personQuery.Where(x => x.Name.Contains("zac", StringComparison.OrdinalIgnoreCase)).ToListAsync(), allPeople.Where(x => x.Name.Contains("zac", StringComparison.OrdinalIgnoreCase))); - RunTest("Not Contains Test", await personQuery.Where(x => !x.Name.Contains("zac", StringComparison.OrdinalIgnoreCase)).ToListAsync(), allPeople.Where(x => !x.Name.Contains("zac", StringComparison.OrdinalIgnoreCase))); @@ -495,7 +429,6 @@ */ allPeople.OrderBy(x => x.Name).ThenBy(x => x._Id).TakeLast(2)); - var totalPersons = await personQuery.CountAsync(); var test1 = await personQuery.FirstOrDefaultAsync(); var test2 = await personQuery.FirstOrDefaultAsync(x => x.Name == "Victor"); @@ -519,7 +452,6 @@ RunTest("Cursor Last Or Default Where Test", new List() { await personQuery.Cursor(x => x.Name == "Victor").OrderBy(x => x._Age).LastOrDefaultAsync() }, new List() { allPeople.Where(x => x.Name == "Victor").OrderBy(x => x._Age).ThenBy(x => x._Id).LastOrDefault() }); - RunTest("Index First Or Default Test", new List() { await personQuery.OrderBy(x => x._Id).FirstOrDefaultAsync() }, new List() { allPeople.OrderBy(x => x._Id).ThenBy(x => x._Id).FirstOrDefault() }); @@ -596,7 +528,6 @@ .ToListAsync(), allPeople.Where(x => x._Age < 60).OrderByDescending(x => x._Age).ThenByDescending(x => x._Id).TakeLast(2)); - //await Task.Delay(10000); // 🧩 Complex Nested Conditions RunTest("Nested OR within AND", @@ -674,7 +605,6 @@ .ToListAsync(), allPeople.OrderByDescending(x => x._Age).ThenByDescending(x => x._Id).TakeLast(5)); - // Return ToListAsync RunTest("Return ToListAsync", await personQuery.ToListAsync(), @@ -710,12 +640,10 @@ await personQuery.Where(x => (x._Age < 50 || x.Name.StartsWith("Z")) && (x.TestInt == 9 && x.DateOfBirth != null)) .ToListAsync(), allPeople.Where(x => (x._Age < 50 || x.Name.StartsWith("Z")) && (x.TestInt == 9 && x.DateOfBirth != null))); - - // 📌 Edge Case: Querying on a Property That Doesn't Exist in Some Objects - // THis test worked but now I secured it via the wrapper to throw an error to prevent user error! - RunTest("Query on Optional Property (Some Missing Values)", + + RunTest("Query on Not mapped Property", await personQuery.Where(x => x.DoNotMapTest.Contains("diary")).ToListAsync(), - allPeople.Where(x => x.DoNotMapTest != null && x.DoNotMapTest.Contains("diary"))); + []); RunTest("Where + OrderBy + Skip + TakeLast", await personQuery.Cursor(x => x.TestInt > 2) diff --git a/TestServer/TestServer/TestServer.csproj b/TestServer/TestServer/TestServer.csproj index c8f2dcd..47915bb 100644 --- a/TestServer/TestServer/TestServer.csproj +++ b/TestServer/TestServer/TestServer.csproj @@ -8,6 +8,7 @@ + diff --git a/TestWasm/Pages/Home.razor b/TestWasm/Pages/Home.razor index 2f204cd..396097c 100644 --- a/TestWasm/Pages/Home.razor +++ b/TestWasm/Pages/Home.razor @@ -1,11 +1,12 @@ @page "/" @using Magic.IndexedDb -@using Magic.IndexedDb.Testing.Helpers -@using Magic.IndexedDb.Testing.Models @using TestWasm.Models @using TestWasm.Repository @using System.Linq; -@using TestWasm.Share; +@using TestBase.Helpers +@using TestBase.Models +@using TestWasm.Share +@using Person = TestWasm.Models.Person @inject IMagicIndexedDb _MagicDb diff --git a/TestWasm/Share/PanelCustomTests.razor b/TestWasm/Share/PanelCustomTests.razor index cda7141..852d74e 100644 --- a/TestWasm/Share/PanelCustomTests.razor +++ b/TestWasm/Share/PanelCustomTests.razor @@ -1,7 +1,8 @@ @using Magic.IndexedDb -@using Magic.IndexedDb.Testing.Helpers -@using Magic.IndexedDb.Testing.Models +@using TestBase.Helpers +@using TestBase.Models @using TestWasm.Models +@using Person = TestWasm.Models.Person @inject IMagicIndexedDb _MagicDb diff --git a/TestWasm/Share/PanelUnitTests.razor b/TestWasm/Share/PanelUnitTests.razor index 812eb56..6ed07ed 100644 --- a/TestWasm/Share/PanelUnitTests.razor +++ b/TestWasm/Share/PanelUnitTests.razor @@ -1,7 +1,7 @@ @using Magic.IndexedDb @using Magic.IndexedDb.Interfaces -@using Magic.IndexedDb.Testing.Helpers -@using Magic.IndexedDb.Testing.Models +@using TestBase.Helpers +@using TestBase.Models @typeparam TItem where TItem : class, IMagicTableBase, new() @inject IMagicIndexedDb _MagicDb diff --git a/TestWasm/TestWasm.csproj b/TestWasm/TestWasm.csproj index 1988b9d..32cb0e1 100644 --- a/TestWasm/TestWasm.csproj +++ b/TestWasm/TestWasm.csproj @@ -14,6 +14,7 @@ +