Beispiel #1
0
        public async Task Test3004()
        {
            // Prepare a unit with the same code as one that has been saved already
            var dtoForSave = new RoleForSave
            {
                EntityState = "Inserted",
                Name        = "HR Manager",
                Name2       = "مدير الموارد البشرية",
                Code        = "HR",
                IsPublic    = false,
                Permissions = new List <PermissionForSave>
                {
                    new PermissionForSave
                    {
                        EntityState = "Inserted",
                        ViewId      = "DoesntExist", // Doesn't exist
                        Level       = "Read"
                    }
                }
            };

            // Call the API
            var dtosForSave = new List <RoleForSave> {
                dtoForSave
            };
            var response = await _client.PostAsJsonAsync(rolesURL, dtosForSave);

            // Assert that the response status code is 422 unprocessable entity (validation errors)
            _output.WriteLine(await response.Content.ReadAsStringAsync());
            Assert.Equal(HttpStatusCode.UnprocessableEntity, response.StatusCode);

            // Confirm that the result is a well-formed validation errors structure
            var errors = await response.Content.ReadAsAsync <ValidationErrors>();

            // Assert that it contains a validation key pointing to the ViewId property of the permission line
            string expectedKey = "[0].Permissions[0].ViewId";

            Assert.True(errors.ContainsKey(expectedKey), $"Expected error key '{expectedKey}' was not found");

            // Assert that it contains a useful error message in English
            var message = errors[expectedKey].Single();

            Assert.Contains("is not activated", message.ToLower());
        }
Beispiel #2
0
        public async Task Test03()
        {
            var usersResponse = await(await Client.GetAsync($"/api/users")).Content.ReadAsAsync <GetResponse <User> >();
            int adminId       = usersResponse.Result.FirstOrDefault().Id;

            // Prepare a well formed entity
            var dtoForSave = new RoleForSave
            {
                Name        = "Sales Manager",
                Name2       = "مدير المبيعات",
                Code        = "SM",
                IsPublic    = false,
                Permissions = new List <PermissionForSave>
                {
                    new PermissionForSave
                    {
                        View   = "users",
                        Action = "Read"
                    },
                    new PermissionForSave
                    {
                        View   = "units",
                        Action = "Update"
                    }
                },
                Members = new List <RoleMembershipForSave>
                {
                    new RoleMembershipForSave
                    {
                        UserId = adminId,
                        Memo   = "So Good"
                    }
                }
            };

            var dtoForSave2 = new RoleForSave
            {
                Name        = "Chief of Staff",
                Name2       = "مدير المكتب",
                Code        = "CS",
                IsPublic    = false,
                Permissions = new List <PermissionForSave>
                {
                    new PermissionForSave
                    {
                        View   = "agents",
                        Action = "Update"
                    }
                },
                Members = new List <RoleMembershipForSave>
                {
                }
            };

            // Save it
            var dtosForSave = new List <RoleForSave> {
                dtoForSave, dtoForSave2
            };
            var response = await Client.PostAsJsonAsync($"{Url}?expand=Permissions,Members/User", dtosForSave);

            // Assert that the response status code is a happy 200 OK
            Output.WriteLine(await response.Content.ReadAsStringAsync());
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);

            // Assert that the response is well-formed singleton
            var responseData = await response.Content.ReadAsAsync <EntitiesResponse <Role> >();

            Assert.Collection(responseData.Result,
                              e => Assert.NotEqual(0, e.Id),
                              e => Assert.NotEqual(0, e.Id));

            // Assert that the result matches the saved entity
            Assert.Equal("Role", responseData.CollectionName);

            var responseDto = responseData.Result.FirstOrDefault();

            Assert.Equal(dtoForSave.Name, responseDto.Name);
            Assert.Equal(dtoForSave.Name2, responseDto.Name2);
            Assert.Equal(dtoForSave.Code, responseDto.Code);
            Assert.Equal(dtoForSave.IsPublic, responseDto.IsPublic);
            Assert.Collection(responseDto.Permissions,
                              p =>
            {
                Assert.Equal(dtoForSave.Permissions[0].Action, p.Action);
                Assert.Equal(dtoForSave.Permissions[0].View, p.View);
                Assert.NotEqual(0, p.Id);
            },
                              p =>
            {
                Assert.Equal(dtoForSave.Permissions[1].Action, p.Action);
                Assert.Equal(dtoForSave.Permissions[1].View, p.View);
                Assert.NotEqual(0, p.Id);
            }
                              );

            Assert.Collection(responseDto.Members,
                              m =>
            {
                Assert.Equal(dtoForSave.Members[0].UserId, m.UserId);
                Assert.Equal(dtoForSave.Members[0].Memo, m.Memo);
                Assert.NotEqual(0, m.Id);
            }
                              );

            // Get the second result
            var responseDto2 = responseData.Result.LastOrDefault();

            Assert.Equal(dtoForSave2.Name, responseDto2.Name);
            Assert.Equal(dtoForSave2.Name2, responseDto2.Name2);
            Assert.Equal(dtoForSave2.Code, responseDto2.Code);
            Assert.Equal(dtoForSave2.IsPublic, responseDto2.IsPublic);
            Assert.Collection(responseDto2.Permissions,
                              p =>
            {
                Assert.Equal(dtoForSave2.Permissions[0].Action, p.Action);
                Assert.Equal(dtoForSave2.Permissions[0].View, p.View);
                Assert.NotEqual(0, p.Id);
            }
                              );

            Assert.Empty(responseDto2.Members);

            Shared.Set("Role_SalesManager", responseDto);
            Shared.Set("Role_ChiefOfStaff", responseDto2);
        }
Beispiel #3
0
        public async Task CreateNewRole()
        {
            // Prepare a well formed entity
            var dtoForSave = new RoleForSave
            {
                EntityState = "Inserted",
                Name        = "Sales Manager",
                Name2       = "مدير المبيعات",
                Code        = "SM",
                IsPublic    = false,
                Permissions = new List <PermissionForSave>
                {
                    new PermissionForSave
                    {
                        EntityState = "Inserted",
                        ViewId      = "individuals",
                        Level       = "Read"
                    },
                    new PermissionForSave
                    {
                        EntityState = "Inserted",
                        ViewId      = "organizations",
                        Level       = "Update"
                    }
                },
                Members = new List <RoleMembershipForSave>
                {
                    new RoleMembershipForSave
                    {
                        EntityState = "Inserted",
                        UserId      = 1,
                        Memo        = "So Good"
                    }
                }
            };

            // Save it
            var dtosForSave = new List <RoleForSave> {
                dtoForSave
            };
            var response = await _client.PostAsJsonAsync($"{rolesURL}?expand=Permissions,Members", dtosForSave);

            // Assert that the response status code is a happy 200 OK
            _output.WriteLine(await response.Content.ReadAsStringAsync());
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);

            // Assert that the response is well-formed singleton
            var responseData = await response.Content.ReadAsAsync <EntitiesResponse <Role> >();

            Assert.Single(responseData.Data);

            // Assert that the result matches the saved entity
            Assert.Equal("Roles", responseData.CollectionName);

            var responseDto = responseData.Data.FirstOrDefault();

            Assert.NotNull(responseDto?.Id);
            Assert.Equal(dtoForSave.Name, responseDto.Name);
            Assert.Equal(dtoForSave.Name2, responseDto.Name2);
            Assert.Equal(dtoForSave.Code, responseDto.Code);
            Assert.Equal(dtoForSave.IsPublic, responseDto.IsPublic);
            Assert.Collection(responseDto.Permissions,
                              p =>
            {
                Assert.Equal(dtoForSave.Permissions[0].Level, p.Level);
                Assert.Equal(dtoForSave.Permissions[0].ViewId, p.ViewId);
                Assert.NotNull(p.Id);
            },
                              p =>
            {
                Assert.Equal(dtoForSave.Permissions[1].Level, p.Level);
                Assert.Equal(dtoForSave.Permissions[1].ViewId, p.ViewId);
                Assert.NotNull(p.Id);
            }
                              );

            Assert.Collection(responseDto.Members,
                              m =>
            {
                Assert.Equal(dtoForSave.Members[0].UserId, m.UserId);
                Assert.Equal(dtoForSave.Members[0].Memo, m.Memo);
                Assert.NotNull(m.Id);
            }
                              );

            _shared.SetItem("Role_SalesManager", responseDto);
        }