Wait for a reordered space list to land before dragging again (#543)
This commit is contained in:
parent
f30081a2f7
commit
57177a0a88
1 changed files with 14 additions and 10 deletions
|
|
@ -13,6 +13,16 @@ const cachedFirstSpace = async (page: Page, pubkey: string) => {
|
||||||
return newest?.tags.find(tag => tag[0] === "r")?.[1]
|
return newest?.tags.find(tag => tag[0] === "r")?.[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A drop reorders the list in place and publishes a new room list behind it, so the order on screen
|
||||||
|
// is ahead of the one the app has settled on. Reading the next drag off that optimistic order is
|
||||||
|
// what made this spec fail under a full suite and pass alone: the relay is slower when the box is
|
||||||
|
// busy, and a room list landing back from it after the next drop replaces the order that drop
|
||||||
|
// applied. Waiting for the copy on disk to name the new first space is waiting for the round trip.
|
||||||
|
const expectReordered = async (page: Page, pubkey: string, url: string) => {
|
||||||
|
await expect(page.getByRole("listitem").first()).toContainText(url)
|
||||||
|
await expect.poll(() => cachedFirstSpace(page, pubkey)).toBe(url)
|
||||||
|
}
|
||||||
|
|
||||||
test("US-009 browse, search, and reorder your spaces", async ({seed, as}) => {
|
test("US-009 browse, search, and reorder your spaces", async ({seed, as}) => {
|
||||||
const scenario = await seed(({relay, user}) => {
|
const scenario = await seed(({relay, user}) => {
|
||||||
const space = relay("space")
|
const space = relay("space")
|
||||||
|
|
@ -91,27 +101,21 @@ test("US-009 browse, search, and reorder your spaces", async ({seed, as}) => {
|
||||||
await rail.nth(0).dispatchEvent("dragstart", {dataTransfer})
|
await rail.nth(0).dispatchEvent("dragstart", {dataTransfer})
|
||||||
await rail.nth(1).dispatchEvent("drop", {dataTransfer})
|
await rail.nth(1).dispatchEvent("drop", {dataTransfer})
|
||||||
|
|
||||||
await expect(joined.first()).toContainText(other.url)
|
await expectReordered(page, users.alice.pubkey, other.url)
|
||||||
|
|
||||||
await rail.nth(1).dispatchEvent("dragstart", {dataTransfer})
|
await rail.nth(1).dispatchEvent("dragstart", {dataTransfer})
|
||||||
await rail.nth(0).dispatchEvent("drop", {dataTransfer})
|
await rail.nth(0).dispatchEvent("drop", {dataTransfer})
|
||||||
|
|
||||||
await expect(joined.first()).toContainText(space.url)
|
await expectReordered(page, users.alice.pubkey, space.url)
|
||||||
|
|
||||||
// Dragging in the page's own list moves the same room list. It goes last because it shows the new
|
// Dragging in the page's own list moves the same room list.
|
||||||
// order the moment it is dropped, ahead of the room list it publishes, so a drag in the rail
|
|
||||||
// straight afterwards would be working from the order it replaced.
|
|
||||||
const source = joined.filter({hasText: other.url})
|
const source = joined.filter({hasText: other.url})
|
||||||
const target = joined.filter({hasText: space.url})
|
const target = joined.filter({hasText: space.url})
|
||||||
|
|
||||||
await source.dispatchEvent("dragstart", {dataTransfer})
|
await source.dispatchEvent("dragstart", {dataTransfer})
|
||||||
await target.dispatchEvent("drop", {dataTransfer})
|
await target.dispatchEvent("drop", {dataTransfer})
|
||||||
|
|
||||||
await expect(joined.first()).toContainText(other.url)
|
await expectReordered(page, users.alice.pubkey, other.url)
|
||||||
|
|
||||||
// The reload restores the list from disk, so wait for the new order to land there rather than
|
|
||||||
// racing it — a page that read the old copy back keeps the order it started with.
|
|
||||||
await expect.poll(() => cachedFirstSpace(page, users.alice.pubkey)).toBe(other.url)
|
|
||||||
|
|
||||||
await page.reload()
|
await page.reload()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue