コード例 #1
0
        public async Task Edit_NonExistingTodo_NotFound()
        {
            // Arrange
            var user  = MockApplicationUsers.Get(5);
            var token = await GetToken(user);

            var model = new EditTodoViewModel
            {
                Id          = 0,
                Due         = DateTime.Now,
                Description = "Intergalactic, planetary, planetary, intergalactic"
            };
            var body = JsonStringBuilder.EditTodoJsonBody(
                model.Description, model.Due.ToString(), model.Id.ToString());
            var          content = new StringContent(body);
            const string path    = Routes.TodoRoute;

            _endSystems.SetBearerToken(token);

            // Act
            var response = await _endSystems.Put(path, content);

            // Assert
            Assert.Equal(HttpStatusCode.NotFound, response.Code);

            // Tear down
            _endSystems.Dispose();
        }
コード例 #2
0
        public async Task GetTodo_UserDoesNotOwnTodo_NotFound()
        {
            // Arrange
            var  user = MockApplicationUsers.Get(3);
            Todo todo = null;

            for (var i = 0; i < 20; i++)
            {
                todo = MockTodos.Get(i);
                if (todo.Owner.Id != user.Id)
                {
                    break;
                }
            }
            Assert.NotNull(todo);
            var path  = $"{Routes.TodoRoute}/{todo.Id}";
            var token = await GetToken(user);

            _endSystems.SetBearerToken(token);

            // Act
            var response = await _endSystems.Get(path);

            // Assert
            Assert.Equal(HttpStatusCode.NotFound, response.Code);

            // Tear down
            _endSystems.Dispose();
        }
コード例 #3
0
        public async Task Edit_ExistingTodoButNotOwnedByTokenOwner_NotFound()
        {
            // Arrange
            var user       = MockApplicationUsers.Get(5);
            var todoToEdit = MockTodos.GetAll().FirstOrDefault(z => z.Owner.Id != user.Id);

            Assert.NotNull(todoToEdit);
            var token = await GetToken(user);

            var model = new EditTodoViewModel
            {
                Id          = todoToEdit.Id,
                Due         = DateTime.Now,
                Description = "Listen all of y'all it's a sabotage"
            };
            var body = JsonStringBuilder.EditTodoJsonBody(
                model.Description, model.Due.ToString(), model.Id.ToString());
            var content = new StringContent(body);
            var path    = Routes.TodoRoute;

            _endSystems.SetBearerToken(token);

            // Act
            var response = await _endSystems.Put(path, content);

            // Assert
            Assert.Equal(HttpStatusCode.NotFound, response.Code);

            // Tear down
            _endSystems.Dispose();
        }
コード例 #4
0
        public async Task Create_UserDoesExist_CreatedAtRoute()
        {
            // Arrange
            var user  = MockApplicationUsers.Get(8);
            var token = await GetToken(user);

            const string createPath = Routes.TodoRoute;

            _endSystems.SetBearerToken(token);
            var model = new CreateTodoViewModel
            {
                Description = "I am your doctor, when you need, want some coke? Have some weed",
                Due         = new DateTime(2000, 1, 1)
            };
            var body    = JsonStringBuilder.CreateTodoJsonBody(model.Description, model.Due.ToString());
            var content = new StringContent(body);

            // Act
            var createResponse = await _endSystems.Post(createPath, content);

            var location    = createResponse.Headers.Location.ToString();
            var getResponse = await _endSystems.Get(location);

            var dto = JsonStringSerializer.GetTodoDto(getResponse.Body);

            // Assert
            Assert.Equal(HttpStatusCode.Created, createResponse.Code);
            Assert.Equal(HttpStatusCode.OK, getResponse.Code);
            Assert.Equal(model.Description, dto.Description);
            Assert.Equal(model.Due, dto.Due);

            // Tear down
            _endSystems.Dispose();
        }
コード例 #5
0
        public async Task Delete_TokenOwnedByUser_NoContent()
        {
            // Arrange
            var user  = MockApplicationUsers.Get(5);
            var token = await GetToken(user);

            var todoOwnedByUser = MockTodos
                                  .GetAll()
                                  .FirstOrDefault(z => z.Owner.Id == user.Id);

            Assert.NotNull(todoOwnedByUser);
            _endSystems.SetBearerToken(token);
            var path = $"{Routes.TodoRoute}/{todoOwnedByUser.Id}";

            // Act
            var getResponse1 = await _endSystems.Get(path);

            var deleteResponse = await _endSystems.Delete(path);

            var getResponse2 = await _endSystems.Get(path);

            // Assert
            Assert.Equal(HttpStatusCode.OK, getResponse1.Code);
            Assert.Equal(HttpStatusCode.NoContent, deleteResponse.Code);
            Assert.Equal(HttpStatusCode.NotFound, getResponse2.Code);

            // Tear down
            _endSystems.Dispose();
        }
コード例 #6
0
        public async Task GetTodo_UserOwnsTodoAndBothExist_OkWithDto()
        {
            // Arrange
            var todo = MockTodos.Get(14);
            var user = MockApplicationUsers
                       .GetAll()
                       .SingleOrDefault(w => w.Id == todo.Owner.Id);
            var path  = $"{Routes.TodoRoute}/{todo.Id}";
            var token = await GetToken(user);

            _endSystems.SetBearerToken(token);

            // Act
            var response = await _endSystems.Get(path);

            var dto = JsonStringSerializer.GetTodoDto(response.Body);

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.Code);
            Assert.Equal(todo.Id, dto.Id);
            Assert.Equal(todo.Description, dto.Description);
            Assert.Equal(todo.Due, dto.Due);

            // Tear down
            _endSystems.Dispose();
        }
コード例 #7
0
        public async Task GetAllTodos_UserHasTokenNoQuery_OkAndDtoArray()
        {
            // Arrange
            var user  = MockApplicationUsers.Get(4);
            var todos = MockTodos
                        .GetAll()
                        .Where(w => w.Owner.Id == user.Id)
                        .OrderBy(w => w.Due)
                        .ToArray();
            var path  = Routes.TodoRoute;
            var token = await GetToken(user);

            _endSystems.SetBearerToken(token);

            // Act
            var response = await _endSystems.Get(path);

            var dtos = JsonStringSerializer.GetListOfTodoto(response.Body);

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.Code);
            CheckOrderAndEqual(todos, dtos);

            // Tear down
            _endSystems.Dispose();
        }
コード例 #8
0
        public async Task GetAllTodos_ListOfTodos_Ok()
        {
            // Arrange
            var service = new MockTodoService
            {
                MGetAllTodosOrderedByDueAsync = (year, month, day, userId) => new[]
                {
                    MockTodoDto.Get(0),
                    MockTodoDto.Get(1)
                }
            };
            var controller = new TodoController(service);

            MockClaims.AddUserIdClaim(controller, MockApplicationUsers.Get(5).Id);

            // Act
            var result = await controller.GetAllTodos() as OkObjectResult;

            var list = result?.Value as TodoDto[];

            // Assert
            Assert.NotNull(result);
            Assert.Equal(200, result.StatusCode);
            Assert.NotNull(list);
            Assert.Equal(2, list.Count());
            Assert.Equal(MockTodoDto.Get(0).Id, list[0].Id);
            Assert.Equal(MockTodoDto.Get(0).Due, list[0].Due);
            Assert.Equal(MockTodoDto.Get(0).Description, list[0].Description);
            Assert.Equal(MockTodoDto.Get(1).Id, list[1].Id);
            Assert.Equal(MockTodoDto.Get(1).Due, list[1].Due);
            Assert.Equal(MockTodoDto.Get(1).Description, list[1].Description);
        }
コード例 #9
0
        public async Task GetTodo_Existing_OkWithDto()
        {
            // Arrange
            var service = new MockTodoService
            {
                MGetTodoByIdAsync = (todoId, userId) => MockTodoDto.Get(0)
            };
            var controller = new TodoController(service);

            MockClaims.AddUserIdClaim(controller, MockApplicationUsers.Get(5).Id);
            const int tId = 10101;

            // Act
            var result = await controller.GetTodo(tId) as OkObjectResult;

            var dto = result?.Value as TodoDto;

            // Assert
            Assert.NotNull(result);
            Assert.Equal(200, result.StatusCode);
            Assert.NotNull(dto);
            Assert.Equal(MockTodoDto.Get(0).Id, dto.Id);
            Assert.Equal(MockTodoDto.Get(0).Due, dto.Due);
            Assert.Equal(MockTodoDto.Get(0).Description, dto.Description);
        }
コード例 #10
0
        public async Task GetAllUsersOrderedByNameAsync_AllInMockAndInOrder()
        {
            // Arrange
            var allIds = MockApplicationUsers.GetAll().Select(w => w.Id).ToHashSet();

            // Act
            var allUsers = (await _service.GetAllUsersOrderedByNameAsync()).ToArray();
            var dtoIds   = allUsers.Select(w => w.Id).ToHashSet();

            // Assert
            Assert.Equal(allIds.Count, dtoIds.Count);
            foreach (var id in dtoIds)
            {
                Assert.Contains(id, allIds);
            }
            var first = true;
            ApplicationUserDto last = null;

            foreach (var dto in allUsers)
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    Assert.True(string.Compare(dto.Name, last.Name, StringComparison.Ordinal) >= 0);
                }
                last = dto;
            }
        }
コード例 #11
0
        public async Task GetUserById_ExistingUser_Ok()
        {
            // Arrange
            var adminToRequest = MockApplicationUsers.Get(0);
            var userToFind     = MockApplicationUsers.Get(1);
            var expectedDto    = new ApplicationUserDto(userToFind);
            var path           = $"{Routes.UserRoute}/{userToFind.Id}";
            var token          = await GetToken(adminToRequest);

            _endSystems.SetBearerToken(token);

            // Act
            var response = await _endSystems.Get(path);

            var dto = JsonStringSerializer.GetApplicationUserDto(response.Body);

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.Code);
            Assert.Equal(expectedDto.Id, dto.Id);
            Assert.Equal(expectedDto.Email, dto.Email);
            Assert.Equal(expectedDto.Name, dto.Name);

            // Tear down
            _endSystems.Dispose();
        }
コード例 #12
0
        public async Task RemoveTodoByIdAsync_NonExistingTodo_TodoNotFoundException()
        {
            // Arrange
            var       userId = MockApplicationUsers.Get(0).Id;
            const int todoId = 0;

            // Act
            // Assert
            await Assert.ThrowsAsync <TodoNotFoundException>(() => _service.RemoveTodoByIdAsync(todoId, userId));
        }
コード例 #13
0
        public async Task GetTodoByIdAsync_NonExistingTodo_TodoNotFoundException()
        {
            // Arrange
            const int nonExistingId = 0;
            var       userId        = MockApplicationUsers.Get(4).Id;

            // Act
            // Assert
            await Assert.ThrowsAsync <TodoNotFoundException>(
                () => _service.GetTodoByIdAsync(nonExistingId, userId));
        }
コード例 #14
0
        public async Task GetAllTodosOrderedByDueAsync_InvalidFilterDay_EmptyList()
        {
            // Arrange
            var owner = MockApplicationUsers.Get(9);

            // Act
            var all = await _service.GetAllTodosOrderedByDueAsync("2000", "4", "A", owner.Id);

            // Assert
            Assert.Empty(all);
        }
コード例 #15
0
        public async Task GetTodoByIdAsync_UserDoesNotOwnTodo_TodoNotFoundException()
        {
            // Arrange
            var todo = MockTodos.Get(2);
            var user = MockApplicationUsers.GetAll().FirstOrDefault(w => w.Id != todo.Owner.Id);

            // Act
            // Assert
            Assert.NotNull(user);
            await Assert.ThrowsAsync <TodoNotFoundException>(
                () => _service.GetTodoByIdAsync(todo.Id, user.Id));
        }
コード例 #16
0
        public async Task Login_ExistingUserWrongPassword_LoginFailException()
        {
            // Arrange
            var credentials = new LoginViewModel
            {
                Email    = MockApplicationUsers.Get(6).Email,
                Password = "******"
            };

            // Act
            // Assert
            await Assert.ThrowsAsync <LoginFailException>(() => _service.Login(credentials));
        }
コード例 #17
0
        public void ApplicationUserDtoEntityConstructor_Getter_Matches()
        {
            // Arrange
            var entity = MockApplicationUsers.Get(8);

            // Act
            var dto = new ApplicationUserDto(entity);

            // Assert
            Assert.Equal(entity.Id, dto.Id);
            Assert.Equal(entity.Email, dto.Email);
            Assert.Equal(entity.Name, dto.Name);
        }
コード例 #18
0
        public async Task GetUserByIdAsync_ExistingUser_MatchingUserDto()
        {
            // Arrange
            var userToFind = MockApplicationUsers.Get(9);
            var id         = userToFind.Id;

            // Act
            var dto = await _service.GetUserByIdAsync(id);

            // Assert
            Assert.Equal(userToFind.Id, dto.Id);
            Assert.Equal(userToFind.Email, dto.Email);
            Assert.Equal(userToFind.Name, dto.Name);
        }
コード例 #19
0
        public async Task Register_ExistingUser_RegisterFailException()
        {
            // Arrange
            var oldUser     = MockApplicationUsers.Get(3);
            var credentials = new RegisterViewModel
            {
                Name     = oldUser.Name,
                Email    = oldUser.Email,
                Password = MockApplicationUsers.UniversalPassword
            };

            // Act
            // Assert
            await Assert.ThrowsAsync <RegisterFailException>(() => _service.Register(credentials));
        }
コード例 #20
0
        /// <summary>
        /// Fill the in memory database with our mock data.
        /// </summary>
        private void PopulateDatabaseWithMockData()
        {
            Roles.Add(MockRoles.Admin);
            Roles.Add(MockRoles.User);
            var allUsers = MockApplicationUsers.GetAll().ToArray();

            Users.AddRange(allUsers);
            SaveChanges();
            foreach (var user in allUsers)
            {
                UserRoles.Add(MockUserRoles.GetUserRoleForUser(user.Id));
            }
            Todo.AddRange(MockTodos.GetAll());
            SaveChanges();
        }
コード例 #21
0
        public async Task EditTodoAsync_NonExistingTodo_TodoNotFoundException()
        {
            // Arrange
            var userId = MockApplicationUsers.Get(0).Id;
            var model  = new EditTodoViewModel
            {
                Id          = 0,
                Due         = DateTime.Now,
                Description = "Take to the sewers, in a clown costume"
            };

            // Act
            // Assert
            await Assert.ThrowsAsync <TodoNotFoundException>(() => _service.EditTodoAsync(model, userId));
        }
コード例 #22
0
        public async Task GetTodoByIdAsync_UserOwnsTodo_TodoDto()
        {
            // Arrange
            var todo = MockTodos.Get(5);
            var user = MockApplicationUsers.GetAll().SingleOrDefault(w => w.Id == todo.Owner.Id);

            // Act
            Assert.NotNull(user);
            var dto = await _service.GetTodoByIdAsync(todo.Id, user.Id);

            // Assert
            Assert.Equal(todo.Id, dto.Id);
            Assert.Equal(todo.Description, dto.Description);
            Assert.Equal(todo.Due, dto.Due);
        }
コード例 #23
0
        public async Task GetUserById_NoToken_Unauthorized()
        {
            // Arrange
            var userToFind = MockApplicationUsers.Get(4);
            var path       = $"{Routes.UserRoute}/{userToFind.Id}";

            // Act
            var response = await _endSystems.Get(path);

            // Assert
            Assert.Equal(HttpStatusCode.Unauthorized, response.Code);

            // Tear down
            _endSystems.Dispose();
        }
コード例 #24
0
        public async Task Login_ExistingUserCorrectPassword_JwtToken()
        {
            // Arrange
            var user        = MockApplicationUsers.Get(4);
            var credentials = new LoginViewModel()
            {
                Email    = user.Email,
                Password = MockApplicationUsers.UniversalPassword
            };

            // Act
            var token = await _service.Login(credentials);

            // Assert
            CheckToken(token, user);
        }
コード例 #25
0
        /// <summary>
        /// Fills the database with mock data.
        /// </summary>
        /// <param name="db">The database to add to</param>
        private static void FillDatabase(AppDataContext db)
        {
            db.Roles.Add(MockRoles.Admin);
            db.Roles.Add(MockRoles.User);
            var allUsers = MockApplicationUsers.GetAll().ToArray();

            db.Users.AddRange(allUsers);
            db.SaveChanges();
            foreach (var user in allUsers)
            {
                db.UserRoles.Add(MockUserRoles.GetUserRoleForUser(user.Id));
            }

            db.Todo.AddRange(MockTodos.GetAll());
            db.SaveChanges();
        }
コード例 #26
0
        public async Task GetUserById_NonExistingUser_UserNotFoundException()
        {
            // Arrange
            var service = new MockUserService
            {
                MGetUserByIdAsync = (userId) => throw new UserNotFoundException()
            };
            var controller = new UserController(service);

            // Act
            var result = await controller.GetUserById(MockApplicationUsers.Get(1).Id) as NotFoundResult;

            // Assert
            Assert.NotNull(result);
            Assert.Equal(404, result.StatusCode);
        }
コード例 #27
0
        public async Task GetAllTodosOrderedByDueAsync_ValidFilter_OnlyWithGivenDates()
        {
            // Arrange
            var owner = MockApplicationUsers.Get(9);

            // Act
            var all = await _service.GetAllTodosOrderedByDueAsync("2019", "11", "5", owner.Id);

            // Assert
            foreach (var dto in all)
            {
                Assert.Equal(2019, dto.Due.Year);
                Assert.Equal(11, dto.Due.Month);
                Assert.Equal(5, dto.Due.Day);
            }
        }
コード例 #28
0
        public async Task GetAllTodosOrderedByDueAsync_MissingDayInFilter_AllDtosForOwner()
        {
            // Arrange
            var owner             = MockApplicationUsers.Get(9);
            var todosOwnedByOwner = _ctx.Todo.Where(w => w.Owner.Id == owner.Id).Select(z => z.Id).ToHashSet();

            // Act
            var all = (await _service.GetAllTodosOrderedByDueAsync("1999", "11", null, owner.Id)).ToArray();

            // Assert
            Assert.Equal(todosOwnedByOwner.Count, all.Length);
            foreach (var dto in all)
            {
                Assert.Contains(dto.Id, todosOwnedByOwner);
            }
        }
コード例 #29
0
        public async Task Edit_ExistingTodoOwnedByTokenOwner_Ok()
        {
            // Arrange
            var user       = MockApplicationUsers.Get(2);
            var todoToEdit = MockTodos.GetAll().LastOrDefault(z => z.Owner.Id == user.Id);

            Assert.NotNull(todoToEdit);
            var token = await GetToken(user);

            var model = new EditTodoViewModel
            {
                Id          = todoToEdit.Id,
                Due         = new DateTime(2014, 12, 12, 10, 11, 12),
                Description = "It's like a jungle sometimes - It makes me wonder how I keep from goin' under"
            };
            var body = JsonStringBuilder.EditTodoJsonBody(
                model.Description, model.Due.ToString(), model.Id.ToString());
            var content = new StringContent(body);

            _endSystems.SetBearerToken(token);
            var getPath = $"{Routes.TodoRoute}/{model.Id}";
            var putPath = Routes.TodoRoute;

            // Act
            var getResponse1 = await _endSystems.Get(getPath);

            var editResponse = await _endSystems.Put(putPath, content);

            var getResponse2 = await _endSystems.Get(getPath);

            var dtoBefore = JsonStringSerializer.GetTodoDto(getResponse1.Body);
            var dtoAfter  = JsonStringSerializer.GetTodoDto(getResponse2.Body);

            // Assert
            Assert.Equal(HttpStatusCode.OK, getResponse1.Code);
            Assert.Equal(HttpStatusCode.OK, editResponse.Code);
            Assert.Equal(HttpStatusCode.OK, getResponse2.Code);
            Assert.Equal(todoToEdit.Id, dtoBefore.Id);
            Assert.Equal(todoToEdit.Due, dtoBefore.Due);
            Assert.Equal(todoToEdit.Description, dtoBefore.Description);
            Assert.Equal(model.Id, dtoAfter.Id);
            Assert.Equal(model.Due, dtoAfter.Due);
            Assert.Equal(model.Description, dtoAfter.Description);

            // Tear down
            _endSystems.Dispose();
        }
コード例 #30
0
        public async Task RemoveTodoByIdAsync_ValidUserAndTodo_Removed()
        {
            // Arrange
            var user        = MockApplicationUsers.Get(4);
            var todo        = _ctx.Todo.FirstOrDefault(z => z.Owner.Id == user.Id);
            var ownedBefore = _ctx.Todo.Count(z => z.Owner.Id == user.Id);
            var foundBefore = _ctx.Todo.SingleOrDefault(z => z.Id == todo.Id) != null;

            // Act
            Assert.NotNull(todo);
            await _service.RemoveTodoByIdAsync(todo.Id, user.Id);

            // Assert
            Assert.True(foundBefore);
            Assert.Null(_ctx.Todo.SingleOrDefault(z => z.Id == todo.Id));
            Assert.Equal(ownedBefore - 1, _ctx.Todo.Count(z => z.Owner.Id == user.Id));
        }