2026-10-06 01:21:41 +02:00
|
|
|
using decePubClient.E2E.Support;
|
|
|
|
|
|
|
|
|
|
using Microsoft.Playwright;
|
|
|
|
|
|
|
|
|
|
namespace decePubClient.E2E.Actions
|
|
|
|
|
{
|
|
|
|
|
// Coming back to the feed from a thread shows it as it was left, with its older pages, without reading it again
|
|
|
|
|
// (Services/FeedMemory.cs).
|
|
|
|
|
public sealed class FeedMemoryTests(Browser browser)
|
|
|
|
|
{
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task The_feed_comes_back_from_a_thread_as_it_was_left()
|
|
|
|
|
{
|
|
|
|
|
var persona = Pasture.Personas().First();
|
|
|
|
|
await using var session = await SignIn.As(browser, persona);
|
|
|
|
|
var page = session.Page;
|
|
|
|
|
await Results.Cell("client.action.feed-memory", "privapub", persona.UserName, async () =>
|
|
|
|
|
{
|
|
|
|
|
await page.GotoAsync($"{Pasture.Site}/");
|
|
|
|
|
await page.EvaluateAsync("() => localStorage.removeItem('FeedFilter')");
|
|
|
|
|
await page.GotoAsync($"{Pasture.Site}/");
|
|
|
|
|
var feed = page.Locator("[data-feed-count]");
|
|
|
|
|
await page.Locator("article[data-uri]").First.WaitForAsync(new() { Timeout = 30000 });
|
|
|
|
|
// an older page too when there is one, so there is more to keep than the first
|
|
|
|
|
await page.EvalOnSelectorAsync("#feed-scroll", "root => root.scrollTop = root.scrollHeight");
|
|
|
|
|
await Pasture.Eventually(async () => int.Parse(await feed.GetAttributeAsync("data-feed-count") ?? "0") > 20, 10);
|
|
|
|
|
var count = int.Parse(await feed.GetAttributeAsync("data-feed-count") ?? "0");
|
|
|
|
|
|
|
|
|
|
var homeReads = 0;
|
|
|
|
|
page.Request += (_, request) =>
|
|
|
|
|
{
|
|
|
|
|
if (request.Url.Contains("/api/v1/timelines/home") && !request.Url.Contains("min_id"))
|
|
|
|
|
homeReads++;
|
|
|
|
|
};
|
|
|
|
|
await page.EvalOnSelectorAsync("#feed-scroll", "root => root.scrollTop = 0");
|
2026-10-07 00:20:56 +02:00
|
|
|
await page.Locator("article[data-uri] footer a[title='Expand']").First.ClickAsync();
|
2026-10-06 01:21:41 +02:00
|
|
|
await page.WaitForURLAsync("**/expand/**");
|
|
|
|
|
await page.GoBackAsync();
|
|
|
|
|
await page.Locator("article[data-uri]").First.WaitForAsync(new() { Timeout = 10000 });
|
|
|
|
|
|
|
|
|
|
Assert.True(int.Parse(await feed.GetAttributeAsync("data-feed-count") ?? "0") >= count, "the feed came back shorter than it was left");
|
|
|
|
|
Assert.Equal(0, homeReads);
|
|
|
|
|
await session.AssertGuards();
|
|
|
|
|
}, page);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|