Exemplo n.º 1
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();
        }
Exemplo n.º 2
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();
        }
Exemplo n.º 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();
        }
Exemplo n.º 4
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();
        }
Exemplo n.º 5
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();
        }
        public void ApplicationUserNoArgumentConstructor_Getter_Matches()
        {
            // Arrange
            // Act
            var user = new ApplicationUser
            {
                Id           = "18a86ba8-defd-4075-b822-020d4cc877e2",
                Name         = "Hans Gruber",
                Email        = "*****@*****.**",
                UserName     = "******",
                PasswordHash = "AxvfcNXm$c3968c55f3cb65f662ec29fec1b4dc5ef605e31de2bc0690f18de659609476e3",
                Todos        = new HashSet <Todo> {
                    MockTodos.Get(0), MockTodos.Get(1)
                }
            };
            var todoIds = user.Todos.Select(y => y.Id).ToHashSet();

            // Assert
            Assert.Equal("18a86ba8-defd-4075-b822-020d4cc877e2", user.Id);
            Assert.Equal("*****@*****.**", user.Email);
            Assert.Equal("*****@*****.**", user.UserName);
            Assert.Equal("Hans Gruber", user.Name);
            Assert.Equal("AxvfcNXm$c3968c55f3cb65f662ec29fec1b4dc5ef605e31de2bc0690f18de659609476e3", user.PasswordHash);

            Assert.Equal(2, user.Todos.Count);
            Assert.Equal(2, todoIds.Count);
            Assert.Contains(MockTodos.Get(0).Id, todoIds);
            Assert.Contains(MockTodos.Get(1).Id, todoIds);
        }
Exemplo n.º 7
0
        public async Task RemoveTodoByIdAsync_NonExistingUser_TodoNotFoundException()
        {
            // Arrange
            const string userId = "c54a85fa-ca7c-49d7-b830-6b07ea49cfa8";
            var          todoId = MockTodos.Get(3).Id;

            // Act
            // Assert
            await Assert.ThrowsAsync <TodoNotFoundException>(() => _service.RemoveTodoByIdAsync(todoId, userId));
        }
Exemplo n.º 8
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));
        }
Exemplo n.º 9
0
        public void TodoDtoEntityConstructor_Getter_Matches()
        {
            // Arrange
            var entity = MockTodos.Get(18);

            // Act
            var todo = new TodoDto(entity);

            // Assert
            Assert.Equal(entity.Id, todo.Id);
            Assert.Equal(entity.Description, todo.Description);
            Assert.Equal(entity.Due, todo.Due);
        }
Exemplo n.º 10
0
        public async Task Delete_NoToken_Unauthorized()
        {
            // Arrange
            var todo = MockTodos.Get(0);
            var path = $"{Routes.TodoRoute}/{todo.Id}";

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

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

            // Tear down
            _endSystems.Dispose();
        }
Exemplo n.º 11
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();
        }
Exemplo n.º 12
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);
        }
Exemplo n.º 13
0
        public void TodoViewModelEdit_Getter_Matches()
        {
            // Arrange
            var viewModel = MockEditTodoViewModel.Get(0);

            // Act
            var todo = MockTodos.Get(3);

            todo.Edit(viewModel);

            // Assert
            Assert.Equal(viewModel.Id, todo.Id);
            Assert.Equal(viewModel.Due, todo.Due);
            Assert.Equal(viewModel.Description, todo.Description);
        }
Exemplo n.º 14
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();
        }
Exemplo n.º 15
0
        public async Task EditTodoAsync_NonExistingUser_TodoNotFoundException()
        {
            // Arrange
            const string userId = "c54a85fa-ca7c-49d7-b830-6b07ea49cfa8";
            var          todo   = MockTodos.Get(3);
            var          model  = new EditTodoViewModel
            {
                Id          = todo.Id,
                Due         = todo.Due,
                Description = todo.Description
            };

            // Act
            // Assert
            await Assert.ThrowsAsync <TodoNotFoundException>(() => _service.EditTodoAsync(model, userId));
        }
Exemplo n.º 16
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();
        }
        public void ApplicationUser_Setter_Modifies()
        {
            // Arrange
            var user = MockApplicationUsers.Get(0);

            // Act
            user.Name  = "Snake Plissken";
            user.Todos = new HashSet <Todo> {
                MockTodos.Get(5)
            };
            var todos = user.Todos.SingleOrDefault();

            // Assert
            Assert.Equal("Snake Plissken", user.Name);
            Assert.Single(user.Todos);
            Assert.NotNull(todos);
            Assert.Equal(MockTodos.Get(5).Id, todos.Id);
        }
Exemplo n.º 18
0
        public void Todo_Setter_Modifies()
        {
            // Arrange
            var todo = MockTodos.Get(7);

            // Act
            todo.Id          = 44;
            todo.Due         = new DateTime(2000, 3, 15, 18, 19, 20);
            todo.Description = "Bring up the wolf's head";
            todo.Owner       = MockApplicationUsers.Get(0);

            // Assert
            Assert.Equal(44, todo.Id);
            Assert.Equal(new DateTime(2000, 3, 15, 18, 19, 20), todo.Due);
            Assert.Equal("Bring up the wolf's head", todo.Description);
            Assert.Equal(MockApplicationUsers.Get(0).Id, todo.Owner.Id);
            Assert.Equal(MockApplicationUsers.Get(0).Name, todo.Owner.Name);
            Assert.Equal(MockApplicationUsers.Get(0).Email, todo.Owner.Email);
            Assert.Equal(MockApplicationUsers.Get(0).UserName, todo.Owner.UserName);
            Assert.Equal(MockApplicationUsers.Get(0).PasswordHash, todo.Owner.PasswordHash);
        }
Exemplo n.º 19
0
        public async Task GetAllTodos_UserHasTokenValidQuery_OkAndFilteredDtoArray()
        {
            // Arrange
            var user  = MockApplicationUsers.Get(4);
            var todos = MockTodos
                        .GetAll()
                        .Where(w => w.Owner.Id == user.Id)
                        .OrderBy(w => w.Due)
                        .ToArray();

            Assert.True(todos.Length > 1);
            var filterDate = todos[0].Due.Date;

            Assert.NotEqual(todos[0].Due.Date, todos[1].Due.Date);
            var filteredTodos = MockTodos
                                .GetAll()
                                .Where(w => w.Owner.Id == user.Id && w.Due.Date == filterDate)
                                .OrderBy(w => w.Due)
                                .ToArray();

            Assert.NotEqual(todos.Length, filteredTodos.Length);
            var path  = $"{Routes.TodoRoute}?year={filterDate.Year}&month={filterDate.Month}&day={filterDate.Day}";
            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);
            Assert.NotEqual(todos.Length, dtos.Length);
            CheckOrderAndEqual(filteredTodos, dtos);

            // Tear down
            _endSystems.Dispose();
        }
Exemplo n.º 20
0
        public async Task Delete_NonExistingToken_NotFound()
        {
            // Arrange
            var user  = MockApplicationUsers.Get(7);
            var token = await GetToken(user);

            const int nonExistingTokenId = 0;

            Assert.DoesNotContain(nonExistingTokenId, MockTodos.GetAll().Select(w => w.Id).ToHashSet());
            var path = $"{Routes.TodoRoute}/{nonExistingTokenId}";

            _endSystems.SetBearerToken(token);

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

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

            // Tear down
            _endSystems.Dispose();
        }
Exemplo n.º 21
0
        public async Task CreateTodoAsync_ExistingUser_IdOfNewlyCreatedTodo()
        {
            // Arrange
            var userId = MockApplicationUsers.Get(4).Id;
            var model  = new CreateTodoViewModel
            {
                Description = "Get a cone from Milkcraft",
                Due         = new DateTime(2019, 5, 1, 12, 0, 0)
            };
            var expectedId = MockTodos.FirstId + MockTodos.GetAll().Count();

            // Act
            var id = await _service.CreateTodoAsync(model, userId);

            var todo = _ctx.Todo.SingleOrDefault(z => z.Id == expectedId && z.Owner.Id == userId);

            // Assert
            Assert.Equal(expectedId, id);
            Assert.NotNull(todo);
            Assert.Equal("Get a cone from Milkcraft", todo.Description);
            Assert.Equal(new DateTime(2019, 5, 1, 12, 0, 0), todo.Due);
        }
Exemplo n.º 22
0
        public async Task Delete_TokenNotOwnedByUser_NotFound()
        {
            // Arrange
            var user  = MockApplicationUsers.Get(7);
            var token = await GetToken(user);

            var todoNotOwnedByUser = MockTodos
                                     .GetAll()
                                     .FirstOrDefault(w => w.Owner.Id != user.Id);

            Assert.NotNull(todoNotOwnedByUser);
            var path = $"{Routes.TodoRoute}/{todoNotOwnedByUser.Id}";

            _endSystems.SetBearerToken(token);

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

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

            // Tear down
            _endSystems.Dispose();
        }