From 46f3fb2db36dd809177a1f73e6f1e1c4710c148f Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Sun, 3 Nov 2024 19:03:06 -0800 Subject: [PATCH 01/28] Add configuration/package.json script and docker fixes --- .gitignore | 1 + src/typescript/frontend/playwright.config.ts | 2 +- src/typescript/frontend/tsconfig.json | 3 ++- src/typescript/package.json | 2 +- .../sdk/src/utils/test/docker/docker-test-harness.ts | 10 ++++++++++ src/typescript/turbo.json | 10 +++------- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 5966c578d..505d79709 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ **/.env +**/.turbo diff --git a/src/typescript/frontend/playwright.config.ts b/src/typescript/frontend/playwright.config.ts index ccfcab617..d5e3b062d 100644 --- a/src/typescript/frontend/playwright.config.ts +++ b/src/typescript/frontend/playwright.config.ts @@ -28,6 +28,7 @@ export default defineConfig({ ...process.env, NODE_OPTIONS: `${process.env.NODE_OPTIONS || ""} --conditions=react-server`, }, + slowMo: 0, // Change this to 1000-3000 to slow the test down and see what's going on. }, }, @@ -47,7 +48,6 @@ export default defineConfig({ use: { ...devices["Desktop Chrome"] }, dependencies: ["setup"], }, - { name: "firefox", use: { ...devices["Desktop Firefox"] }, diff --git a/src/typescript/frontend/tsconfig.json b/src/typescript/frontend/tsconfig.json index 8b30e81e8..f1a2f479d 100644 --- a/src/typescript/frontend/tsconfig.json +++ b/src/typescript/frontend/tsconfig.json @@ -69,6 +69,7 @@ "./src/**/*.ts", "./src/**/*.tsx", ".next/types/**/*.ts", - "./dist/types/**/*.ts" + "./dist/types/**/*.ts", + "playwright.config.ts" ] } diff --git a/src/typescript/package.json b/src/typescript/package.json index f8b5e2e3c..0d00aa5b6 100644 --- a/src/typescript/package.json +++ b/src/typescript/package.json @@ -27,7 +27,7 @@ "dev:debug-verbose": "FETCH_DEBUG_VERBOSE=true pnpm load-env -- pnpm run dev", "docker:prune": "../docker/utils/prune.sh --reset-localnet --yes", "docker:restart": "pnpm run docker:prune && pnpm run docker:up", - "docker:up": "docker compose -f ../docker/compose.local.yaml --env-file ../docker/compose.local.yaml up -d", + "docker:up": "docker compose -f ../docker/compose.local.yaml --env-file ../docker/example.local.env up -d", "format": "turbo run format -- --write", "format:check": "turbo run format -- --check", "lint": "turbo run lint", diff --git a/src/typescript/sdk/src/utils/test/docker/docker-test-harness.ts b/src/typescript/sdk/src/utils/test/docker/docker-test-harness.ts index ac4189b31..44a3833f8 100644 --- a/src/typescript/sdk/src/utils/test/docker/docker-test-harness.ts +++ b/src/typescript/sdk/src/utils/test/docker/docker-test-harness.ts @@ -17,6 +17,7 @@ import { import { EMOJICOIN_INDEXER_URL } from "../../../server/env"; import { TableName } from "../../../indexer-v2/types/json-types"; import { readFileSync, writeFileSync } from "node:fs"; +import { execSync } from "node:child_process"; const LOCAL_COMPOSE_PATH = path.join(getGitRoot(), "src/docker", "compose.local.yaml"); const LOCAL_ENV_PATH = path.join(getGitRoot(), "src/docker", "example.local.env"); @@ -116,6 +117,15 @@ export class DockerTestHarness { await DockerTestHarness.remove(); const command = "docker"; + + // Always build the frontend container if we're using it. + if (frontend) { + execSync( + `docker compose -f ${LOCAL_COMPOSE_PATH} --env-file ${LOCAL_ENV_PATH} build frontend`, + { stdio: "inherit" } + ); + } + const args = [ "compose", "-f", diff --git a/src/typescript/turbo.json b/src/typescript/turbo.json index 7e3a230a3..a03f5fa9f 100644 --- a/src/typescript/turbo.json +++ b/src/typescript/turbo.json @@ -31,10 +31,6 @@ "cache": false, "persistent": true }, - "e2e:frontend": { - "cache": false, - "outputs": [] - }, "format": { "outputs": [] }, @@ -64,15 +60,15 @@ "cache": false, "outputs": [] }, - "test:parallel": { + "test:e2e": { "cache": false, "outputs": [] }, - "test:sequential": { + "test:parallel": { "cache": false, "outputs": [] }, - "unit-test": { + "test:sequential": { "cache": false, "outputs": [] } From a57e54d457552698c5d29b23078dc594682d22a0 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Sun, 3 Nov 2024 19:03:55 -0800 Subject: [PATCH 02/28] Add flaky test fixes --- .../frontend/tests/e2e/market-order.spec.ts | 6 ++---- src/typescript/frontend/tests/e2e/search.spec.ts | 13 +++++-------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index 8c00837a0..5adf248da 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -52,6 +52,7 @@ test("check sorting order", async ({ page }) => { // Expect the sort by daily volume button to be visible. const dailyVolume = page.locator("#emoji-grid-header").getByText("24h Volume"); + await dailyVolume.waitFor({ state: "visible", timeout: 5000 }); expect(dailyVolume).toBeVisible(); // Sort by daily volume. @@ -69,16 +70,13 @@ test("check sorting order", async ({ page }) => { // Expect the sort by bump order button to be visible. const bumpOrder = page.locator("#emoji-grid-header").getByText("Bump Order"); + await bumpOrder.waitFor({ state: "visible", timeout: 5000 }); expect(bumpOrder).toBeVisible(); // Sort by bump order. await bumpOrder.click(); - await page.screenshot(); - // Expect the markets to be in bump order. marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); expect(marketGridItems).toHaveText(patterns.reverse()); - - await page.screenshot(); }); diff --git a/src/typescript/frontend/tests/e2e/search.spec.ts b/src/typescript/frontend/tests/e2e/search.spec.ts index bac4615dd..f84eedef4 100644 --- a/src/typescript/frontend/tests/e2e/search.spec.ts +++ b/src/typescript/frontend/tests/e2e/search.spec.ts @@ -1,7 +1,7 @@ import { test, expect } from "@playwright/test"; import { EmojicoinClient } from "../../../sdk/src/client/emojicoin-client"; import { getFundedAccount } from "../../../sdk/src/utils/test/test-accounts"; -import { sleep, SYMBOL_EMOJI_DATA } from "../../../sdk/src"; +import { SYMBOL_EMOJI_DATA } from "../../../sdk/src"; test("check search results", async ({ page }) => { const user = getFundedAccount("666"); @@ -28,15 +28,12 @@ test("check search results", async ({ page }) => { await emojiSearch.fill("cat"); // Expect the "cat" emoji to be visible in the search results. - let emojiSearchCatButton = picker.getByLabel(cat).first(); + // Note: we must use `getByRole` with 'button' because this element is in the picker shadow DOM. + let emojiSearchCatButton = picker.getByRole('button', { name: cat, exact: true }); expect(emojiSearchCatButton).toBeVisible(); - // Search for the cat,cat market. - await emojiSearchCatButton.click({ force: true }); - - emojiSearchCatButton = picker.getByLabel(cat).first(); - expect(emojiSearchCatButton).toBeVisible(); - await emojiSearchCatButton.click({ force: true }); + // Search for the cat,cat market by clicking twice. + await emojiSearchCatButton.click({ force: true, clickCount: 2 }); // Click on the cat,cat market. const marketCard = page.getByText("cat,cat", { exact: true }); From cc8e8ffdf0ca5b51412a5c07aac9c2b819021ce5 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Sun, 3 Nov 2024 19:05:18 -0800 Subject: [PATCH 03/28] Format/lint --- src/typescript/frontend/tests/e2e/search.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typescript/frontend/tests/e2e/search.spec.ts b/src/typescript/frontend/tests/e2e/search.spec.ts index f84eedef4..fa665018f 100644 --- a/src/typescript/frontend/tests/e2e/search.spec.ts +++ b/src/typescript/frontend/tests/e2e/search.spec.ts @@ -29,7 +29,7 @@ test("check search results", async ({ page }) => { // Expect the "cat" emoji to be visible in the search results. // Note: we must use `getByRole` with 'button' because this element is in the picker shadow DOM. - let emojiSearchCatButton = picker.getByRole('button', { name: cat, exact: true }); + let emojiSearchCatButton = picker.getByRole("button", { name: cat, exact: true }); expect(emojiSearchCatButton).toBeVisible(); // Search for the cat,cat market by clicking twice. From 713c3de71f0aaeb2f532bbeabb121db4d1409106 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Sun, 3 Nov 2024 20:39:48 -0800 Subject: [PATCH 04/28] Wait for sort order to change --- src/typescript/frontend/tests/e2e/market-order.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index 5adf248da..d30350dde 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -78,5 +78,6 @@ test("check sorting order", async ({ page }) => { // Expect the markets to be in bump order. marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); + await sleep(2000); expect(marketGridItems).toHaveText(patterns.reverse()); }); From fa5046b79bf086a5444d6cbfd09b3c7845491213 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Sun, 3 Nov 2024 22:57:29 -0800 Subject: [PATCH 05/28] Sleep after click, not after locator --- src/typescript/frontend/tests/e2e/market-order.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index d30350dde..9d044cdca 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -75,9 +75,9 @@ test("check sorting order", async ({ page }) => { // Sort by bump order. await bumpOrder.click(); + await sleep(2000); // Expect the markets to be in bump order. marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); - await sleep(2000); expect(marketGridItems).toHaveText(patterns.reverse()); }); From d227d5239af5e8f7f04cf7efcae6b80f1677e41c Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Sun, 3 Nov 2024 23:39:01 -0800 Subject: [PATCH 06/28] Don't run tests in parallel in CI, make wait time 1000 --- src/typescript/frontend/playwright.config.ts | 4 ++-- src/typescript/frontend/tests/e2e/market-order.spec.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/typescript/frontend/playwright.config.ts b/src/typescript/frontend/playwright.config.ts index d5e3b062d..0f365ede1 100644 --- a/src/typescript/frontend/playwright.config.ts +++ b/src/typescript/frontend/playwright.config.ts @@ -5,8 +5,8 @@ import { defineConfig, devices } from "@playwright/test"; */ export default defineConfig({ testDir: "./tests/e2e", - /* Run tests in files in parallel */ - fullyParallel: true, + /* Run tests in files in parallel if not in CI */ + fullyParallel: !process.env.CI, // The quickest fix for flaky tests in CI is this being false. /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, /* Retry on CI only */ diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index 9d044cdca..5731e3bbb 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -75,7 +75,7 @@ test("check sorting order", async ({ page }) => { // Sort by bump order. await bumpOrder.click(); - await sleep(2000); + await sleep(1000); // Expect the markets to be in bump order. marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); From e735b7e4438638115bda596635e716c166ac22b4 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Sun, 3 Nov 2024 23:55:03 -0800 Subject: [PATCH 07/28] Test commit --- src/typescript/frontend/playwright.config.ts | 4 ++-- src/typescript/frontend/tests/e2e/market-order.spec.ts | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/typescript/frontend/playwright.config.ts b/src/typescript/frontend/playwright.config.ts index 0f365ede1..5df9e0020 100644 --- a/src/typescript/frontend/playwright.config.ts +++ b/src/typescript/frontend/playwright.config.ts @@ -5,8 +5,8 @@ import { defineConfig, devices } from "@playwright/test"; */ export default defineConfig({ testDir: "./tests/e2e", - /* Run tests in files in parallel if not in CI */ - fullyParallel: !process.env.CI, // The quickest fix for flaky tests in CI is this being false. + /* Run tests in files in parallel. */ + fullyParallel: true, /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, /* Retry on CI only */ diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index 5731e3bbb..94ef33ecb 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -62,7 +62,7 @@ test("check sorting order", async ({ page }) => { const patterns = names.map((e) => new RegExp(e)); // Expect the markets to be in order of daily volume. - marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); + marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/i, { exact: true }); expect(marketGridItems).toHaveText(patterns); // Click the sorting button. @@ -78,6 +78,8 @@ test("check sorting order", async ({ page }) => { await sleep(1000); // Expect the markets to be in bump order. - marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); + marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/i, { exact: true }); + const texts = await marketGridItems.allTextContents(); + console.log("Found texts:", texts); expect(marketGridItems).toHaveText(patterns.reverse()); }); From bfba283bb0264413f0d38016bb34a64047b40f90 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Sun, 3 Nov 2024 23:55:21 -0800 Subject: [PATCH 08/28] Test commit2 --- src/typescript/frontend/tests/e2e/market-order.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index 94ef33ecb..8efefcbf5 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -75,7 +75,7 @@ test("check sorting order", async ({ page }) => { // Sort by bump order. await bumpOrder.click(); - await sleep(1000); + await sleep(5000); // Expect the markets to be in bump order. marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/i, { exact: true }); From fd3e4dde7fd6236b28d421dd0def40d33052abb5 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 00:11:48 -0800 Subject: [PATCH 09/28] Try waiting for visible --- src/typescript/frontend/tests/e2e/market-order.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index 8efefcbf5..16fb5cab6 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -62,7 +62,7 @@ test("check sorting order", async ({ page }) => { const patterns = names.map((e) => new RegExp(e)); // Expect the markets to be in order of daily volume. - marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/i, { exact: true }); + marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); expect(marketGridItems).toHaveText(patterns); // Click the sorting button. @@ -75,10 +75,10 @@ test("check sorting order", async ({ page }) => { // Sort by bump order. await bumpOrder.click(); - await sleep(5000); // Expect the markets to be in bump order. - marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/i, { exact: true }); + marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); + await marketGridItems.waitFor({ state: "visible" }); const texts = await marketGridItems.allTextContents(); console.log("Found texts:", texts); expect(marketGridItems).toHaveText(patterns.reverse()); From 795d327eab8c25937948a20c17d4b6f33d825234 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 00:16:04 -0800 Subject: [PATCH 10/28] Fix visibility check --- src/typescript/frontend/tests/e2e/market-order.spec.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index 16fb5cab6..1c8f3755b 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -78,8 +78,7 @@ test("check sorting order", async ({ page }) => { // Expect the markets to be in bump order. marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); - await marketGridItems.waitFor({ state: "visible" }); - const texts = await marketGridItems.allTextContents(); - console.log("Found texts:", texts); + await marketGridItems.waitFor({ state: "visible", timeout: 5000 }); + expect(marketGridItems).toBeVisible(); expect(marketGridItems).toHaveText(patterns.reverse()); }); From dc96da4c94a52f9dd3847db586ad9be7e7da85a3 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 00:21:04 -0800 Subject: [PATCH 11/28] Fix strict mode check --- src/typescript/frontend/tests/e2e/market-order.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index 1c8f3755b..2e38e067c 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -62,7 +62,7 @@ test("check sorting order", async ({ page }) => { const patterns = names.map((e) => new RegExp(e)); // Expect the markets to be in order of daily volume. - marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); + marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/); expect(marketGridItems).toHaveText(patterns); // Click the sorting button. @@ -77,8 +77,8 @@ test("check sorting order", async ({ page }) => { await bumpOrder.click(); // Expect the markets to be in bump order. - marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/, { exact: true }); - await marketGridItems.waitFor({ state: "visible", timeout: 5000 }); - expect(marketGridItems).toBeVisible(); + marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/); + await marketGridItems.first().waitFor({ state: "visible", timeout: 5000 }); + expect(marketGridItems.first()).toBeVisible(); expect(marketGridItems).toHaveText(patterns.reverse()); }); From 2a0794a36660dfd1e2f2a6dbbc7813912577aa2b Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 13:06:39 -0800 Subject: [PATCH 12/28] Run playwright in headed (non-headless) mode --- src/typescript/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typescript/package.json b/src/typescript/package.json index 0d00aa5b6..71b04bb6b 100644 --- a/src/typescript/package.json +++ b/src/typescript/package.json @@ -40,7 +40,7 @@ "test": "pnpm run load-env:test -- turbo run test --force", "test:debug": "FETCH_DEBUG=true pnpm run load-env:test -- turbo run test --force", "test:frontend": "pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-frontend --log-prefix none", - "test:frontend:e2e": "pnpm run load-env:test -- turbo run test:e2e --filter @econia-labs/emojicoin-frontend --log-prefix none", + "test:frontend:e2e": "pnpm run load-env:test -- turbo run test:e2e --filter @econia-labs/emojicoin-frontend --log-prefix none -- --headed", "test:sdk": "pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-sdk --log-prefix none", "test:sdk:e2e": "pnpm run load-env:unit-test -- turbo run test:e2e --filter @econia-labs/emojicoin-sdk --force --log-prefix none --log-order grouped", "test:sdk:unit": "NO_TEST_SETUP=true pnpm run load-env:test -- turbo run test:unit --force --log-prefix none --log-order grouped", From 6e6592fb5d8d0685299415e3aab6943d0476f083 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 13:18:15 -0800 Subject: [PATCH 13/28] Run in headless mode but skip market-order.spec.ts --- src/typescript/frontend/playwright.config.ts | 2 +- src/typescript/frontend/tests/e2e/market-order.spec.ts | 2 +- src/typescript/package.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/typescript/frontend/playwright.config.ts b/src/typescript/frontend/playwright.config.ts index 5df9e0020..94cbbe4f9 100644 --- a/src/typescript/frontend/playwright.config.ts +++ b/src/typescript/frontend/playwright.config.ts @@ -28,7 +28,7 @@ export default defineConfig({ ...process.env, NODE_OPTIONS: `${process.env.NODE_OPTIONS || ""} --conditions=react-server`, }, - slowMo: 0, // Change this to 1000-3000 to slow the test down and see what's going on. + slowMo: 1500, // Change this to 1000-3000 to slow the test down and see what's going on. }, }, diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index 2e38e067c..d61302491 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -3,7 +3,7 @@ import { EmojicoinClient } from "../../../sdk/src/client/emojicoin-client"; import { getFundedAccount } from "../../../sdk/src/utils/test/test-accounts"; import { ONE_APT_BIGINT, sleep, SYMBOL_EMOJI_DATA } from "../../../sdk/src"; -test("check sorting order", async ({ page }) => { +test.skip("check sorting order", async ({ page }) => { const user = getFundedAccount("777"); const rat = SYMBOL_EMOJI_DATA.byName("rat")!.emoji; const emojis = ["cat", "dog", "eagle", "sauropod"]; diff --git a/src/typescript/package.json b/src/typescript/package.json index 71b04bb6b..d3fb5f587 100644 --- a/src/typescript/package.json +++ b/src/typescript/package.json @@ -40,8 +40,8 @@ "test": "pnpm run load-env:test -- turbo run test --force", "test:debug": "FETCH_DEBUG=true pnpm run load-env:test -- turbo run test --force", "test:frontend": "pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-frontend --log-prefix none", - "test:frontend:e2e": "pnpm run load-env:test -- turbo run test:e2e --filter @econia-labs/emojicoin-frontend --log-prefix none -- --headed", - "test:sdk": "pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-sdk --log-prefix none", + "test:frontend:e2e": "pnpm run load-env:test -- turbo run test:e2e --filter @econia-labs/emojicoin-frontend --log-prefix none", + "test:sdk": "pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-sdk --log-prefix none -- --headed", "test:sdk:e2e": "pnpm run load-env:unit-test -- turbo run test:e2e --filter @econia-labs/emojicoin-sdk --force --log-prefix none --log-order grouped", "test:sdk:unit": "NO_TEST_SETUP=true pnpm run load-env:test -- turbo run test:unit --force --log-prefix none --log-order grouped", "test:verbose": "FETCH_DEBUG=true VERBOSE_TEST_LOGS=true pnpm run load-env:test -- turbo run test --force" From 76e4dabb5c011a608458fa92f5a6570836529e41 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 13:43:41 -0800 Subject: [PATCH 14/28] Upload screenshots as artifacts upon failure Add `--headed` to the correct package.json command --- src/typescript/frontend/playwright.config.ts | 2 +- src/typescript/frontend/tests/e2e/market-order.spec.ts | 5 ++++- src/typescript/package.json | 6 +++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/typescript/frontend/playwright.config.ts b/src/typescript/frontend/playwright.config.ts index 94cbbe4f9..5df9e0020 100644 --- a/src/typescript/frontend/playwright.config.ts +++ b/src/typescript/frontend/playwright.config.ts @@ -28,7 +28,7 @@ export default defineConfig({ ...process.env, NODE_OPTIONS: `${process.env.NODE_OPTIONS || ""} --conditions=react-server`, }, - slowMo: 1500, // Change this to 1000-3000 to slow the test down and see what's going on. + slowMo: 0, // Change this to 1000-3000 to slow the test down and see what's going on. }, }, diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index d61302491..37a977e31 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -3,7 +3,7 @@ import { EmojicoinClient } from "../../../sdk/src/client/emojicoin-client"; import { getFundedAccount } from "../../../sdk/src/utils/test/test-accounts"; import { ONE_APT_BIGINT, sleep, SYMBOL_EMOJI_DATA } from "../../../sdk/src"; -test.skip("check sorting order", async ({ page }) => { +test("check sorting order", async ({ page }) => { const user = getFundedAccount("777"); const rat = SYMBOL_EMOJI_DATA.byName("rat")!.emoji; const emojis = ["cat", "dog", "eagle", "sauropod"]; @@ -73,12 +73,15 @@ test.skip("check sorting order", async ({ page }) => { await bumpOrder.waitFor({ state: "visible", timeout: 5000 }); expect(bumpOrder).toBeVisible(); + await page.screenshot({ path: "screenshots/test-failure.png" }); + // Sort by bump order. await bumpOrder.click(); // Expect the markets to be in bump order. marketGridItems = page.locator("#emoji-grid a").getByTitle(/RAT,/); await marketGridItems.first().waitFor({ state: "visible", timeout: 5000 }); + await page.screenshot({ path: "screenshots/test-failure-2.png" }); expect(marketGridItems.first()).toBeVisible(); expect(marketGridItems).toHaveText(patterns.reverse()); }); diff --git a/src/typescript/package.json b/src/typescript/package.json index d3fb5f587..f87a3d038 100644 --- a/src/typescript/package.json +++ b/src/typescript/package.json @@ -39,9 +39,9 @@ "submodule": "turbo run submodule", "test": "pnpm run load-env:test -- turbo run test --force", "test:debug": "FETCH_DEBUG=true pnpm run load-env:test -- turbo run test --force", - "test:frontend": "pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-frontend --log-prefix none", - "test:frontend:e2e": "pnpm run load-env:test -- turbo run test:e2e --filter @econia-labs/emojicoin-frontend --log-prefix none", - "test:sdk": "pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-sdk --log-prefix none -- --headed", + "test:frontend": " pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-frontend --log-prefix none -- --headed", + "test:frontend:e2e": "pnpm run load-env:test -- turbo run test:e2e --filter @econia-labs/emojicoin-frontend --log-prefix none -- --headed", + "test:sdk": "pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-sdk --log-prefix none", "test:sdk:e2e": "pnpm run load-env:unit-test -- turbo run test:e2e --filter @econia-labs/emojicoin-sdk --force --log-prefix none --log-order grouped", "test:sdk:unit": "NO_TEST_SETUP=true pnpm run load-env:test -- turbo run test:unit --force --log-prefix none --log-order grouped", "test:verbose": "FETCH_DEBUG=true VERBOSE_TEST_LOGS=true pnpm run load-env:test -- turbo run test --force" From d76dc43d40bcc99f6689e721135521ac06bbdf7f Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 13:53:52 -0800 Subject: [PATCH 15/28] Add firefox dependencies so we can run in headed mode --- .github/workflows/frontend-tests.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/frontend-tests.yaml b/.github/workflows/frontend-tests.yaml index 694523d49..97e0b3b1f 100644 --- a/.github/workflows/frontend-tests.yaml +++ b/.github/workflows/frontend-tests.yaml @@ -20,9 +20,15 @@ jobs: name: 'Clone submodule' run: 'pnpm run submodule' - name: 'Install Playwright Browsers' - run: 'pnpm run playwright:install' + run: 'pnpm run playwright:install --with-deps firefox' - name: 'Run Playwright tests' run: 'pnpm run test:frontend' + - if: 'failure()' + name: 'Upload screenshots as artifacts' + uses: 'actions/upload-artifact@v3' + with: + name: 'playwright-screenshots' + path: 'screenshots/' timeout-minutes: 15 name: 'Run the frontend tests' "on": From e17a313772e989910f6bd07008d7feda54dbd8f1 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 13:55:27 -0800 Subject: [PATCH 16/28] Properly pass args to ci command --- .github/workflows/frontend-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/frontend-tests.yaml b/.github/workflows/frontend-tests.yaml index 97e0b3b1f..7775ba7a6 100644 --- a/.github/workflows/frontend-tests.yaml +++ b/.github/workflows/frontend-tests.yaml @@ -20,7 +20,7 @@ jobs: name: 'Clone submodule' run: 'pnpm run submodule' - name: 'Install Playwright Browsers' - run: 'pnpm run playwright:install --with-deps firefox' + run: 'pnpm run playwright:install -- --with-deps firefox' - name: 'Run Playwright tests' run: 'pnpm run test:frontend' - if: 'failure()' From 285dc1329f08b467b36e2fa5520a6e7497561217 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:14:20 -0800 Subject: [PATCH 17/28] Add proper playwright config to the github action --- .github/workflows/frontend-tests.yaml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/frontend-tests.yaml b/.github/workflows/frontend-tests.yaml index 7775ba7a6..010518171 100644 --- a/.github/workflows/frontend-tests.yaml +++ b/.github/workflows/frontend-tests.yaml @@ -1,6 +1,9 @@ --- jobs: playwright-tests: + container: + image: 'mcr.microsoft.com/playwright:v1.48.1-jammy' + options: '--user 1001' defaults: run: working-directory: 'src/typescript' @@ -20,15 +23,22 @@ jobs: name: 'Clone submodule' run: 'pnpm run submodule' - name: 'Install Playwright Browsers' - run: 'pnpm run playwright:install -- --with-deps firefox' + run: 'pnpm run playwright:install -- --with-deps' - name: 'Run Playwright tests' run: 'pnpm run test:frontend' - - if: 'failure()' + - if: '${{ failure() }}' name: 'Upload screenshots as artifacts' - uses: 'actions/upload-artifact@v3' + uses: 'actions/upload-artifact@v4' with: name: 'playwright-screenshots' path: 'screenshots/' + - if: '${{ !cancelled() }}' + name: 'Upload Playwright report as artifact' + uses: 'actions/upload-artifact@v4' + with: + name: 'playwright-report' + path: 'playwright-report/' + retention-days: 30 timeout-minutes: 15 name: 'Run the frontend tests' "on": From e9f4cb7594bc3a5260e91528027ccb263d14648d Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:28:28 -0800 Subject: [PATCH 18/28] Fix proper privileges with playwright docker container --- .github/workflows/frontend-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/frontend-tests.yaml b/.github/workflows/frontend-tests.yaml index 010518171..386310afc 100644 --- a/.github/workflows/frontend-tests.yaml +++ b/.github/workflows/frontend-tests.yaml @@ -23,7 +23,7 @@ jobs: name: 'Clone submodule' run: 'pnpm run submodule' - name: 'Install Playwright Browsers' - run: 'pnpm run playwright:install -- --with-deps' + run: 'pnpm run playwright:install' - name: 'Run Playwright tests' run: 'pnpm run test:frontend' - if: '${{ failure() }}' From 887daf9b047d3f0cca48365261b9246b7612e371 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:47:02 -0800 Subject: [PATCH 19/28] Remove --with-deps from package.json command --- src/typescript/frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typescript/frontend/package.json b/src/typescript/frontend/package.json index f0156999d..814800950 100644 --- a/src/typescript/frontend/package.json +++ b/src/typescript/frontend/package.json @@ -97,7 +97,7 @@ "format:check": "pnpm _format --check", "lint": "eslint --max-warnings=0 -c .eslintrc.js --ext .js,.jsx,.ts,.tsx .", "lint:fix": "pnpm run lint --fix", - "playwright:install": "playwright install --with-deps", + "playwright:install": "playwright install", "start": "next start --port 3001", "submodule": "./submodule.sh", "test": "pnpm run test:e2e", From 298873d717b63d7160f12fb538512548e20fe42a Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:58:32 -0800 Subject: [PATCH 20/28] Undo using container/non-sudo --- .github/workflows/frontend-tests.yaml | 3 --- src/typescript/frontend/package.json | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/frontend-tests.yaml b/.github/workflows/frontend-tests.yaml index 386310afc..b9c7d925d 100644 --- a/.github/workflows/frontend-tests.yaml +++ b/.github/workflows/frontend-tests.yaml @@ -1,9 +1,6 @@ --- jobs: playwright-tests: - container: - image: 'mcr.microsoft.com/playwright:v1.48.1-jammy' - options: '--user 1001' defaults: run: working-directory: 'src/typescript' diff --git a/src/typescript/frontend/package.json b/src/typescript/frontend/package.json index 814800950..f0156999d 100644 --- a/src/typescript/frontend/package.json +++ b/src/typescript/frontend/package.json @@ -97,7 +97,7 @@ "format:check": "pnpm _format --check", "lint": "eslint --max-warnings=0 -c .eslintrc.js --ext .js,.jsx,.ts,.tsx .", "lint:fix": "pnpm run lint --fix", - "playwright:install": "playwright install", + "playwright:install": "playwright install --with-deps", "start": "next start --port 3001", "submodule": "./submodule.sh", "test": "pnpm run test:e2e", From 64692af25d56c3fe8647c9df292f0642a0d99588 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 15:31:45 -0800 Subject: [PATCH 21/28] Run in headless mode --- src/typescript/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/typescript/package.json b/src/typescript/package.json index f87a3d038..8215fe55f 100644 --- a/src/typescript/package.json +++ b/src/typescript/package.json @@ -39,8 +39,8 @@ "submodule": "turbo run submodule", "test": "pnpm run load-env:test -- turbo run test --force", "test:debug": "FETCH_DEBUG=true pnpm run load-env:test -- turbo run test --force", - "test:frontend": " pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-frontend --log-prefix none -- --headed", - "test:frontend:e2e": "pnpm run load-env:test -- turbo run test:e2e --filter @econia-labs/emojicoin-frontend --log-prefix none -- --headed", + "test:frontend": " pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-frontend --log-prefix none", + "test:frontend:e2e": "pnpm run load-env:test -- turbo run test:e2e --filter @econia-labs/emojicoin-frontend --log-prefix none", "test:sdk": "pnpm run load-env:test -- turbo run test --filter @econia-labs/emojicoin-sdk --log-prefix none", "test:sdk:e2e": "pnpm run load-env:unit-test -- turbo run test:e2e --filter @econia-labs/emojicoin-sdk --force --log-prefix none --log-order grouped", "test:sdk:unit": "NO_TEST_SETUP=true pnpm run load-env:test -- turbo run test:unit --force --log-prefix none --log-order grouped", From 60d5354c5551a30007b3c51b63995801f5487d0e Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 16:03:25 -0800 Subject: [PATCH 22/28] Always add html reporter always Fix relative path in upload artifact action config --- .github/workflows/frontend-tests.yaml | 4 ++-- src/typescript/frontend/playwright.config.ts | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/frontend-tests.yaml b/.github/workflows/frontend-tests.yaml index b9c7d925d..9c6fc23bc 100644 --- a/.github/workflows/frontend-tests.yaml +++ b/.github/workflows/frontend-tests.yaml @@ -28,13 +28,13 @@ jobs: uses: 'actions/upload-artifact@v4' with: name: 'playwright-screenshots' - path: 'screenshots/' + path: 'src/typescript/screenshots/' - if: '${{ !cancelled() }}' name: 'Upload Playwright report as artifact' uses: 'actions/upload-artifact@v4' with: name: 'playwright-report' - path: 'playwright-report/' + path: 'src/typescript/playwright-report/' retention-days: 30 timeout-minutes: 15 name: 'Run the frontend tests' diff --git a/src/typescript/frontend/playwright.config.ts b/src/typescript/frontend/playwright.config.ts index 5df9e0020..29f0d2d6e 100644 --- a/src/typescript/frontend/playwright.config.ts +++ b/src/typescript/frontend/playwright.config.ts @@ -14,7 +14,10 @@ export default defineConfig({ /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: process.env.GITHUB_ACTIONS ? "github" : "list", + reporter: [ + [process.env.GITHUB_ACTIONS ? "github" : "list"], + ["html", { outputFolder: "playwright-report " }], + ], /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { /* Base URL to use in actions like `await page.goto('/')`. */ From 68bbdc5228e457de9db1f814c48fb93aba9713ce Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 16:25:03 -0800 Subject: [PATCH 23/28] Try trace retain on failure --- src/typescript/frontend/playwright.config.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/typescript/frontend/playwright.config.ts b/src/typescript/frontend/playwright.config.ts index 29f0d2d6e..1aaf6a63b 100644 --- a/src/typescript/frontend/playwright.config.ts +++ b/src/typescript/frontend/playwright.config.ts @@ -9,8 +9,7 @@ export default defineConfig({ fullyParallel: true, /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, + retries: 0, /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ @@ -24,7 +23,7 @@ export default defineConfig({ baseURL: "http://127.0.0.1:3001", /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: "on-first-retry", + trace: "retain-on-failure", launchOptions: { env: { From c928b6ba607ae7d9aadc3d4d4558c0542aa157e4 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 16:25:55 -0800 Subject: [PATCH 24/28] Leave 2 retries in CI, but retain trace on first failure --- src/typescript/frontend/playwright.config.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/typescript/frontend/playwright.config.ts b/src/typescript/frontend/playwright.config.ts index 1aaf6a63b..d9dd690b9 100644 --- a/src/typescript/frontend/playwright.config.ts +++ b/src/typescript/frontend/playwright.config.ts @@ -9,7 +9,8 @@ export default defineConfig({ fullyParallel: true, /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, - retries: 0, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ @@ -23,7 +24,7 @@ export default defineConfig({ baseURL: "http://127.0.0.1:3001", /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: "retain-on-failure", + trace: "retain-on-first-failure", launchOptions: { env: { From 84d8f51ed6b3c94bf6b6f18f81f43e92a9c7b990 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 16:54:55 -0800 Subject: [PATCH 25/28] Add contingent register to accomodate test being retried --- .../frontend/tests/e2e/market-order.spec.ts | 9 +++-- .../frontend/tests/e2e/search.spec.ts | 6 +++- .../sdk/src/client/emojicoin-client.ts | 35 +++++++++++++++++-- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/typescript/frontend/tests/e2e/market-order.spec.ts b/src/typescript/frontend/tests/e2e/market-order.spec.ts index 37a977e31..c10528d88 100644 --- a/src/typescript/frontend/tests/e2e/market-order.spec.ts +++ b/src/typescript/frontend/tests/e2e/market-order.spec.ts @@ -10,13 +10,18 @@ test("check sorting order", async ({ page }) => { const markets = emojis.map((e) => [rat, SYMBOL_EMOJI_DATA.byName(e)!.emoji]); const client = new EmojicoinClient(); + client.view; // Register markets. // They all start with rat to simplify the search. + // Only register if it doesn't exist- this will occur on retries of the test. for (let i = 0; i < markets.length; i++) { - await client.register(user, markets[i]).then((res) => res.handle); + const exists = await client.view.marketExists(markets[i]); + if (!exists) { + await client.register(user, markets[i]); + } const amount = ((1n * ONE_APT_BIGINT) / 100n) * BigInt(10 ** (markets.length - i)); - await client.buy(user, markets[i], amount).then((res) => res.handle); + await client.buy(user, markets[i], amount); } await page.goto("/home"); diff --git a/src/typescript/frontend/tests/e2e/search.spec.ts b/src/typescript/frontend/tests/e2e/search.spec.ts index fa665018f..1bf140705 100644 --- a/src/typescript/frontend/tests/e2e/search.spec.ts +++ b/src/typescript/frontend/tests/e2e/search.spec.ts @@ -9,7 +9,11 @@ test("check search results", async ({ page }) => { const symbols = [cat, cat]; const client = new EmojicoinClient(); - await client.register(user, symbols).then((res) => res.handle); + // Register the market if it doesn't exist- it should only exist if the test is retried. + const exists = await client.view.marketExists(symbols); + if (!exists) { + await client.register(user, symbols); + } await page.goto("/home"); diff --git a/src/typescript/sdk/src/client/emojicoin-client.ts b/src/typescript/sdk/src/client/emojicoin-client.ts index da8b67a60..fc8b991e5 100644 --- a/src/typescript/sdk/src/client/emojicoin-client.ts +++ b/src/typescript/sdk/src/client/emojicoin-client.ts @@ -7,9 +7,10 @@ import { type TypeTag, type InputGenerateTransactionOptions, type WaitForTransactionOptions, + LedgerVersionArg, } from "@aptos-labs/ts-sdk"; import { type ChatEmoji, type SymbolEmoji } from "../emoji_data/types"; -import { getEvents } from "../emojicoin_dot_fun"; +import { EmojicoinDotFun, getEvents } from "../emojicoin_dot_fun"; import { Chat, ProvideLiquidity, @@ -28,6 +29,7 @@ import { DEFAULT_REGISTER_MARKET_GAS_OPTIONS, INTEGRATOR_ADDRESS } from "../cons import { waitFor } from "../utils"; import { postgrest } from "../indexer-v2/queries"; import { TableName } from "../indexer-v2/types/json-types"; +import { AnyNumberString } from "../types"; const { expect, Expect } = customExpect; @@ -100,18 +102,32 @@ export class EmojicoinClient { remove: this.removeLiquidity.bind(this), }; - public utils = { + public utils: { + emojisToHexStrings: typeof EmojicoinClient.prototype.emojisToHexStrings; + emojisToHexSymbol: typeof EmojicoinClient.prototype.emojisToHexSymbol; + getEmojicoinInfo: typeof EmojicoinClient.prototype.getEmojicoinInfo; + getTransactionEventData: typeof EmojicoinClient.prototype.getTransactionEventData; + } = { emojisToHexStrings: this.emojisToHexStrings.bind(this), emojisToHexSymbol: this.emojisToHexSymbol.bind(this), getEmojicoinInfo: this.getEmojicoinInfo.bind(this), getTransactionEventData: this.getTransactionEventData.bind(this), }; - public rewards = { + public rewards: { + buy: typeof EmojicoinClient.prototype.buyWithRewards; + sell: typeof EmojicoinClient.prototype.sellWithRewards; + } = { buy: this.buyWithRewards.bind(this), sell: this.sellWithRewards.bind(this), }; + public view: { + marketExists: typeof EmojicoinClient.prototype.isMarketRegisteredView; + } = { + marketExists: this.isMarketRegisteredView.bind(this), + }; + private integrator: AccountAddress; private integratorFeeRateBPs: number; @@ -228,6 +244,19 @@ export class EmojicoinClient { ); } + private async isMarketRegisteredView( + symbolEmojis: SymbolEmoji[], + ledgerVersion?: AnyNumberString + ) { + const { marketAddress } = this.getEmojicoinInfo(symbolEmojis); + const res = await EmojicoinDotFun.MarketMetadataByMarketAddress.view({ + aptos: this.aptos, + marketAddress, + ...(ledgerVersion ? { options: { ledgerVersion: BigInt(ledgerVersion) } } : {}), + }); + return typeof res.vec.pop() !== "undefined"; + } + private async swap( swapper: Account, symbolEmojis: SymbolEmoji[], From b54f8fb5bc4b17839f5059269f31b88bcd60c1dc Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:04:17 -0800 Subject: [PATCH 26/28] Remove space in playwright-report output folder --- src/typescript/frontend/playwright.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typescript/frontend/playwright.config.ts b/src/typescript/frontend/playwright.config.ts index d9dd690b9..061bba49b 100644 --- a/src/typescript/frontend/playwright.config.ts +++ b/src/typescript/frontend/playwright.config.ts @@ -16,7 +16,7 @@ export default defineConfig({ /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: [ [process.env.GITHUB_ACTIONS ? "github" : "list"], - ["html", { outputFolder: "playwright-report " }], + ["html", { outputFolder: "playwright-report" }], ], /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { From 850a35524812d60fc9829b24bbb86283fe25cf39 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:05:28 -0800 Subject: [PATCH 27/28] Lint --- src/typescript/sdk/src/client/emojicoin-client.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/typescript/sdk/src/client/emojicoin-client.ts b/src/typescript/sdk/src/client/emojicoin-client.ts index fc8b991e5..506375d91 100644 --- a/src/typescript/sdk/src/client/emojicoin-client.ts +++ b/src/typescript/sdk/src/client/emojicoin-client.ts @@ -7,7 +7,6 @@ import { type TypeTag, type InputGenerateTransactionOptions, type WaitForTransactionOptions, - LedgerVersionArg, } from "@aptos-labs/ts-sdk"; import { type ChatEmoji, type SymbolEmoji } from "../emoji_data/types"; import { EmojicoinDotFun, getEvents } from "../emojicoin_dot_fun"; From 410f2d4d12d6343d2d6fe6495dac857e2a5ddd00 Mon Sep 17 00:00:00 2001 From: Matt <90358481+xbtmatt@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:13:46 -0800 Subject: [PATCH 28/28] Lint --- src/typescript/sdk/src/client/emojicoin-client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typescript/sdk/src/client/emojicoin-client.ts b/src/typescript/sdk/src/client/emojicoin-client.ts index 506375d91..3f936abea 100644 --- a/src/typescript/sdk/src/client/emojicoin-client.ts +++ b/src/typescript/sdk/src/client/emojicoin-client.ts @@ -28,7 +28,7 @@ import { DEFAULT_REGISTER_MARKET_GAS_OPTIONS, INTEGRATOR_ADDRESS } from "../cons import { waitFor } from "../utils"; import { postgrest } from "../indexer-v2/queries"; import { TableName } from "../indexer-v2/types/json-types"; -import { AnyNumberString } from "../types"; +import { type AnyNumberString } from "../types"; const { expect, Expect } = customExpect;