private async Task <string> MarkItemDoneAsync(HttpClient client, string page, string description)
        {
            using var serviceScope = _factory.Services.CreateScope();
            using var context      = serviceScope.ServiceProvider.GetRequiredService <SqliteDataContext>();
            var userItem = await context.UserItems.FirstOrDefaultAsync(u => u.Description == description);

            userItem.Should().NotBeNull();

            var userAccount = await context.UserAccounts.AddAsync(new UserAccount { AuthenticationUri = "http://test/user/1" });

            var userList = await context.UserLists.AddAsync(new UserList { Name = "Test list", UserAccount = userAccount.Entity });

            await context.SaveChangesAsync();

            _userList = userList.Entity;

            var doneAction      = $"/items/done/{userItem.UserItemId}";
            var validationToken = IntegrationTestWebApplicationFactory.GetFormValidationToken(page, doneAction);

            using var response = await client.PostAsync(doneAction, new FormUrlEncodedContent (new[] {
                KeyValuePair.Create("__RequestVerificationToken", validationToken)
            }));

            response.StatusCode.Should().Be(HttpStatusCode.OK);
            return(await response.Content.ReadAsStringAsync());
        }
        private async Task <string> RedoAsync(HttpClient client, string page)
        {
            const string redoAction      = "/history/redo";
            var          validationToken = IntegrationTestWebApplicationFactory.GetFormValidationToken(page, redoAction);

            using var response = await client.PostAsync(redoAction, new FormUrlEncodedContent (new[] {
                KeyValuePair.Create("__RequestVerificationToken", validationToken)
            }));

            response.StatusCode.Should().Be(HttpStatusCode.OK);
            return(await response.Content.ReadAsStringAsync());
        }
        private async Task <string> AddItemAsync(HttpClient client, string page, string description)
        {
            var addAction       = "/items/add";
            var validationToken = IntegrationTestWebApplicationFactory.GetFormValidationToken(page, addAction);

            using var response = await client.PostAsync(addAction, new FormUrlEncodedContent (new[] {
                KeyValuePair.Create("__RequestVerificationToken", validationToken),
                KeyValuePair.Create("list", _userList.UserListId.ToString()),
                KeyValuePair.Create("description", description)
            }));

            response.StatusCode.Should().Be(HttpStatusCode.OK);
            return(await response.Content.ReadAsStringAsync());
        }
Esempio n. 4
0
        public async Task Marking_due_item_as_done()
        {
            using var client = _factory.CreateAuthenticatedClient();
            var response = await client.GetAsync("/");

            response.StatusCode.Should().Be(HttpStatusCode.OK);
            var responseContent = await response.Content.ReadAsStringAsync();

            responseContent.Should().Contain("Logout")
            .And.Contain("1 overdue and 1 due today (2)")
            .And.Contain("All (3)")
            .And.Contain("All upcoming (2)")
            .And.Contain("Due yesterday", Exactly.Once())
            .And.Contain("Due today", Exactly.Once());

            var item = await GetUserItemWithDescriptionAsync("Test item 2");

            item.NextDueDate.Should().Be(DateTime.Today);
            item.LastUpdateDateTime.Should().BeNull();
            var doneAction      = $"/items/done/{item.UserItemId}";
            var validationToken = IntegrationTestWebApplicationFactory.GetFormValidationToken(responseContent, doneAction);

            var beforeEdit = DateTime.UtcNow;

            response = await client.PostAsync(doneAction, new FormUrlEncodedContent(new[] { KeyValuePair.Create("__RequestVerificationToken", validationToken) }));

            response.StatusCode.Should().Be(HttpStatusCode.OK);
            responseContent = await response.Content.ReadAsStringAsync();

            responseContent.Should().Contain("Logout")
            .And.Contain("1 overdue (1)")
            .And.Contain("All (2)")
            .And.Contain("All upcoming (1)")
            .And.Contain("Due yesterday", Exactly.Once());
            item = await GetUserItemWithDescriptionAsync("Test item 2");

            item.NextDueDate.Should().Be(DateTime.Today);
            item.CompletedDateTime.Should().BeAfter(beforeEdit);
            item.LastUpdateDateTime.Should().BeAfter(beforeEdit);
        }