From a02d750c8b998d212a7c3b41029a7294b600a3b7 Mon Sep 17 00:00:00 2001 From: cuqmbr Date: Wed, 30 Apr 2025 12:49:38 +0300 Subject: [PATCH] complete region integration tests --- src/Application/packages.lock.json | 9 +- src/Configuration/packages.lock.json | 46 - src/Identity/packages.lock.json | 41 - src/Infrastructure/packages.lock.json | 9 +- src/Persistence/packages.lock.json | 13 - .../RegionsTests.cs | 1393 +++++++---------- .../packages.lock.json | 51 - 7 files changed, 609 insertions(+), 953 deletions(-) diff --git a/src/Application/packages.lock.json b/src/Application/packages.lock.json index 0718004..f56b518 100644 --- a/src/Application/packages.lock.json +++ b/src/Application/packages.lock.json @@ -59,12 +59,6 @@ "Microsoft.Extensions.Options": "9.0.4" } }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[9.0.3, )", - "resolved": "9.0.3", - "contentHash": "1rqGTfubVg0qj2PsK6esyq3PIxtYJYrN3LsYUV9RrvH3anmt3fT3ozYdAZZH4U8JU/pt5pPIUk8NBSu26wtekA==" - }, "System.Linq.Dynamic.Core": { "type": "Direct", "requested": "[1.6.2, )", @@ -179,7 +173,6 @@ "domain": { "type": "Project" } - }, - "net9.0/linux-x64": {} + } } } \ No newline at end of file diff --git a/src/Configuration/packages.lock.json b/src/Configuration/packages.lock.json index e591490..7bd3fb8 100644 --- a/src/Configuration/packages.lock.json +++ b/src/Configuration/packages.lock.json @@ -150,12 +150,6 @@ "Microsoft.Extensions.Primitives": "9.0.4" } }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[9.0.3, )", - "resolved": "9.0.3", - "contentHash": "1rqGTfubVg0qj2PsK6esyq3PIxtYJYrN3LsYUV9RrvH3anmt3fT3ozYdAZZH4U8JU/pt5pPIUk8NBSu26wtekA==" - }, "System.Text.Json": { "type": "Direct", "requested": "[9.0.4, )", @@ -852,46 +846,6 @@ "Npgsql.EntityFrameworkCore.PostgreSQL": "[9.0.4, )" } } - }, - "net9.0/linux-x64": { - "Microsoft.Win32.Registry": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "+FWlwd//+Tt56316p00hVePBCouXyEzT86Jb3+AuRotTND0IYn0OO3obs1gnQEs/txEnt+rF2JBGLItTG+Be6A==", - "dependencies": { - "System.Security.AccessControl": "4.5.0", - "System.Security.Principal.Windows": "4.5.0" - } - }, - "SQLitePCLRaw.lib.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "mAr69tDbnf3QJpRy2nJz8Qdpebdil00fvycyByR58Cn9eARvR+UiG2Vzsp+4q1tV3ikwiYIjlXCQFc12GfebbA==" - }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "vW8Eoq0TMyz5vAG/6ce483x/CP83fgm4SJe5P8Tb1tZaobcvPrbMEL7rhH1DRdrYbbb6F0vq3OlzmK0Pkwks5A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.Security.Principal.Windows": "4.5.0" - } - }, - "System.Security.Cryptography.Pkcs": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "CoCRHFym33aUSf/NtWSVSZa99dkd0Hm7OCZUxORBjRB16LNhIEOf8THPqzIYlvKM0nNDAPTRBa1FxEECrgaxxA==" - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" - } } } } \ No newline at end of file diff --git a/src/Identity/packages.lock.json b/src/Identity/packages.lock.json index 71a67ab..aa4f436 100644 --- a/src/Identity/packages.lock.json +++ b/src/Identity/packages.lock.json @@ -62,12 +62,6 @@ "Microsoft.IdentityModel.Logging": "8.8.0" } }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[9.0.3, )", - "resolved": "9.0.3", - "contentHash": "1rqGTfubVg0qj2PsK6esyq3PIxtYJYrN3LsYUV9RrvH3anmt3fT3ozYdAZZH4U8JU/pt5pPIUk8NBSu26wtekA==" - }, "Npgsql.EntityFrameworkCore.PostgreSQL": { "type": "Direct", "requested": "[9.0.4, )", @@ -601,41 +595,6 @@ "domain": { "type": "Project" } - }, - "net9.0/linux-x64": { - "Microsoft.Win32.Registry": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "+FWlwd//+Tt56316p00hVePBCouXyEzT86Jb3+AuRotTND0IYn0OO3obs1gnQEs/txEnt+rF2JBGLItTG+Be6A==", - "dependencies": { - "System.Security.AccessControl": "4.5.0", - "System.Security.Principal.Windows": "4.5.0" - } - }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "vW8Eoq0TMyz5vAG/6ce483x/CP83fgm4SJe5P8Tb1tZaobcvPrbMEL7rhH1DRdrYbbb6F0vq3OlzmK0Pkwks5A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.Security.Principal.Windows": "4.5.0" - } - }, - "System.Security.Cryptography.Pkcs": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "CoCRHFym33aUSf/NtWSVSZa99dkd0Hm7OCZUxORBjRB16LNhIEOf8THPqzIYlvKM0nNDAPTRBa1FxEECrgaxxA==" - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" - } } } } \ No newline at end of file diff --git a/src/Infrastructure/packages.lock.json b/src/Infrastructure/packages.lock.json index 3fc0122..83c6755 100644 --- a/src/Infrastructure/packages.lock.json +++ b/src/Infrastructure/packages.lock.json @@ -2,12 +2,6 @@ "version": 1, "dependencies": { "net9.0": { - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[9.0.3, )", - "resolved": "9.0.3", - "contentHash": "1rqGTfubVg0qj2PsK6esyq3PIxtYJYrN3LsYUV9RrvH3anmt3fT3ozYdAZZH4U8JU/pt5pPIUk8NBSu26wtekA==" - }, "AspNetCore.Localizer.Json": { "type": "Transitive", "resolved": "1.0.1", @@ -185,7 +179,6 @@ "domain": { "type": "Project" } - }, - "net9.0/linux-x64": {} + } } } \ No newline at end of file diff --git a/src/Persistence/packages.lock.json b/src/Persistence/packages.lock.json index f9da6c3..af85452 100644 --- a/src/Persistence/packages.lock.json +++ b/src/Persistence/packages.lock.json @@ -51,12 +51,6 @@ "Microsoft.Extensions.Primitives": "9.0.4" } }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[9.0.3, )", - "resolved": "9.0.3", - "contentHash": "1rqGTfubVg0qj2PsK6esyq3PIxtYJYrN3LsYUV9RrvH3anmt3fT3ozYdAZZH4U8JU/pt5pPIUk8NBSu26wtekA==" - }, "Npgsql.EntityFrameworkCore.PostgreSQL": { "type": "Direct", "requested": "[9.0.4, )", @@ -341,13 +335,6 @@ "domain": { "type": "Project" } - }, - "net9.0/linux-x64": { - "SQLitePCLRaw.lib.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "mAr69tDbnf3QJpRy2nJz8Qdpebdil00fvycyByR58Cn9eARvR+UiG2Vzsp+4q1tV3ikwiYIjlXCQFc12GfebbA==" - } } } } \ No newline at end of file diff --git a/tst/Application.IntegrationTests/RegionsTests.cs b/tst/Application.IntegrationTests/RegionsTests.cs index 247d706..16c42eb 100644 --- a/tst/Application.IntegrationTests/RegionsTests.cs +++ b/tst/Application.IntegrationTests/RegionsTests.cs @@ -207,11 +207,9 @@ public class RegionsTests : TestBase var mediator = GetService(); await Assert.ThrowsAsync(() => - mediator.Send(new AddRegionCommand() - { - Name = "Name", - CountryUuid = Guid.NewGuid() - }, TestContext.Current.CancellationToken)); + mediator.Send( + new AddRegionCommand(), + TestContext.Current.CancellationToken)); } // TODO: Add more tests with user role (copy tests with admin role) @@ -224,11 +222,9 @@ public class RegionsTests : TestBase var mediator = GetService(); await Assert.ThrowsAsync(() => - mediator.Send(new AddRegionCommand() - { - Name = "Name", - CountryUuid = Guid.NewGuid() - }, TestContext.Current.CancellationToken)); + mediator.Send( + new AddRegionCommand(), + TestContext.Current.CancellationToken)); } // TODO: Add more tests with unauthenticated user @@ -401,12 +397,9 @@ public class RegionsTests : TestBase var mediator = GetService(); await Assert.ThrowsAsync(() => - mediator.Send(new UpdateRegionCommand() - { - Uuid = Guid.NewGuid(), - Name = "Name", - CountryUuid = Guid.NewGuid() - }, TestContext.Current.CancellationToken)); + mediator.Send( + new UpdateRegionCommand(), + TestContext.Current.CancellationToken)); } // TODO: Add more tests with user role (copy tests with admin role) @@ -419,12 +412,9 @@ public class RegionsTests : TestBase var mediator = GetService(); await Assert.ThrowsAsync(() => - mediator.Send(new UpdateRegionCommand() - { - Uuid = Guid.NewGuid(), - Name = "Name", - CountryUuid = Guid.NewGuid() - }, TestContext.Current.CancellationToken)); + mediator.Send( + new UpdateRegionCommand(), + TestContext.Current.CancellationToken)); } // TODO: Add more tests with unauthenticated user @@ -504,10 +494,9 @@ public class RegionsTests : TestBase var mediator = GetService(); await Assert.ThrowsAsync(() => - mediator.Send(new DeleteRegionCommand() - { - Uuid = Guid.NewGuid() - }, TestContext.Current.CancellationToken)); + mediator.Send( + new DeleteRegionCommand(), + TestContext.Current.CancellationToken)); } // TODO: Add more tests with user role (copy tests with admin role) @@ -520,10 +509,9 @@ public class RegionsTests : TestBase var mediator = GetService(); await Assert.ThrowsAsync(() => - mediator.Send(new DeleteRegionCommand() - { - Uuid = Guid.NewGuid() - }, TestContext.Current.CancellationToken)); + mediator.Send( + new DeleteRegionCommand(), + TestContext.Current.CancellationToken)); } // TODO: Add more tests with unauthenticated user @@ -531,760 +519,593 @@ public class RegionsTests : TestBase // TODO: Add test for GetRegion and GetRegionPage - // [Theory] - // // Empty - // [InlineData("")] - // // Length > 64 (65) - // [InlineData("01234567890123456789012345678901234567890123456789012345678901234")] - // public async Task - // AddRegion_WithInvalidName_WithAdminRole_ThrowsValidationException - // (string name) - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new AddRegionCommand() - // { - // Name = name - // })); - // } - // - // [Fact] - // public async Task AddRegion_WithUserRole_ThrowsForbiddenException() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.User }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new AddRegionCommand() - // { - // Name = "Name" - // })); - // } - // - // [Fact] - // public async Task - // AddRegion_WithUnAuthenticatedUser_ThrowsUnAuthorizedException() - // { - // SetUnAuthenticatedUser(); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new AddRegionCommand() - // { - // Name = "Name" - // })); - // } - // - // [Fact] - // public async Task UpdateRegion_WithAdminRole_RegionUpdated() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // var createRegionResult = await mediator.Send( - // new AddRegionCommand() - // { - // Name = "Name" - // }); - // - // string newName = "Different Name"; - // - // var editRegionResult = await mediator.Send( - // new UpdateRegionCommand() - // { - // Guid = createRegionResult.Uuid, - // Name = newName - // }); - // - // var getRegionResult = await mediator.Send( - // new GetRegionQuery() - // { - // Guid = createRegionResult.Uuid, - // }); - // - // Assert.NotNull(getRegionResult); - // Assert.Equal(newName, getRegionResult.Name); - // Assert.Equal(createRegionResult.Uuid, getRegionResult.Uuid); - // } - // - // [Fact] - // public async Task - // UpdateDuplicateRegion_WithAdminRole_DuplicateEntityExceptionThrown() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // var createRegionResult1 = await mediator.Send( - // new AddRegionCommand() - // { - // Name = "Name 1" - // }); - // - // var createRegionResult2 = await mediator.Send( - // new AddRegionCommand() - // { - // Name = "Name 2" - // }); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new UpdateRegionCommand() - // { - // Guid = createRegionResult2.Uuid, - // Name = createRegionResult1.Name - // })); - // } - // - // [Theory] - // // Empty - // [InlineData("")] - // // Length > 64 (65) - // [InlineData("01234567890123456789012345678901234567890123456789012345678901234")] - // public async Task - // UpdateRegion_WithInvalidName_WithAdminRole_ThrowsValidationException - // (string name) - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // var createRegionResult = await mediator.Send( - // new AddRegionCommand() - // { - // Name = "Name 1" - // }); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new UpdateRegionCommand() - // { - // Guid = createRegionResult.Uuid, - // Name = name - // })); - // } - // - // [Theory] - // [InlineData("")] - // [InlineData("not an uuid")] - // public async Task - // UpdateRegion_WithInvalidUuid_WithAdminRole_ThrowsValidationException - // (string uuid) - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new UpdateRegionCommand() - // { - // Guid = Guid.TryParse(uuid, out var guid) ? guid : Guid.Empty, - // Name = "Name" - // })); - // } - // - // [Fact] - // public async Task - // UpdateRegion_WithNonExistentUuid_WithAdminRole_ThrowsNotFoundException() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new UpdateRegionCommand() - // { - // Guid = Guid.NewGuid(), - // Name = "Name" - // })); - // } - // - // [Fact] - // public async Task UpdateRegion_WithUserRole_ThrowsForbiddenException() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.User }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new UpdateRegionCommand() - // { - // Guid = Guid.NewGuid(), - // Name = "Name" - // })); - // } - // - // // TODO: Add more tests with user role (copy tests with admin role) - // - // [Fact] - // public async Task UpdateRegion_UnAuthnticatedUser_ThrowsForbiddenException() - // { - // SetUnAuthenticatedUser(); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new UpdateRegionCommand() - // { - // Guid = Guid.NewGuid(), - // Name = "Name" - // })); - // } - // - // // TODO: Add more tests with unauthenticated user - // // (copy tests with admin role) - // - // [Fact] - // public async Task DeleteRegion_WithAdminRole_RegionDeleted() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // var createRegionResult = await mediator.Send( - // new AddRegionCommand() - // { - // Name = "Name" - // }); - // - // await mediator.Send( - // new DeleteRegionCommand() - // { - // Guid = createRegionResult.Uuid, - // }); - // - // await Assert.ThrowsAsync(() => - // mediator.Send( - // new GetRegionQuery() - // { - // Guid = createRegionResult.Uuid, - // })); - // } - // - // [Theory] - // [InlineData("")] - // [InlineData("not an uuid")] - // public async Task - // DeleteRegion_WithInvalidUuid_WithAdminRole_ThrowsValidationException - // (string uuid) - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new DeleteRegionCommand() - // { - // Guid = Guid.TryParse(uuid, out var guid) ? guid : Guid.Empty - // })); - // } - // - // [Fact] - // public async Task - // DeleteRegion_WithNonExistentUuid_WithAdminRole_ThrowsNotFoundException() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new DeleteRegionCommand() - // { - // Guid = Guid.NewGuid() - // })); - // } - // - // [Fact] - // public async Task DeleteRegion_WithUserRole_ThrowsForbiddenException() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.User }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new DeleteRegionCommand() - // { - // Guid = Guid.NewGuid() - // })); - // } - // - // // TODO: Add more tests with user role (copy tests with admin role) - // - // [Fact] - // public async Task DeleteRegion_UnAuthnticatedUser_ThrowsForbiddenException() - // { - // SetUnAuthenticatedUser(); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new DeleteRegionCommand() - // { - // Guid = Guid.NewGuid() - // })); - // } - // - // // TODO: Add more tests with unauthenticated user - // // (copy tests with admin role) - // - // [Fact] - // public async Task GetRegion_WithAdminRole_RegionReturned() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // string name = "Name"; - // - // var createRegionResult = await mediator.Send( - // new AddRegionCommand() - // { - // Name = name - // }); - // - // var getRegionResult = await mediator.Send( - // new GetRegionQuery() - // { - // Guid = createRegionResult.Uuid, - // }); - // - // Assert.NotNull(getRegionResult); - // Assert.NotNull(getRegionResult.Name); - // Assert.Equal(name, getRegionResult.Name); - // Assert.NotNull(getRegionResult.Uuid); - // Assert.Equal(createRegionResult.Uuid, getRegionResult.Uuid); - // } - // - // [Theory] - // [InlineData("")] - // [InlineData("not an uuid")] - // public async Task - // GetRegion_WithInvalidUuid_WithAdminRole_ThrowsValidationException - // (string uuid) - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send( - // new GetRegionQuery() - // { - // Guid = Guid.TryParse(uuid, out var guid) ? guid : Guid.Empty - // })); - // } - // - // [Fact] - // public async Task - // GetRegion_WithNonExistentUuid_WithAdminRole_ThrowsNotFoundException() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send( - // new GetRegionQuery() - // { - // Guid = Guid.NewGuid() - // })); - // } - // - // [Fact] - // public async Task GetRegion_WithUserRole_ThrowsForbiddenException() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.User }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send( - // new GetRegionQuery() - // { - // Guid = Guid.NewGuid() - // })); - // } - // - // // TODO: Add more tests with user role (copy tests with admin role) - // - // [Fact] - // public async Task GetRegion_UnAuthnticatedUser_ThrowsForbiddenException() - // { - // SetUnAuthenticatedUser(); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send(new GetRegionQuery() - // { - // Guid = Guid.NewGuid() - // })); - // } - // - // // TODO: Add more tests with unauthenticated user - // // (copy tests with admin role) - // - // [Fact] - // public async Task GetRegionsPage_WithAdminRole_RegionsPageReturned() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // string name1 = "Name 1"; - // string name2 = "Name 2"; - // - // var createRegionResult1 = await mediator.Send( - // new AddRegionCommand() - // { - // Name = name1 - // }); - // - // var createRegionResult2 = await mediator.Send( - // new AddRegionCommand() - // { - // Name = name2 - // }); - // - // var getRegionsResult = await mediator.Send( - // new GetRegionsPageQuery() - // { - // PageNumber = 1, - // PageSize = 1 - // }); - // - // Assert.NotNull(getRegionsResult); - // Assert.NotNull(getRegionsResult.PageNumber); - // Assert.Equal(1, getRegionsResult.PageNumber); - // Assert.NotNull(getRegionsResult.TotalCount); - // Assert.Equal(2, getRegionsResult.TotalCount); - // Assert.NotNull(getRegionsResult.TotalPages); - // Assert.Equal(2, getRegionsResult.TotalPages); - // Assert.NotNull(getRegionsResult.HasNextPage); - // Assert.Equal(true, getRegionsResult.HasNextPage); - // Assert.NotNull(getRegionsResult.HasPreviousPage); - // Assert.Equal(false, getRegionsResult.HasPreviousPage); - // Assert.NotNull(getRegionsResult.Items); - // Assert.Equal(1, getRegionsResult.Items.Count()); - // Assert.NotNull(getRegionsResult.Items.First().Name); - // Assert.Equal( - // createRegionResult1.Name, getRegionsResult.Items.First().Name); - // Assert.NotNull(getRegionsResult.Items.First().Uuid); - // Assert.Equal( - // createRegionResult1.Uuid, getRegionsResult.Items.First().Uuid); - // - // getRegionsResult = await mediator.Send( - // new GetRegionsPageQuery() - // { - // PageNumber = 2, - // PageSize = 1 - // }); - // - // Assert.NotNull(getRegionsResult); - // Assert.NotNull(getRegionsResult.PageNumber); - // Assert.Equal(2, getRegionsResult.PageNumber); - // Assert.NotNull(getRegionsResult.TotalCount); - // Assert.Equal(2, getRegionsResult.TotalCount); - // Assert.NotNull(getRegionsResult.TotalPages); - // Assert.Equal(2, getRegionsResult.TotalPages); - // Assert.NotNull(getRegionsResult.HasNextPage); - // Assert.Equal(false, getRegionsResult.HasNextPage); - // Assert.NotNull(getRegionsResult.HasPreviousPage); - // Assert.Equal(true, getRegionsResult.HasPreviousPage); - // Assert.NotNull(getRegionsResult.Items); - // Assert.Equal(1, getRegionsResult.Items.Count()); - // Assert.NotNull(getRegionsResult.Items.First().Name); - // Assert.Equal( - // createRegionResult2.Name, getRegionsResult.Items.First().Name); - // Assert.NotNull(getRegionsResult.Items.First().Uuid); - // Assert.Equal( - // createRegionResult2.Uuid, getRegionsResult.Items.First().Uuid); - // - // getRegionsResult = await mediator.Send( - // new GetRegionsPageQuery() - // { - // PageNumber = 1, - // PageSize = 10 - // }); - // - // Assert.NotNull(getRegionsResult); - // Assert.NotNull(getRegionsResult.PageNumber); - // Assert.Equal(1, getRegionsResult.PageNumber); - // Assert.NotNull(getRegionsResult.TotalCount); - // Assert.Equal(2, getRegionsResult.TotalCount); - // Assert.NotNull(getRegionsResult.TotalPages); - // Assert.Equal(1, getRegionsResult.TotalPages); - // Assert.NotNull(getRegionsResult.HasNextPage); - // Assert.Equal(false, getRegionsResult.HasNextPage); - // Assert.NotNull(getRegionsResult.HasPreviousPage); - // Assert.Equal(false, getRegionsResult.HasPreviousPage); - // Assert.NotNull(getRegionsResult.Items); - // Assert.Equal(2, getRegionsResult.Items.Count()); - // Assert.NotNull(getRegionsResult.Items.First().Name); - // Assert.Equal( - // createRegionResult1.Name, getRegionsResult.Items.First().Name); - // Assert.NotNull(getRegionsResult.Items.First().Uuid); - // Assert.Equal( - // createRegionResult1.Uuid, getRegionsResult.Items.First().Uuid); - // Assert.NotNull(getRegionsResult.Items.Last().Name); - // Assert.Equal( - // createRegionResult2.Name, getRegionsResult.Items.Last().Name); - // Assert.NotNull(getRegionsResult.Items.Last().Uuid); - // Assert.Equal( - // createRegionResult2.Uuid, getRegionsResult.Items.Last().Uuid); - // } - // - // [Fact] - // public async Task - // GetRegionsPage_WithSearch_WithAdminRole_SearchedRegionsPageReturned() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // string name1 = "Name 1"; - // string name2 = "Some 3 String"; - // string name3 = "3 Name Some"; - // - // var createRegionResult1 = await mediator.Send( - // new AddRegionCommand() - // { - // Name = name1 - // }); - // - // var createRegionResult2 = await mediator.Send( - // new AddRegionCommand() - // { - // Name = name2 - // }); - // - // var createRegionResult3 = await mediator.Send( - // new AddRegionCommand() - // { - // Name = name3 - // }); - // - // var getRegionsResult = await mediator.Send( - // new GetRegionsPageQuery() - // { - // PageNumber = 1, - // PageSize = 10, - // Search = "name" - // }); - // - // Assert.NotNull(getRegionsResult); - // Assert.NotNull(getRegionsResult.PageNumber); - // Assert.Equal(1, getRegionsResult.PageNumber); - // Assert.NotNull(getRegionsResult.TotalCount); - // Assert.Equal(2, getRegionsResult.TotalCount); - // Assert.NotNull(getRegionsResult.TotalPages); - // Assert.Equal(1, getRegionsResult.TotalPages); - // Assert.NotNull(getRegionsResult.HasNextPage); - // Assert.Equal(false, getRegionsResult.HasNextPage); - // Assert.NotNull(getRegionsResult.HasPreviousPage); - // Assert.Equal(false, getRegionsResult.HasPreviousPage); - // Assert.NotNull(getRegionsResult.Items); - // Assert.Equal(2, getRegionsResult.Items.Count()); - // Assert.NotNull(getRegionsResult.Items.First().Name); - // Assert.Equal( - // createRegionResult1.Name, getRegionsResult.Items.First().Name); - // Assert.NotNull(getRegionsResult.Items.First().Uuid); - // Assert.Equal( - // createRegionResult1.Uuid, getRegionsResult.Items.First().Uuid); - // Assert.NotNull(getRegionsResult.Items.Last().Name); - // Assert.Equal( - // createRegionResult3.Name, getRegionsResult.Items.Last().Name); - // Assert.NotNull(getRegionsResult.Items.Last().Uuid); - // Assert.Equal( - // createRegionResult3.Uuid, getRegionsResult.Items.Last().Uuid); - // - // getRegionsResult = await mediator.Send( - // new GetRegionsPageQuery() - // { - // PageNumber = 1, - // PageSize = 10, - // Search = "3" - // }); - // - // Assert.NotNull(getRegionsResult); - // Assert.NotNull(getRegionsResult.PageNumber); - // Assert.Equal(1, getRegionsResult.PageNumber); - // Assert.NotNull(getRegionsResult.TotalCount); - // Assert.Equal(2, getRegionsResult.TotalCount); - // Assert.NotNull(getRegionsResult.TotalPages); - // Assert.Equal(1, getRegionsResult.TotalPages); - // Assert.NotNull(getRegionsResult.HasNextPage); - // Assert.Equal(false, getRegionsResult.HasNextPage); - // Assert.NotNull(getRegionsResult.HasPreviousPage); - // Assert.Equal(false, getRegionsResult.HasPreviousPage); - // Assert.NotNull(getRegionsResult.Items); - // Assert.Equal(2, getRegionsResult.Items.Count()); - // Assert.NotNull(getRegionsResult.Items.First().Name); - // Assert.Equal( - // createRegionResult2.Name, getRegionsResult.Items.First().Name); - // Assert.NotNull(getRegionsResult.Items.First().Uuid); - // Assert.Equal( - // createRegionResult2.Uuid, getRegionsResult.Items.First().Uuid); - // Assert.NotNull(getRegionsResult.Items.Last().Name); - // Assert.Equal( - // createRegionResult3.Name, getRegionsResult.Items.Last().Name); - // Assert.NotNull(getRegionsResult.Items.Last().Uuid); - // Assert.Equal( - // createRegionResult3.Uuid, getRegionsResult.Items.Last().Uuid); - // } - // - // [Fact] - // public async Task - // GetRegionsPage_WithSort_WithAdminRole_SortedRegionsPageReturned() - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // string name1 = "Name 1"; - // string name2 = "Some 2"; - // - // var createRegionResult1 = await mediator.Send( - // new AddRegionCommand() - // { - // Name = name1 - // }); - // - // var createRegionResult2 = await mediator.Send( - // new AddRegionCommand() - // { - // Name = name2 - // }); - // - // var getRegionsResult = await mediator.Send( - // new GetRegionsPageQuery() - // { - // PageNumber = 1, - // PageSize = 10, - // Sort = "-name" - // }); - // - // Assert.NotNull(getRegionsResult); - // Assert.NotNull(getRegionsResult.PageNumber); - // Assert.Equal(1, getRegionsResult.PageNumber); - // Assert.NotNull(getRegionsResult.TotalCount); - // Assert.Equal(2, getRegionsResult.TotalCount); - // Assert.NotNull(getRegionsResult.TotalPages); - // Assert.Equal(1, getRegionsResult.TotalPages); - // Assert.NotNull(getRegionsResult.HasNextPage); - // Assert.Equal(false, getRegionsResult.HasNextPage); - // Assert.NotNull(getRegionsResult.HasPreviousPage); - // Assert.Equal(false, getRegionsResult.HasPreviousPage); - // Assert.NotNull(getRegionsResult.Items); - // Assert.Equal(2, getRegionsResult.Items.Count()); - // Assert.NotNull(getRegionsResult.Items.First().Name); - // Assert.Equal( - // createRegionResult2.Name, getRegionsResult.Items.First().Name); - // Assert.NotNull(getRegionsResult.Items.First().Uuid); - // Assert.Equal( - // createRegionResult2.Uuid, getRegionsResult.Items.First().Uuid); - // Assert.NotNull(getRegionsResult.Items.Last().Name); - // Assert.Equal( - // createRegionResult1.Name, getRegionsResult.Items.Last().Name); - // Assert.NotNull(getRegionsResult.Items.Last().Uuid); - // Assert.Equal( - // createRegionResult1.Uuid, getRegionsResult.Items.Last().Uuid); - // - // getRegionsResult = await mediator.Send( - // new GetRegionsPageQuery() - // { - // PageNumber = 1, - // PageSize = 10, - // Sort = "+name" - // }); - // - // Assert.NotNull(getRegionsResult); - // Assert.NotNull(getRegionsResult.PageNumber); - // Assert.Equal(1, getRegionsResult.PageNumber); - // Assert.NotNull(getRegionsResult.TotalCount); - // Assert.Equal(2, getRegionsResult.TotalCount); - // Assert.NotNull(getRegionsResult.TotalPages); - // Assert.Equal(1, getRegionsResult.TotalPages); - // Assert.NotNull(getRegionsResult.HasNextPage); - // Assert.Equal(false, getRegionsResult.HasNextPage); - // Assert.NotNull(getRegionsResult.HasPreviousPage); - // Assert.Equal(false, getRegionsResult.HasPreviousPage); - // Assert.NotNull(getRegionsResult.Items); - // Assert.Equal(2, getRegionsResult.Items.Count()); - // Assert.NotNull(getRegionsResult.Items.First().Name); - // Assert.Equal( - // createRegionResult1.Name, getRegionsResult.Items.First().Name); - // Assert.NotNull(getRegionsResult.Items.First().Uuid); - // Assert.Equal( - // createRegionResult1.Uuid, getRegionsResult.Items.First().Uuid); - // Assert.NotNull(getRegionsResult.Items.Last().Name); - // Assert.Equal( - // createRegionResult2.Name, getRegionsResult.Items.Last().Name); - // Assert.NotNull(getRegionsResult.Items.Last().Uuid); - // Assert.Equal( - // createRegionResult2.Uuid, getRegionsResult.Items.Last().Uuid); - // } - // - // [Theory] - // // Length > 64 (65) - // [InlineData("01234567890123456789012345678901234567890123456789012345678901234")] - // public async Task - // GetRegionsPage_WithInvalidSearch_WithAdminRole_ThrowsValidationException - // (string search) - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send( - // new GetRegionsPageQuery() - // { - // Search = search - // })); - // } - // - // [Theory] - // [InlineData(int.MinValue)] - // [InlineData(0)] - // public async Task - // GetRegionsPage_WithInvalidPageNumber_WithAdminRole_ThrowsValidationException - // (int pageNumber) - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send( - // new GetRegionsPageQuery() - // { - // PageNumber = pageNumber - // })); - // } - // - // [Theory] - // [InlineData(int.MinValue)] - // [InlineData(0)] - // [InlineData(51)] - // [InlineData(int.MaxValue)] - // public async Task - // GetRegionsPage_WithInvalidPageSize_WithAdminRole_ThrowsValidationException - // (int pageSize) - // { - // SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); - // - // var mediator = GetService(); - // - // await Assert.ThrowsAsync(() => - // mediator.Send( - // new GetRegionsPageQuery() - // { - // PageSize = pageSize - // })); - // } + [Fact] + public async Task GetRegion_WithAdminRole_RegionReturned() + { + SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); + + var mediator = GetService(); + + string countryName = "Name"; + + var createCountryResult = await mediator.Send( + new AddCountryCommand() + { + Name = countryName + }, TestContext.Current.CancellationToken); + + string regionName = "Name"; + + var createRegionResult = await mediator.Send( + new AddRegionCommand() + { + Name = regionName, + CountryUuid = createCountryResult.Uuid + }, TestContext.Current.CancellationToken); + + var getRegionResult = await mediator.Send( + new GetRegionQuery() + { + Uuid = createRegionResult.Uuid, + }, TestContext.Current.CancellationToken); + + Assert.NotNull(getRegionResult); + Assert.NotNull(getRegionResult.Name); + Assert.Equal(regionName, getRegionResult.Name); + Assert.Equal(createRegionResult.Uuid, getRegionResult.Uuid); + Assert.Equal(createCountryResult.Uuid, getRegionResult.CountryUuid); + } + + [Theory] + [InlineData("")] + [InlineData("not an uuid")] + public async Task + GetRegion_WithInvalidUuid_WithAdminRole_ThrowsValidationException + (string uuid) + { + SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); + + var mediator = GetService(); + + await Assert.ThrowsAsync(() => + mediator.Send( + new GetRegionQuery() + { + Uuid = Guid.TryParse(uuid, out var guid) ? guid : Guid.Empty + }, TestContext.Current.CancellationToken)); + } + + [Fact] + public async Task + GetRegion_WithNonExistentUuid_WithAdminRole_ThrowsNotFoundException() + { + SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); + + var mediator = GetService(); + + await Assert.ThrowsAsync(() => + mediator.Send( + new GetRegionQuery() + { + Uuid = Guid.NewGuid() + }, TestContext.Current.CancellationToken)); + } + + [Fact] + public async Task GetRegion_WithUserRole_ThrowsForbiddenException() + { + SetAuthenticatedUserRoles(new[] { IdentityRole.User }); + + var mediator = GetService(); + + await Assert.ThrowsAsync(() => + mediator.Send( + new GetRegionQuery(), + TestContext.Current.CancellationToken)); + } + + // TODO: Add more tests with user role (copy tests with admin role) + + [Fact] + public async Task GetRegion_UnAuthnticatedUser_ThrowsForbiddenException() + { + SetUnAuthenticatedUser(); + + var mediator = GetService(); + + await Assert.ThrowsAsync(() => + mediator.Send( + new GetRegionQuery(), + TestContext.Current.CancellationToken)); + } + + // TODO: Add more tests with unauthenticated user + // (copy tests with admin role) + + [Fact] + public async Task GetRegionsPage_WithAdminRole_RegionsPageReturned() + { + SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); + + var mediator = GetService(); + + string countryName1 = "Country Name 1"; + string countryName2 = "CountryName 1"; + + var createCountryResult1 = await mediator.Send( + new AddCountryCommand() + { + Name = countryName1 + }, TestContext.Current.CancellationToken); + + var createCountryResult2 = await mediator.Send( + new AddCountryCommand() + { + Name = countryName2 + }, TestContext.Current.CancellationToken); + + string regionName1 = "Region Name 1"; + string regionName2 = "Region Name 2"; + + var createRegionResult1 = await mediator.Send( + new AddRegionCommand() + { + Name = regionName1, + CountryUuid = createCountryResult1.Uuid + }, TestContext.Current.CancellationToken); + + var createRegionResult2 = await mediator.Send( + new AddRegionCommand() + { + Name = regionName2, + CountryUuid = createCountryResult2.Uuid + }, TestContext.Current.CancellationToken); + + var getRegionsResult = await mediator.Send( + new GetRegionsPageQuery() + { + PageNumber = 1, + PageSize = 1 + }, TestContext.Current.CancellationToken); + + Assert.NotNull(getRegionsResult); + Assert.Equal(1, getRegionsResult.PageNumber); + Assert.Equal(2, getRegionsResult.TotalCount); + Assert.Equal(2, getRegionsResult.TotalPages); + Assert.True(getRegionsResult.HasNextPage); + Assert.False(getRegionsResult.HasPreviousPage); + Assert.NotNull(getRegionsResult.Items); + Assert.Single(getRegionsResult.Items); + Assert.NotNull(getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult1.Name, getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult1.Uuid, getRegionsResult.Items.First().Uuid); + Assert.Equal( + createCountryResult1.Uuid, getRegionsResult.Items.First().CountryUuid); + + getRegionsResult = await mediator.Send( + new GetRegionsPageQuery() + { + PageNumber = 2, + PageSize = 1 + }, TestContext.Current.CancellationToken); + + Assert.NotNull(getRegionsResult); + Assert.Equal(2, getRegionsResult.PageNumber); + Assert.Equal(2, getRegionsResult.TotalCount); + Assert.Equal(2, getRegionsResult.TotalPages); + Assert.False(getRegionsResult.HasNextPage); + Assert.True(getRegionsResult.HasPreviousPage); + Assert.NotNull(getRegionsResult.Items); + Assert.Single(getRegionsResult.Items); + Assert.NotNull(getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult2.Name, getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult2.Uuid, getRegionsResult.Items.First().Uuid); + Assert.Equal( + createCountryResult2.Uuid, getRegionsResult.Items.First().CountryUuid); + + getRegionsResult = await mediator.Send( + new GetRegionsPageQuery() + { + PageNumber = 1, + PageSize = 10 + }, TestContext.Current.CancellationToken); + + Assert.NotNull(getRegionsResult); + Assert.Equal(1, getRegionsResult.PageNumber); + Assert.Equal(2, getRegionsResult.TotalCount); + Assert.Equal(1, getRegionsResult.TotalPages); + Assert.False(getRegionsResult.HasNextPage); + Assert.False(getRegionsResult.HasPreviousPage); + Assert.Equal(2, getRegionsResult.Items.Count()); + Assert.NotNull(getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult1.Name, getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult1.Uuid, getRegionsResult.Items.First().Uuid); + Assert.Equal( + createCountryResult1.Uuid, getRegionsResult.Items.First().CountryUuid); + Assert.NotNull(getRegionsResult.Items.Last().Name); + Assert.Equal( + createRegionResult2.Name, getRegionsResult.Items.Last().Name); + Assert.Equal( + createRegionResult2.Uuid, getRegionsResult.Items.Last().Uuid); + Assert.Equal( + createCountryResult2.Uuid, getRegionsResult.Items.Last().CountryUuid); + } + + [Fact] + public async Task + GetRegionsPage_WithSearch_WithAdminRole_SearchedRegionsPageReturned() + { + SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); + + var mediator = GetService(); + + string countryName1 = "Country Name 1"; + string countryName2 = "CountryName 1"; + + var createCountryResult1 = await mediator.Send( + new AddCountryCommand() + { + Name = countryName1 + }, TestContext.Current.CancellationToken); + + var createCountryResult2 = await mediator.Send( + new AddCountryCommand() + { + Name = countryName2 + }, TestContext.Current.CancellationToken); + + string regionName1 = "Region Name 1"; + string regionName2 = "Region Name 2"; + + var createRegionResult1 = await mediator.Send( + new AddRegionCommand() + { + Name = regionName1, + CountryUuid = createCountryResult1.Uuid + }, TestContext.Current.CancellationToken); + + var createRegionResult2 = await mediator.Send( + new AddRegionCommand() + { + Name = regionName2, + CountryUuid = createCountryResult2.Uuid + }, TestContext.Current.CancellationToken); + + var getRegionsResult = await mediator.Send( + new GetRegionsPageQuery() + { + PageNumber = 1, + PageSize = 10, + Search = "cOUNTRYn" + }, TestContext.Current.CancellationToken); + + Assert.NotNull(getRegionsResult); + Assert.Equal(1, getRegionsResult.PageNumber); + Assert.Equal(1, getRegionsResult.TotalCount); + Assert.Equal(1, getRegionsResult.TotalPages); + Assert.False(getRegionsResult.HasNextPage); + Assert.False(getRegionsResult.HasPreviousPage); + Assert.NotNull(getRegionsResult.Items); + Assert.Single(getRegionsResult.Items); + Assert.NotNull(getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult2.Name, getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult2.Uuid, getRegionsResult.Items.First().Uuid); + Assert.Equal( + createCountryResult2.Uuid, getRegionsResult.Items.First().CountryUuid); + + getRegionsResult = await mediator.Send( + new GetRegionsPageQuery() + { + PageNumber = 1, + PageSize = 10, + Search = "region name 1" + }, TestContext.Current.CancellationToken); + + Assert.NotNull(getRegionsResult); + Assert.Equal(1, getRegionsResult.PageNumber); + Assert.Equal(1, getRegionsResult.TotalCount); + Assert.Equal(1, getRegionsResult.TotalPages); + Assert.False(getRegionsResult.HasNextPage); + Assert.False(getRegionsResult.HasPreviousPage); + Assert.NotNull(getRegionsResult.Items); + Assert.Single(getRegionsResult.Items); + Assert.NotNull(getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult1.Name, getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult1.Uuid, getRegionsResult.Items.First().Uuid); + Assert.Equal( + createCountryResult1.Uuid, getRegionsResult.Items.First().CountryUuid); + } + + [Fact] + public async Task + GetRegionsPage_WithSort_WithAdminRole_SortedRegionsPageReturned() + { + SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); + + var mediator = GetService(); + + string countryName1 = "Country Name 1"; + string countryName2 = "Country Name 2"; + + var createCountryResult1 = await mediator.Send( + new AddCountryCommand() + { + Name = countryName1 + }, TestContext.Current.CancellationToken); + + var createCountryResult2 = await mediator.Send( + new AddCountryCommand() + { + Name = countryName2 + }, TestContext.Current.CancellationToken); + + string regionName1 = "Region Name 1"; + string regionName2 = "Region Name 2"; + + var createRegionResult1 = await mediator.Send( + new AddRegionCommand() + { + Name = regionName1, + CountryUuid = createCountryResult1.Uuid + }, TestContext.Current.CancellationToken); + + var createRegionResult2 = await mediator.Send( + new AddRegionCommand() + { + Name = regionName2, + CountryUuid = createCountryResult2.Uuid + }, TestContext.Current.CancellationToken); + + var getRegionsResult = await mediator.Send( + new GetRegionsPageQuery() + { + PageNumber = 1, + PageSize = 10, + Sort = "-name" + }, TestContext.Current.CancellationToken); + + Assert.NotNull(getRegionsResult); + Assert.Equal(1, getRegionsResult.PageNumber); + Assert.Equal(2, getRegionsResult.TotalCount); + Assert.Equal(1, getRegionsResult.TotalPages); + Assert.False(getRegionsResult.HasNextPage); + Assert.False(getRegionsResult.HasPreviousPage); + Assert.NotNull(getRegionsResult.Items); + Assert.Equal(2, getRegionsResult.Items.Count()); + Assert.NotNull(getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult2.Name, getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult2.Uuid, getRegionsResult.Items.First().Uuid); + Assert.Equal( + createCountryResult2.Uuid, getRegionsResult.Items.First().CountryUuid); + + getRegionsResult = await mediator.Send( + new GetRegionsPageQuery() + { + PageNumber = 1, + PageSize = 10, + Sort = "+name" + }, TestContext.Current.CancellationToken); + + Assert.NotNull(getRegionsResult); + Assert.Equal(1, getRegionsResult.PageNumber); + Assert.Equal(2, getRegionsResult.TotalCount); + Assert.Equal(1, getRegionsResult.TotalPages); + Assert.False(getRegionsResult.HasNextPage); + Assert.False(getRegionsResult.HasPreviousPage); + Assert.NotNull(getRegionsResult.Items); + Assert.Equal(2, getRegionsResult.Items.Count()); + Assert.NotNull(getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult1.Name, getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult1.Uuid, getRegionsResult.Items.First().Uuid); + Assert.Equal( + createCountryResult1.Uuid, getRegionsResult.Items.First().CountryUuid); + } + + [Fact] + public async Task + GetRegionsPage_WithFilterByCountryUuid_WithAdminRole_SearchedRegionsPageReturned() + { + SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); + + var mediator = GetService(); + + string countryName1 = "Country Name 1"; + string countryName2 = "Country Name 2"; + + var createCountryResult1 = await mediator.Send( + new AddCountryCommand() + { + Name = countryName1 + }, TestContext.Current.CancellationToken); + + var createCountryResult2 = await mediator.Send( + new AddCountryCommand() + { + Name = countryName2 + }, TestContext.Current.CancellationToken); + + string regionName1 = "Region Name 1"; + string regionName2 = "Region Name 2"; + string regionName3 = "Region Name 3"; + + var createRegionResult1 = await mediator.Send( + new AddRegionCommand() + { + Name = regionName1, + CountryUuid = createCountryResult1.Uuid + }, TestContext.Current.CancellationToken); + + var createRegionResult2 = await mediator.Send( + new AddRegionCommand() + { + Name = regionName2, + CountryUuid = createCountryResult2.Uuid + }, TestContext.Current.CancellationToken); + + var createRegionResult3 = await mediator.Send( + new AddRegionCommand() + { + Name = regionName3, + CountryUuid = createCountryResult2.Uuid + }, TestContext.Current.CancellationToken); + + var getRegionsResult = await mediator.Send( + new GetRegionsPageQuery() + { + PageNumber = 1, + PageSize = 10, + CountryUuid = createCountryResult1.Uuid + }, TestContext.Current.CancellationToken); + + Assert.NotNull(getRegionsResult); + Assert.Equal(1, getRegionsResult.PageNumber); + Assert.Equal(1, getRegionsResult.TotalCount); + Assert.Equal(1, getRegionsResult.TotalPages); + Assert.False(getRegionsResult.HasNextPage); + Assert.False(getRegionsResult.HasPreviousPage); + Assert.NotNull(getRegionsResult.Items); + Assert.Single(getRegionsResult.Items); + Assert.NotNull(getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult1.Name, getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult1.Uuid, getRegionsResult.Items.First().Uuid); + Assert.Equal( + createCountryResult1.Uuid, getRegionsResult.Items.First().CountryUuid); + + getRegionsResult = await mediator.Send( + new GetRegionsPageQuery() + { + PageNumber = 1, + PageSize = 10, + CountryUuid = createCountryResult2.Uuid + }, TestContext.Current.CancellationToken); + + Assert.NotNull(getRegionsResult); + Assert.Equal(1, getRegionsResult.PageNumber); + Assert.Equal(2, getRegionsResult.TotalCount); + Assert.Equal(1, getRegionsResult.TotalPages); + Assert.False(getRegionsResult.HasNextPage); + Assert.False(getRegionsResult.HasPreviousPage); + Assert.NotNull(getRegionsResult.Items); + Assert.Equal(2, getRegionsResult.Items.Count()); + Assert.NotNull(getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult2.Name, getRegionsResult.Items.First().Name); + Assert.Equal( + createRegionResult2.Uuid, getRegionsResult.Items.First().Uuid); + Assert.Equal( + createCountryResult2.Uuid, getRegionsResult.Items.First().CountryUuid); + Assert.NotNull(getRegionsResult.Items.Last().Name); + Assert.Equal( + createRegionResult3.Name, getRegionsResult.Items.Last().Name); + Assert.Equal( + createRegionResult3.Uuid, getRegionsResult.Items.Last().Uuid); + Assert.Equal( + createCountryResult2.Uuid, getRegionsResult.Items.Last().CountryUuid); + } + + [Theory] + // Length > 64 (65) + [InlineData("01234567890123456789012345678901234567890123456789012345678901234")] + public async Task + GetRegionsPage_WithInvalidSearch_WithAdminRole_ThrowsValidationException + (string search) + { + SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); + + var mediator = GetService(); + + await Assert.ThrowsAsync(() => + mediator.Send( + new GetRegionsPageQuery() + { + Search = search + }, TestContext.Current.CancellationToken)); + } + + [Theory] + [InlineData(int.MinValue)] + [InlineData(0)] + public async Task + GetRegionsPage_WithInvalidPageNumber_WithAdminRole_ThrowsValidationException + (int pageNumber) + { + SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); + + var mediator = GetService(); + + await Assert.ThrowsAsync(() => + mediator.Send( + new GetRegionsPageQuery() + { + PageNumber = pageNumber + }, TestContext.Current.CancellationToken)); + } + + [Theory] + [InlineData(int.MinValue)] + [InlineData(0)] + [InlineData(51)] + [InlineData(int.MaxValue)] + public async Task + GetRegionsPage_WithInvalidPageSize_WithAdminRole_ThrowsValidationException + (int pageSize) + { + SetAuthenticatedUserRoles(new[] { IdentityRole.Administrator }); + + var mediator = GetService(); + + await Assert.ThrowsAsync(() => + mediator.Send( + new GetRegionsPageQuery() + { + PageSize = pageSize + }, TestContext.Current.CancellationToken)); + } + + [Fact] + public async Task GetRegionsPage_WithUserRole_ThrowsForbiddenException() + { + SetAuthenticatedUserRoles(new[] { IdentityRole.User }); + + var mediator = GetService(); + + await Assert.ThrowsAsync(() => + mediator.Send( + new GetRegionsPageQuery(), + TestContext.Current.CancellationToken)); + } + + // TODO: Add more tests with user role (copy tests with admin role) + + [Fact] + public async Task GetRegionsPage_UnAuthnticatedUser_ThrowsForbiddenException() + { + SetUnAuthenticatedUser(); + + var mediator = GetService(); + + await Assert.ThrowsAsync(() => + mediator.Send( + new GetRegionQuery(), + TestContext.Current.CancellationToken)); + } + + // TODO: Add more tests with unauthenticated user + // (copy tests with admin role) } diff --git a/tst/Application.IntegrationTests/packages.lock.json b/tst/Application.IntegrationTests/packages.lock.json index aac2a27..017ffbc 100644 --- a/tst/Application.IntegrationTests/packages.lock.json +++ b/tst/Application.IntegrationTests/packages.lock.json @@ -11,12 +11,6 @@ "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.4" } }, - "Microsoft.NET.ILLink.Tasks": { - "type": "Direct", - "requested": "[9.0.3, )", - "resolved": "9.0.3", - "contentHash": "1rqGTfubVg0qj2PsK6esyq3PIxtYJYrN3LsYUV9RrvH3anmt3fT3ozYdAZZH4U8JU/pt5pPIUk8NBSu26wtekA==" - }, "Microsoft.NET.Test.Sdk": { "type": "Direct", "requested": "[17.13.0, )", @@ -1025,51 +1019,6 @@ "Npgsql.EntityFrameworkCore.PostgreSQL": "[9.0.4, )" } } - }, - "net9.0/linux-x64": { - "Microsoft.Win32.Registry": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "+FWlwd//+Tt56316p00hVePBCouXyEzT86Jb3+AuRotTND0IYn0OO3obs1gnQEs/txEnt+rF2JBGLItTG+Be6A==", - "dependencies": { - "System.Security.AccessControl": "4.5.0", - "System.Security.Principal.Windows": "4.5.0" - } - }, - "SQLitePCLRaw.lib.e_sqlite3": { - "type": "Transitive", - "resolved": "2.1.10", - "contentHash": "mAr69tDbnf3QJpRy2nJz8Qdpebdil00fvycyByR58Cn9eARvR+UiG2Vzsp+4q1tV3ikwiYIjlXCQFc12GfebbA==" - }, - "System.Diagnostics.EventLog": { - "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw==" - }, - "System.Security.AccessControl": { - "type": "Transitive", - "resolved": "4.5.0", - "contentHash": "vW8Eoq0TMyz5vAG/6ce483x/CP83fgm4SJe5P8Tb1tZaobcvPrbMEL7rhH1DRdrYbbb6F0vq3OlzmK0Pkwks5A==", - "dependencies": { - "Microsoft.NETCore.Platforms": "2.0.0", - "System.Security.Principal.Windows": "4.5.0" - } - }, - "System.Security.Cryptography.Pkcs": { - "type": "Transitive", - "resolved": "8.0.1", - "contentHash": "CoCRHFym33aUSf/NtWSVSZa99dkd0Hm7OCZUxORBjRB16LNhIEOf8THPqzIYlvKM0nNDAPTRBa1FxEECrgaxxA==" - }, - "System.Security.Principal.Windows": { - "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" - }, - "System.Text.Encodings.Web": { - "type": "Transitive", - "resolved": "8.0.0", - "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==" - } } } } \ No newline at end of file