using decePubClient.E2E.Support; using Microsoft.Playwright; namespace decePubClient.E2E.Mobile { // What phones get stays on phones: at 1440x900 with a mouse the controls keep daisyUI's sizes, measured on probes made // with the app's own classes, and the nav menu stays open beside the feed. [Trait("Category", "Mobile")] public sealed class DesktopUnchangedTests(Browser browser) { const string Probe = """ () => Object.fromEntries(["btn", "btn btn-sm", "btn btn-xs", "input", "input input-sm"].map(classes => { const el = document.createElement(classes.startsWith("input") ? "input" : "button") el.className = classes document.body.append(el) const height = el.getBoundingClientRect().height el.remove() return [classes, height] })) """; [Fact] public async Task Desktop_keeps_its_sizes() { var persona = Pasture.Personas().GroupBy(p => p.Root).OrderByDescending(g => g.Count()).First().First(); await using var session = await SignIn.As(browser, persona); var page = session.Page; await Results.Cell("client.mobile.desktop", "privapub", "desktop", async () => { Assert.False(await page.EvaluateAsync("() => matchMedia('(pointer: coarse)').matches"), "the desktop session has a coarse pointer"); var heights = await page.EvaluateAsync>(Probe); Assert.Equal(40, heights["btn"], 0.5); Assert.Equal(32, heights["btn btn-sm"], 0.5); Assert.Equal(24, heights["btn btn-xs"], 0.5); Assert.Equal(40, heights["input"], 0.5); Assert.Equal(32, heights["input input-sm"], 0.5); await Assertions.Expect(page.Locator("nav a.btn").First).ToBeVisibleAsync(); await session.AssertGuards(); }, page); } } }