Example #1
0
    public async Task Update_Should_Update_Todo_List_From_Database()
    {
        // Arrange
        var context = Host.Services.GetRequiredService <DatabaseContext>();

        var user = await context.Users.Where(u => u.Email == UserConstants.DefaultUserDb.Email).FirstOrDefaultAsync();

        var todoList = Builder <TodoList> .CreateNew()
                       .With(tl => tl.Id        = Guid.NewGuid())
                       .With(tl => tl.CreatedBy = user.Id)
                       .Build();

        var todoListFromDatabase = (await context.TodoLists.AddAsync(todoList)).Entity;

        await((DbContext)context).SaveChangesAsync();

        var updateTodoListModel = Builder <UpdateTodoListModel> .CreateNew()
                                  .With(utl => utl.Title = "UpdateTodoListTitleIntegration").Build();

        // Act
        var apiResponse = await Client.PutAsync($"/api/todoLists/{todoListFromDatabase.Id}",
                                                new JsonContent(updateTodoListModel));

        // Assert
        context = (await GetNewHostAsync()).Services.GetRequiredService <DatabaseContext>();
        var response = await ResponseHelper.GetApiResultAsync <UpdateTodoListResponseModel>(apiResponse);

        var updatedTodoListFromDatabase = await context.TodoLists
                                          .Where(tl => tl.Id == response.Result.Id)
                                          .FirstOrDefaultAsync();

        CheckResponse.Succeeded(response);
        updatedTodoListFromDatabase.Should().NotBeNull();
        updatedTodoListFromDatabase.Title.Should().Be(updateTodoListModel.Title);
    }
Example #2
0
    public async Task Get_Todo_Lists_Should_Return_All_Todo_Lists_For_Specified_User_From_Database()
    {
        // Arrange
        var context = Host.Services.GetRequiredService <DatabaseContext>();

        var user = await context.Users.Where(u => u.Email == UserConstants.DefaultUserDb.Email)
                   .FirstOrDefaultAsync();

        context.TodoLists.RemoveRange(context.TodoLists.ToList());

        var todoLists = Builder <TodoList> .CreateListOfSize(10).All()
                        .With(tl => tl.Id        = Guid.NewGuid())
                        .With(tl => tl.CreatedBy = user.Id)
                        .Build();

        var todoListsNotBelongToTheUser = Builder <TodoList> .CreateListOfSize(10).All()
                                          .With(tl => tl.Id        = Guid.NewGuid())
                                          .With(tl => tl.CreatedBy = Guid.NewGuid().ToString())
                                          .Build();

        await context.TodoLists.AddRangeAsync(todoLists);

        await context.TodoLists.AddRangeAsync(todoListsNotBelongToTheUser);

        await((DbContext)context).SaveChangesAsync();

        // Act
        var apiResponse = await Client.GetAsync("/api/todoLists");

        // Assert
        var response = await ResponseHelper.GetApiResultAsync <IEnumerable <TodoListResponseModel> >(apiResponse);

        CheckResponse.Succeeded(response);
        response.Result.Should().HaveCount(10);
    }
    public async Task Create_Should_Add_TodoItem_In_Database()
    {
        // Arrange
        var context = Host.Services.GetRequiredService <DatabaseContext>();

        var user = await context.Users.Where(u => u.Email == UserConstants.DefaultUserDb.Email).FirstOrDefaultAsync();

        var todoListFromDatabase = Builder <TodoList> .CreateNew().With(tl => tl.Id = Guid.NewGuid())
                                   .With(tl => tl.CreatedBy = user.Id).Build();

        await context.TodoLists.AddAsync(todoListFromDatabase);

        await context.SaveChangesAsync();

        var createTodoItemModel = Builder <CreateTodoItemModel> .CreateNew()
                                  .With(cti => cti.TodoListId = todoListFromDatabase.Id).Build();

        // Act
        var apiResponse = await Client.PostAsync("/api/todoItems", new JsonContent(createTodoItemModel));

        // Assert
        var response =
            JsonConvert.DeserializeObject <ApiResult <CreateTodoItemResponseModel> >(
                await apiResponse.Content.ReadAsStringAsync());
        var todoItemFromDatabase =
            await context.TodoItems.Where(ti => ti.Id == response.Result.Id).FirstOrDefaultAsync();

        CheckResponse.Succeeded(response);
        todoItemFromDatabase.Should().NotBeNull();
        todoItemFromDatabase.Title.Should().Be(createTodoItemModel.Title);
        todoItemFromDatabase.List.Id.Should().Be(todoListFromDatabase.Id);
    }
Example #4
0
    public async Task Delete_Should_Delete_Todo_List_From_Database()
    {
        // Arrange
        var context = Host.Services.GetRequiredService <DatabaseContext>();

        var user = await context.Users.Where(u => u.Email == "*****@*****.**").FirstOrDefaultAsync();

        var todoList = Builder <TodoList> .CreateNew()
                       .With(tl => tl.Id        = Guid.NewGuid())
                       .With(tl => tl.CreatedBy = user.Id)
                       .Build();

        var todoListFromDatabase = (await context.TodoLists.AddAsync(todoList)).Entity;

        await context.SaveChangesAsync();

        // Act
        var apiResponse = await Client.DeleteAsync($"/api/todoLists/{todoListFromDatabase.Id}");

        // Assert
        var response = await ResponseHelper.GetApiResultAsync <BaseResponseModel>(apiResponse);

        var updatedTodoListFromDatabase =
            await context.TodoLists.Where(tl => tl.Id == response.Result.Id).FirstOrDefaultAsync();

        CheckResponse.Succeeded(response);
        updatedTodoListFromDatabase.Should().BeNull();
    }
    public async Task Delete_Should_Delete_Todo_Item_From_Database()
    {
        // Arrange
        var context = Host.Services.GetRequiredService <DatabaseContext>();

        var user = await context.Users.Where(u => u.Email == UserConstants.DefaultUserDb.Email).FirstOrDefaultAsync();

        var todoItemFromDatabase = Builder <TodoItem> .CreateNew().With(ti => ti.Id = Guid.NewGuid())
                                   .With(ti => ti.CreatedBy = user.Id).Build();

        var todoListFromDatabase = Builder <TodoList> .CreateNew().With(tl => tl.Id = Guid.NewGuid())
                                   .With(tl => tl.CreatedBy = user.Id).Build();

        todoListFromDatabase.Items.Add(todoItemFromDatabase);

        await context.TodoLists.AddAsync(todoListFromDatabase);

        await context.SaveChangesAsync();

        // Act
        var apiResponse = await Client.DeleteAsync($"/api/todoItems/{todoItemFromDatabase.Id}");

        // Assert
        var response =
            JsonConvert.DeserializeObject <ApiResult <BaseResponseModel> >(await apiResponse.Content.ReadAsStringAsync());
        var deletedTodoListFromDatabase =
            await context.TodoItems.Where(ti => ti.Id == response.Result.Id).FirstOrDefaultAsync();

        CheckResponse.Succeeded(response);
        deletedTodoListFromDatabase.Should().BeNull();
    }
Example #6
0
    public async Task ChangePassword_Should_Update_User_Password_If_OldPassword_And_NewPassword_Are_Ok()
    {
        // Arrange
        var user = Builder <ApplicationUser> .CreateNew()
                   .With(u => u.UserName       = "******")
                   .With(u => u.Email          = "*****@*****.**")
                   .With(u => u.EmailConfirmed = true)
                   .Build();

        var userManager = Host.Services.GetRequiredService <UserManager <ApplicationUser> >();

        await userManager.CreateAsync(user, "Password.1!");

        var changePasswordModel = Builder <ChangePasswordModel> .CreateNew()
                                  .With(cu => cu.OldPassword = "******")
                                  .With(cu => cu.NewPassword = "******")
                                  .Build();

        // Act
        var apiResponse =
            await Client.PutAsync($"/api/users/{user.Id}/changePassword", new JsonContent(changePasswordModel));

        // Assert
        apiResponse.StatusCode.Should().Be(HttpStatusCode.OK);
        var response = await ResponseHelper.GetApiResultAsync <BaseResponseModel>(apiResponse);

        CheckResponse.Succeeded(response);
        response.Result.Id.Should().Be(user.Id);
    }
Example #7
0
    public async Task ConfirmEmail_Should_Update_User_Status()
    {
        // Arrange
        var user = Builder <ApplicationUser> .CreateNew()
                   .With(u => u.UserName = "******")
                   .With(u => u.Email    = "*****@*****.**")
                   .Build();

        var context = (await GetNewHostAsync()).Services.GetRequiredService <DatabaseContext>();

        var userManager = Host.Services.GetRequiredService <UserManager <ApplicationUser> >();

        await userManager.CreateAsync(user, "Password.1!");

        var token = await userManager.GenerateEmailConfirmationTokenAsync(user);

        var confirmEmailModel = Builder <ConfirmEmailModel> .CreateNew()
                                .With(ce => ce.UserId = user.Id)
                                .With(ce => ce.Token  = token)
                                .Build();

        // Act
        var apiResponse = await Client.PostAsync("/api/users/confirmEmail", new JsonContent(confirmEmailModel));

        // Assert
        var response = await ResponseHelper.GetApiResultAsync <ConfirmEmailResponseModel>(apiResponse);

        var userFromDatabase = await context.Users.FirstOrDefaultAsync(u => u.Id == user.Id);

        CheckResponse.Succeeded(response);
        response.Result.Confirmed.Should().BeTrue();
        userFromDatabase.EmailConfirmed.Should().BeTrue();
    }
Example #8
0
    public async Task Login_Should_Return_User_Information_And_Token()
    {
        // Arrange

        // Act
        var apiResponse = await Client.GetAsync("/api/WeatherForecast");

        // Assert
        var response = await ResponseHelper.GetApiResultAsync <IEnumerable <WeatherForecastResponseModel> >(apiResponse);

        CheckResponse.Succeeded(response);
        response.Result.Should().HaveCount(5);
    }
    public async Task GetAllByListId_Should_Return_All_Todo_Items_From_Specific_List()
    {
        // Arrange
        var context = Host.Services.GetRequiredService <DatabaseContext>();

        var user = await context.Users.Where(u => u.Email == UserConstants.DefaultUserDb.Email).FirstOrDefaultAsync();

        var todoListFromDatabase = Builder <TodoList> .CreateNew().With(tl => tl.Id = Guid.NewGuid())
                                   .With(tl => tl.CreatedBy = user.Id).Build();

        todoListFromDatabase.Items.AddRange(Builder <TodoItem> .CreateListOfSize(25).All()
                                            .With(ti => ti.Id = Guid.NewGuid()).Build());

        var todoListFromAnotherUsers = Builder <TodoList> .CreateListOfSize(10).All()
                                       .With(tl => tl.Id        = Guid.NewGuid())
                                       .With(tl => tl.CreatedBy = Guid.NewGuid().ToString())
                                       .Build();

        foreach (var todoList in todoListFromAnotherUsers)
        {
            todoList.Items.AddRange(Builder <TodoItem> .CreateListOfSize(10).All().With(ti => ti.Id = Guid.NewGuid())
                                    .Build());
        }

        await context.TodoLists.AddAsync(todoListFromDatabase);

        await context.TodoLists.AddRangeAsync(todoListFromAnotherUsers);

        await context.SaveChangesAsync();

        // Act
        var apiResponse = await Client.GetAsync($"/api/todoLists/{todoListFromDatabase.Id}/todoItems");

        // Assert
        var response =
            JsonConvert.DeserializeObject <ApiResult <IEnumerable <TodoItemResponseModel> > >(
                await apiResponse.Content.ReadAsStringAsync());

        CheckResponse.Succeeded(response);
        response.Result.Should().NotBeNullOrEmpty();
        response.Result.Should().HaveCount(25);
        response.Result.Should().BeEquivalentTo(todoListFromDatabase.Items, options => options.Including(tl => tl.Id));
    }
Example #10
0
    public async Task Login_Should_Return_User_Information_And_Token()
    {
        // Arrange
        var loginUserModel = Builder <LoginUserModel> .CreateNew()
                             .With(cu => cu.Username = UserConstants.DefaultUserDb.Username)
                             .With(cu => cu.Password = UserConstants.DefaultUserDb.Password)
                             .Build();

        // Act
        var apiResponse = await Client.PostAsync("/api/users/authenticate", new JsonContent(loginUserModel));

        // Assert
        var response = await ResponseHelper.GetApiResultAsync <LoginResponseModel>(apiResponse);

        CheckResponse.Succeeded(response);
        response.Result.Username.Should().Be(UserConstants.DefaultUserDb.Username);
        response.Result.Email.Should().Be(UserConstants.DefaultUserDb.Email);
        response.Result.Token.Should().NotBeNullOrEmpty();
    }
Example #11
0
    public async Task Create_Should_Add_TodoList_In_Database()
    {
        // Arrange
        var context = Host.Services.GetRequiredService <DatabaseContext>();

        var createTodoListModel = Builder <CreateTodoListModel> .CreateNew()
                                  .Build();

        // Act
        var apiResponse = await Client.PostAsync("/api/todoLists", new JsonContent(createTodoListModel));

        // Assert
        var response = await ResponseHelper.GetApiResultAsync <CreateTodoListResponseModel>(apiResponse);

        var todoListFromDatabase =
            await context.TodoLists.Where(u => u.Id == response.Result.Id).FirstOrDefaultAsync();

        CheckResponse.Succeeded(response);
        todoListFromDatabase.Should().NotBeNull();
        todoListFromDatabase.Title.Should().Be(createTodoListModel.Title);
    }
Example #12
0
    public async Task Create_User_Should_Add_User_To_Database()
    {
        // Arrange
        var context = Host.Services.GetRequiredService <DatabaseContext>();

        var createModel = Builder <CreateUserModel> .CreateNew()
                          .With(cu => cu.Email    = "*****@*****.**")
                          .With(cu => cu.Username = "******")
                          .With(cu => cu.Password = "******")
                          .Build();

        // Act
        var apiResponse = await Client.PostAsync("/api/users", new JsonContent(createModel));

        // Assert
        apiResponse.StatusCode.Should().Be(HttpStatusCode.OK);
        var response = await ResponseHelper.GetApiResultAsync <CreateUserResponseModel>(apiResponse);

        CheckResponse.Succeeded(response);
        context.Users.Should().Contain(u => u.Id == response.Result.Id.ToString());
    }