public async Task Should_display_expected_items()
        {
            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("Test list (1)")
            .And.Contain("Test item 1")
            .And.Contain("Test item 2")
            .And.Contain("Test item 3")
            .And.Contain("Due yesterday")
            .And.Contain("Repeats every day")
            .And.Contain("Due today");
        }
        public async Task Should_add_two_items_then_mark_one_as_done_then_undo_all_then_redo_all()
        {
            var fixture = new Fixture();
            var firstTaskDescription  = fixture.Create <string>();
            var secondTaskDescription = fixture.Create <string>();

            using var client   = _factory.CreateAuthenticatedClient();
            using var response = await client.GetAsync("/");

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

            responseContent.Should().Contain("Logout")
            .And.Contain("All (0)")
            .And.Contain("All upcoming (0)")
            .And.Contain("Test list (0)")
            .And.NotContain("Undo")
            .And.NotContain("Redo");

            responseContent = await AddItemAsync(client, responseContent, firstTaskDescription);

            responseContent.Should().Contain("All (1)")
            .And.Contain("All upcoming (0)")
            .And.Contain("Test list (1)")
            .And.Contain(firstTaskDescription)
            .And.Contain("Undo")
            .And.NotContain("Redo");

            responseContent = await AddItemAsync(client, responseContent, secondTaskDescription);

            responseContent.Should().Contain("All (2)")
            .And.Contain("All upcoming (0)")
            .And.Contain("Test list (2)")
            .And.Contain(firstTaskDescription)
            .And.Contain(secondTaskDescription)
            .And.Contain("Undo")
            .And.NotContain("Redo");

            responseContent = await MarkItemDoneAsync(client, responseContent, firstTaskDescription);

            responseContent.Should().Contain("All (1)")
            .And.Contain("All upcoming (0)")
            .And.Contain("Test list (1)")
            .And.Contain(secondTaskDescription)
            .And.Contain("Undo")
            .And.NotContain("Redo");

            responseContent = await UndoAsync(client, responseContent);

            responseContent.Should().Contain("All (2)")
            .And.Contain("All upcoming (0)")
            .And.Contain("Test list (2)")
            .And.Contain(firstTaskDescription)
            .And.Contain(secondTaskDescription)
            .And.Contain("Undo")
            .And.Contain("Redo");

            responseContent = await UndoAsync(client, responseContent);

            responseContent.Should().Contain("All (1)")
            .And.Contain("All upcoming (0)")
            .And.Contain("Test list (1)")
            .And.Contain(firstTaskDescription)
            .And.NotContain(secondTaskDescription)
            .And.Contain("Undo")
            .And.Contain("Redo");

            responseContent = await UndoAsync(client, responseContent);

            responseContent.Should().Contain("All (0)")
            .And.Contain("All upcoming (0)")
            .And.Contain("Test list (0)")
            .And.NotContain(firstTaskDescription)
            .And.NotContain(secondTaskDescription)
            .And.NotContain("Undo")
            .And.Contain("Redo");

            responseContent = await RedoAsync(client, responseContent);

            responseContent.Should().Contain("All (1)")
            .And.Contain("All upcoming (0)")
            .And.Contain("Test list (1)")
            .And.Contain(firstTaskDescription)
            .And.NotContain(secondTaskDescription)
            .And.Contain("Undo")
            .And.Contain("Redo");

            responseContent = await RedoAsync(client, responseContent);

            responseContent.Should().Contain("All (2)")
            .And.Contain("All upcoming (0)")
            .And.Contain("Test list (2)")
            .And.Contain(firstTaskDescription)
            .And.Contain(secondTaskDescription)
            .And.Contain("Undo")
            .And.Contain("Redo");

            responseContent = await RedoAsync(client, responseContent);

            responseContent.Should().Contain("All (1)")
            .And.Contain("All upcoming (0)")
            .And.Contain("Test list (1)")
            .And.NotContain(firstTaskDescription)
            .And.Contain(secondTaskDescription)
            .And.Contain("Undo")
            .And.NotContain("Redo");
        }