diff --git a/web-common/src/features/dashboards/workspace/DashboardCTAs.svelte b/web-common/src/features/dashboards/workspace/DashboardCTAs.svelte index 165b394b37d..5e15ca08c65 100644 --- a/web-common/src/features/dashboards/workspace/DashboardCTAs.svelte +++ b/web-common/src/features/dashboards/workspace/DashboardCTAs.svelte @@ -43,7 +43,7 @@ {#if !$readOnly} diff --git a/web-local/tests/explores/dashboard-flow-test-setup.ts b/web-local/tests/explores/dashboard-flow-test-setup.ts index 4e8808010f7..93f4b4cbf7d 100644 --- a/web-local/tests/explores/dashboard-flow-test-setup.ts +++ b/web-local/tests/explores/dashboard-flow-test-setup.ts @@ -1,20 +1,11 @@ -import { createMetricsViewFromModel } from "web-local/tests/utils/metricsViewHelpers"; +import { createExploreFromModel } from "web-local/tests/utils/exploreHelpers"; import { createAdBidsModel } from "web-local/tests/utils/dataSpecifcHelpers"; import { test } from "../utils/test"; -import { waitForFileNavEntry } from "../utils/waitHelpers"; export function useDashboardFlowTestSetup() { test.beforeEach(async ({ page }) => { test.setTimeout(45000); await createAdBidsModel(page); - - await Promise.all([ - waitForFileNavEntry( - page, - `/dashboards/AdBids_model_dashboard.yaml`, - true, - ), - createMetricsViewFromModel(page, "/models/AdBids_model.sql"), - ]); + await createExploreFromModel(page); }); } diff --git a/web-local/tests/explores/explores.spec.ts b/web-local/tests/explores/explores.spec.ts index 287259e80eb..29fcb4ebff6 100644 --- a/web-local/tests/explores/explores.spec.ts +++ b/web-local/tests/explores/explores.spec.ts @@ -7,26 +7,22 @@ import { ResourceWatcher } from "web-local/tests/utils/ResourceWatcher"; import { updateCodeEditor, wrapRetryAssertion } from "../utils/commonHelpers"; import { assertLeaderboards, - createMetricsViewFromModel, - createMetricsViewFromSource, interactWithTimeRangeMenu, } from "web-local/tests/utils/metricsViewHelpers"; import { + AD_BIDS_EXPLORE_PATH, + AD_BIDS_METRICS_PATH, assertAdBidsDashboard, createAdBidsModel, } from "../utils/dataSpecifcHelpers"; import { createSource } from "../utils/sourceHelpers"; import { test } from "../utils/test"; -import { waitForFileNavEntry } from "../utils/waitHelpers"; +import { gotoNavEntry, waitForFileNavEntry } from "../utils/waitHelpers"; test.describe("explores", () => { test("Autogenerate explore from source", async ({ page }) => { await createSource(page, "AdBids.csv", "/sources/AdBids.yaml"); - await createExploreFromSource( - page, - "/sources/AdBids.yaml", - "/metrics/AdBids_metrics.yaml", - ); + await createExploreFromSource(page); await waitForFileNavEntry( page, "/explore-dashboards/AdBids_metrics_explore.yaml", @@ -40,18 +36,7 @@ test.describe("explores", () => { test("Autogenerate explore from model", async ({ page }) => { await createAdBidsModel(page); - await Promise.all([ - waitForFileNavEntry( - page, - "/explore-dashboards/AdBids_model_metrics_explore.yaml", - true, - ), - createExploreFromModel( - page, - "/models/AdBids_model.sql", - "/metrics/AdBids_model_metrics.yaml", - ), - ]); + await createExploreFromModel(page); await page.getByRole("button", { name: "Preview" }).click(); await assertAdBidsDashboard(page); @@ -85,7 +70,7 @@ test.describe("explores", () => { const watcher = new ResourceWatcher(page); await createAdBidsModel(page); - await createMetricsViewFromModel(page, "/models/AdBids_model.sql"); + await createExploreFromModel(page); await page.getByRole("button", { name: "Preview" }).click(); // Check the total records are 100k @@ -230,36 +215,21 @@ test.describe("explores", () => { // Check that the data is updated for last 6 hours // Change time range back to all time - // Open Edit Metrics - await page.getByRole("button", { name: "Edit Metrics" }).click(); + // Open Edit Explore + await page.getByRole("button", { name: "Edit Explore" }).click(); // Get the dashboard name field and change it - const changeDisplayNameDoc = `# Visit https://docs.rilldata.com/reference/project-files to learn more about Rill project files. + const changeDisplayNameDoc = ` +type: explore - type: metrics_view - title: "AdBids_model_dashboard_rename" - model: "AdBids_model" - default_time_range: "" - smallest_time_grain: "" - measures: - - label: Total records - expression: count(*) - name: total_records - description: Total number of records present - format_preset: humanize - dimensions: - - name: publisher - label: Publisher - column: publisher - description: "" - - name: domain - label: Domain - column: domain - description: "" +title: "Adbids dashboard renamed" +metrics_view: AdBids_model_metrics - `; - await watcher.updateAndWaitForDashboard(changeDisplayNameDoc); +dimensions: '*' +measures: '*' +`; + await watcher.updateAndWaitForExplore(changeDisplayNameDoc); // Remove timestamp column // await page.getByLabel("Remove timestamp column").click(); @@ -268,21 +238,22 @@ test.describe("explores", () => { // Assert that name changed await expect( - page.getByRole("link", { name: "AdBids_model_dashboard_rename" }), + page.getByRole("link", { name: "Adbids dashboard renamed" }), ).toBeVisible(); // Assert that no time dimension specified // await expect(page.getByText("No time dimension specified")).toBeVisible(); - // Open Edit Metrics - await page.getByRole("button", { name: "Edit Metrics" }).click(); + // Open Edit Explore + await page.getByRole("button", { name: "Edit Explore" }).click(); + await gotoNavEntry(page, AD_BIDS_METRICS_PATH); // Add timestamp column back const addBackTimestampColumnDoc = `# Visit https://docs.rilldata.com/reference/project-files to learn more about Rill project files. type: metrics_view - title: "AdBids_model_dashboard_rename" + title: "AdBids_model_dashboard" model: "AdBids_model" default_time_range: "" smallest_time_grain: "week" @@ -305,6 +276,7 @@ test.describe("explores", () => { `; await watcher.updateAndWaitForDashboard(addBackTimestampColumnDoc); + await gotoNavEntry(page, AD_BIDS_EXPLORE_PATH); // Preview await page.getByRole("button", { name: "Preview" }).click(); @@ -312,28 +284,17 @@ test.describe("explores", () => { // Assert that time dimension is now week await expect(timeGrainSelector).toHaveText("by Week"); - // Open Edit Metrics - await page.getByRole("button", { name: "Edit Metrics" }).click(); + // Open Edit Explore + await page.getByRole("button", { name: "Edit Explore" }).click(); - const deleteOnlyMeasureDoc = `# Visit https://docs.rilldata.com/reference/project-files to learn more about Rill project files. + const deleteOnlyMeasureDoc = ` +type: explore - type: metrics_view - title: "AdBids_model_dashboard_rename" - model: "AdBids_model" - default_time_range: "" - smallest_time_grain: "week" - timeseries: "timestamp" - measures: [] - dimensions: - - name: publisher - label: Publisher - column: publisher - description: "" - - name: domain - label: Domain - column: domain - description: "" +title: "Adbids dashboard renamed" +metrics_view: AdBids_model_metrics +dimensions: '*' +measures: [] `; await updateCodeEditor(page, deleteOnlyMeasureDoc); // Check warning message appears, Preview is disabled @@ -343,11 +304,26 @@ test.describe("explores", () => { await expect(page.getByRole("button", { name: "Preview" })).toBeDisabled(); + // add back the measure to explore + await updateCodeEditor( + page, + ` +type: explore + +title: "Adbids dashboard renamed" +metrics_view: AdBids_model_metrics + +dimensions: '*' +measures: '*' + `, + ); + await gotoNavEntry(page, AD_BIDS_METRICS_PATH); + // Add back the total rows measure for const docWithIncompleteMeasure = `# Visit https://docs.rilldata.com/reference/project-files to learn more about Rill project files. type: metrics_view - title: "AdBids_model_dashboard_rename" + title: "AdBids_model_dashboard" model: "AdBids_model" default_time_range: "" smallest_time_grain: "week" @@ -367,7 +343,9 @@ test.describe("explores", () => { `; await updateCodeEditor(page, docWithIncompleteMeasure); + await gotoNavEntry(page, AD_BIDS_EXPLORE_PATH); await expect(page.getByRole("button", { name: "Preview" })).toBeDisabled(); + await gotoNavEntry(page, AD_BIDS_METRICS_PATH); const docWithCompleteMeasure = `# Visit https://docs.rilldata.com/reference/project-files to learn more about Rill project files. @@ -398,6 +376,7 @@ dimensions: `; await updateCodeEditor(page, docWithCompleteMeasure); + await gotoNavEntry(page, AD_BIDS_EXPLORE_PATH); await expect(page.getByRole("button", { name: "Preview" })).toBeEnabled(); // Preview @@ -490,7 +469,7 @@ dimensions: await expect(page.getByText("~0%")).toBeVisible(); - // await page.getByRole("button", { name: "Edit Metrics" }).click(); + // await page.getByRole("button", { name: "Edit Explore" }).click(); // go back to the dashboard diff --git a/web-local/tests/explores/leaderboard-context-column.spec.ts b/web-local/tests/explores/leaderboard-context-column.spec.ts index c83bc7fad33..6fb87fb3305 100644 --- a/web-local/tests/explores/leaderboard-context-column.spec.ts +++ b/web-local/tests/explores/leaderboard-context-column.spec.ts @@ -1,5 +1,10 @@ import { expect } from "@playwright/test"; +import { + AD_BIDS_EXPLORE_PATH, + AD_BIDS_METRICS_PATH, +} from "web-local/tests/utils/dataSpecifcHelpers"; import { ResourceWatcher } from "web-local/tests/utils/ResourceWatcher"; +import { gotoNavEntry } from "web-local/tests/utils/waitHelpers"; import { clickMenuButton } from "../utils/commonHelpers"; import { interactWithTimeRangeMenu } from "web-local/tests/utils/metricsViewHelpers"; import { test } from "../utils/test"; @@ -11,6 +16,8 @@ test.describe("leaderboard context column", () => { test("Leaderboard context column", async ({ page }) => { const watcher = new ResourceWatcher(page); + await gotoNavEntry(page, AD_BIDS_METRICS_PATH); + // reset metrics, and add a metric with `valid_percent_of_total: true` const metricsWithValidPercentOfTotal = `# Visit https://docs.rilldata.com/reference/project-files to learn more about Rill project files. @@ -41,6 +48,7 @@ test.describe("leaderboard context column", () => { description: "" `; await watcher.updateAndWaitForDashboard(metricsWithValidPercentOfTotal); + await gotoNavEntry(page, AD_BIDS_EXPLORE_PATH); async function clickMenuItem(itemName: string, wait = true) { await clickMenuButton(page, itemName, "option"); diff --git a/web-local/tests/explores/number-formatting.spec.ts b/web-local/tests/explores/number-formatting.spec.ts index 0aea56454dc..47e6a3abe4b 100644 --- a/web-local/tests/explores/number-formatting.spec.ts +++ b/web-local/tests/explores/number-formatting.spec.ts @@ -1,7 +1,12 @@ import { useDashboardFlowTestSetup } from "web-local/tests/explores/dashboard-flow-test-setup"; +import { + AD_BIDS_EXPLORE_PATH, + AD_BIDS_METRICS_PATH, +} from "web-local/tests/utils/dataSpecifcHelpers"; import { ResourceWatcher } from "web-local/tests/utils/ResourceWatcher"; import { interactWithTimeRangeMenu } from "web-local/tests/utils/metricsViewHelpers"; import { expect } from "@playwright/test"; +import { gotoNavEntry } from "web-local/tests/utils/waitHelpers"; import { test } from "../utils/test"; test.describe("smoke tests for number formatting", () => { @@ -10,6 +15,8 @@ test.describe("smoke tests for number formatting", () => { test("smoke tests for number formatting", async ({ page }) => { const watcher = new ResourceWatcher(page); + await gotoNavEntry(page, AD_BIDS_METRICS_PATH); + // This is a metrics spec with all available formatting options const formatterFlowDashboard = `# Visit https://docs.rilldata.com/reference/project-files to learn more about Rill project files. title: "AdBids_model_dashboard" @@ -65,6 +72,7 @@ dimensions: // update the code editor with the new spec await watcher.updateAndWaitForDashboard(formatterFlowDashboard); + await gotoNavEntry(page, AD_BIDS_EXPLORE_PATH); const previewButton = page.getByRole("button", { name: "Preview" }); diff --git a/web-local/tests/explores/time-controls-from-config.spec.ts b/web-local/tests/explores/time-controls-from-config.spec.ts index 45c8f75ab9f..bebe3ea14ec 100644 --- a/web-local/tests/explores/time-controls-from-config.spec.ts +++ b/web-local/tests/explores/time-controls-from-config.spec.ts @@ -4,18 +4,17 @@ import { interactWithTimeRangeMenu } from "web-local/tests/utils/metricsViewHelp import { ResourceWatcher } from "web-local/tests/utils/ResourceWatcher"; import { test } from "../utils/test"; -test.describe("time controls settings from dashboard config", () => { +test.describe("time controls settings from explore preset", () => { // dashboard test setup useDashboardFlowTestSetup(); - test("default_time_range", async ({ page }) => { + test("preset time_range", async ({ page }) => { const watcher = new ResourceWatcher(page); // Set a time range that is one of the supported presets - await watcher.updateAndWaitForDashboard( - getDashboardYaml(`default_time_range: "P4W" -default_comparison: - mode: time + await watcher.updateAndWaitForExplore( + getDashboardYaml(`time_range: "P4W" + comparison_mode: time `), ); // Preview @@ -24,15 +23,16 @@ default_comparison: // Time range has changed await expect(page.getByText("Last 4 Weeks")).toBeVisible(); // Data has changed as well - await expect(page.getByText("Total rows 26.7k -4.7k -15%")).toBeVisible(); + await expect( + page.getByText("Total records 26.7k -4.7k -15%"), + ).toBeVisible(); await expect(page.getByText("Facebook 7.0k 2.8k 67%")).toBeVisible(); await page.getByRole("button", { name: "Edit Metrics" }).click(); // Set a time range that is one of the period to date preset - await watcher.updateAndWaitForDashboard( - getDashboardYaml(`default_time_range: "rill-WTD" -default_comparison: - mode: time + await watcher.updateAndWaitForExplore( + getDashboardYaml(`time_range: "rill-WTD" + comparison_mode: time `), ); // Preview @@ -41,7 +41,7 @@ default_comparison: // Time range has changed await expect(page.getByText("Week to Date")).toBeVisible(); // Data has changed as well - await expect(page.getByText("Total rows 3.4k +156 5%")).toBeVisible(); + await expect(page.getByText("Total records 3.4k +156 5%")).toBeVisible(); await expect(page.getByText("Facebook 889 36 4%")).toBeVisible(); // Select a different time range @@ -53,15 +53,14 @@ default_comparison: page.getByRole("menuitem", { name: "Last 7 Days" }), ).not.toBeVisible(); // Data has changed - await expect(page.getByText("Total rows 7.9k -15 ~0%")).toBeVisible(); + await expect(page.getByText("Total records 7.9k -15 ~0%")).toBeVisible(); await expect(page.getByText("Facebook 2.0k -51 -2%")).toBeVisible(); await page.getByRole("button", { name: "Edit Metrics" }).click(); // Set a time range that is not one of the supported presets - await watcher.updateAndWaitForDashboard( - getDashboardYaml(`default_time_range: "P2W" -default_comparison: - mode: time + await watcher.updateAndWaitForExplore( + getDashboardYaml(`time_range: "P2W" + comparison_mode: time `), ); // Preview @@ -70,18 +69,19 @@ default_comparison: // Time range has changed await expect(page.getByText("Last 2 Weeks")).toBeVisible(); // Data has changed as well - await expect(page.getByText("Total rows 11.2k -4.3k -28%")).toBeVisible(); + await expect( + page.getByText("Total records 11.2k -4.3k -28%"), + ).toBeVisible(); await expect(page.getByText("Facebook 2.9k -1.2k -29%")).toBeVisible(); }); - test("default_comparison", async ({ page }) => { + test("preset comparison_modes", async ({ page }) => { const watcher = new ResourceWatcher(page); // Set comparison to time - await watcher.updateAndWaitForDashboard( - getDashboardYaml(`default_time_range: "P4W" -default_comparison: - mode: time + await watcher.updateAndWaitForExplore( + getDashboardYaml(`time_range: "P4W" + comparison_mode: time `), ); // Preview @@ -92,11 +92,10 @@ default_comparison: await page.getByRole("button", { name: "Edit Metrics" }).click(); // Set comparison to dimension - await watcher.updateAndWaitForDashboard( - getDashboardYaml(`default_time_range: "P4W" -default_comparison: - mode: dimension - dimension: publisher + await watcher.updateAndWaitForExplore( + getDashboardYaml(`time_range: "P4W" + comparison_mode: dimension + comparison_dimension: publisher `), ); // Preview @@ -112,31 +111,32 @@ default_comparison: await page.getByRole("button", { name: "Edit Metrics" }).click(); // Set comparison to none - await watcher.updateAndWaitForDashboard( - getDashboardYaml(`default_time_range: "P4W" -default_comparison: - mode: none + await watcher.updateAndWaitForExplore( + getDashboardYaml(`time_range: "P4W" + comparison_mode: dimension `), ); // Preview await page.getByRole("button", { name: "Preview" }).click(); }); - test("available_time_ranges", async ({ page }) => { + test("preset time_ranges", async ({ page }) => { const watcher = new ResourceWatcher(page); - await watcher.updateAndWaitForDashboard( - getDashboardYaml(`default_time_range: "P4W" -default_comparison: - mode: time -available_time_ranges: - - PT6H - - range: P5D - comparison_offsets: - - rill-PP - - rill-PW - - P4W - - rill-WTD - - rill-MTD`), + await watcher.updateAndWaitForExplore( + getDashboardYaml( + `time_range: "P4W" + comparison_mode: dimension +`, + `time_ranges: +- PT6H +- range: P5D + comparison_offsets: + - rill-PP + - rill-PW +- P4W +- rill-WTD +- rill-MTD`, + ), ); // Preview await page.getByRole("button", { name: "Preview" }).click(); @@ -163,7 +163,7 @@ available_time_ranges: page.getByRole("menu", { name: "Select time range" }), ).not.toBeVisible(); // Assert data has changed - await expect(page.getByText("Total rows 272 -23 -8%")).toBeVisible(); + await expect(page.getByText("Total records 272 -23 -8%")).toBeVisible(); await expect(page.getByText("Facebook 68 -3 -4%")).toBeVisible(); // Open the time comparison @@ -186,7 +186,7 @@ available_time_ranges: page.getByRole("menu", { name: "Time comparison selector" }), ).not.toBeVisible(); // Assert data has changed - await expect(page.getByText("Total rows 272 -18 -6%")).toBeVisible(); + await expect(page.getByText("Total records 272 -18 -6%")).toBeVisible(); await expect(page.getByText("Facebook 68 -24 -26%")).toBeVisible(); // Select Last 5 days @@ -194,7 +194,7 @@ available_time_ranges: await page.getByRole("menuitem", { name: "Last 5 Days" }).click(); }); // Assert data has changed - await expect(page.getByText("Total rows 5.6k +16 ~0%")).toBeVisible(); + await expect(page.getByText("Total records 5.6k +16 ~0%")).toBeVisible(); await page.pause(); await expect(page.getByText("Facebook 1.5k -25 -2%")).toBeVisible(); @@ -213,33 +213,22 @@ available_time_ranges: page.getByRole("menu", { name: "Time comparison selector" }), ).not.toBeVisible(); // Assert data has changed - await expect(page.getByText("Total rows 5.6k -23 ~0%")).toBeVisible(); + await expect(page.getByText("Total records 5.6k -23 ~0%")).toBeVisible(); await expect(page.getByText("Facebook 1.5k -6 ~0%")).toBeVisible(); }); }); -function getDashboardYaml(defaults: string) { +function getDashboardYaml(defaults: string, extras = "") { return ` -# Visit https://docs.rilldata.com/reference/project-files to learn more about Rill project files. - -type: metrics_view -title: "AdBids_model_dashboard_rename" -model: "AdBids_model" -timeseries: "timestamp" -${defaults} -measures: - - label: Total rows - expression: count(*) - name: total_rows - description: Total number of records present -dimensions: - - name: publisher - label: Publisher - column: publisher - description: "" - - name: domain - label: Domain Name - column: domain - description: "" +type: explore +title: "AdBids_model_metrics_explore" +metrics_view: "AdBids_model_metrics" +${extras} + +measures: '*' +dimensions: '*' + +presets: +- ${defaults} `; } diff --git a/web-local/tests/models.spec.ts b/web-local/tests/models.spec.ts index 7304e89e80f..66cb5687974 100644 --- a/web-local/tests/models.spec.ts +++ b/web-local/tests/models.spec.ts @@ -40,7 +40,9 @@ test.describe("models", () => { // Query parse error await updateCodeEditor(page, "select from AdBids"); - await wrapRetryAssertion(() => modelHasError(page, true, "Catalog Error")); + await wrapRetryAssertion(() => + modelHasError(page, true, "SELECT clause without selection list"), + ); }); test("Rename and delete model", async ({ page }) => { diff --git a/web-local/tests/utils/ResourceWatcher.ts b/web-local/tests/utils/ResourceWatcher.ts index 9ef383b79e3..e7d72539d64 100644 --- a/web-local/tests/utils/ResourceWatcher.ts +++ b/web-local/tests/utils/ResourceWatcher.ts @@ -11,23 +11,41 @@ export class ResourceWatcher { page.on("console", (e) => { const matches = ResourceWatcherLogRegex.exec(e.text()); if (!matches || matches.length < 4) return; - const [, status, , name] = matches; - this.statuses.set(name, status); + const [, status, type, name] = matches; + this.statuses.set(`${type}__${name}`, status); + console.log(`[${status}] ${type}/${name}`); }); } - public async waitForResource(name: string) { - return waitUntil(() => this.statuses.get(name) === "RECONCILE_STATUS_IDLE"); + private async waitForResource( + type: string, + name = "AdBids_model_metrics_explore", + ) { + return waitUntil( + () => this.statuses.get(`${type}__${name}`) === "RECONCILE_STATUS_IDLE", + 2000, + ); + } + + public async updateAndWaitForExplore( + code: string, + name = "AdBids_model_metrics_explore", + ) { + this.statuses.delete(name); // clear older state + return Promise.all([ + updateCodeEditor(this.page, code), + this.waitForResource("rill.runtime.v1.Explore", name), + ]); } public async updateAndWaitForDashboard( code: string, - name = "AdBids_model_dashboard", + name = "AdBids_model_metrics", ) { this.statuses.delete(name); // clear older state return Promise.all([ updateCodeEditor(this.page, code), - this.waitForResource(name), + this.waitForResource("rill.runtime.v1.MetricsView", name), ]); } } diff --git a/web-local/tests/utils/commonHelpers.ts b/web-local/tests/utils/commonHelpers.ts index 51cb7dce59a..d2799f8d468 100644 --- a/web-local/tests/utils/commonHelpers.ts +++ b/web-local/tests/utils/commonHelpers.ts @@ -1,16 +1,6 @@ import { asyncWaitUntil } from "@rilldata/web-common/lib/waitUtils"; -import type { - V1GetResourceResponse, - V1ListResourcesResponse, -} from "@rilldata/web-common/runtime-client"; import type { Page } from "playwright"; -export enum TestEntityType { - Source = "source", - Model = "model", - Dashboard = "dashboard", -} - export async function openFileNavEntryContextMenu( page: Page, filePath: string, @@ -142,40 +132,3 @@ export async function updateCodeEditor(page: Page, code: string) { await page.keyboard.insertText(code); await page.waitForTimeout(500); } - -export async function waitForValidResource( - page: Page, - name: string, - kind: string, -) { - await page.waitForResponse(async (response) => { - const responseUrl = response.url(); - const getResourceRequest = responseUrl.includes( - `/v1/instances/default/resource?name.kind=${kind}&name.name=${name}`, - ); - - const listResourceRequest = responseUrl.includes( - `/v1/instances/default/resource?name.kind=${kind}`, - ); - - if (getResourceRequest) { - try { - const resp = (await response.json()) as V1GetResourceResponse; - return resp.resource?.meta?.reconcileStatus === "RECONCILE_STATUS_IDLE"; - } catch (err) { - return false; - } - } else if (listResourceRequest) { - try { - const resp = (await response.json()) as V1ListResourcesResponse; - return ( - resp.resources?.find((r) => r.meta?.name === name)?.meta - ?.reconcileStatus === "RECONCILE_STATUS_IDLE" - ); - } catch (err) { - return false; - } - } - return false; - }); -} diff --git a/web-local/tests/utils/dataSpecifcHelpers.ts b/web-local/tests/utils/dataSpecifcHelpers.ts index c221d0798f4..53553f93b5b 100644 --- a/web-local/tests/utils/dataSpecifcHelpers.ts +++ b/web-local/tests/utils/dataSpecifcHelpers.ts @@ -8,6 +8,10 @@ import { assertLeaderboards } from "web-local/tests/utils/metricsViewHelpers"; import { createModel } from "./modelHelpers"; import { uploadFile, waitForSource } from "./sourceHelpers"; +export const AD_BIDS_METRICS_PATH = "/metrics/AdBids_model_metrics.yaml"; +export const AD_BIDS_EXPLORE_PATH = + "/explore-dashboards/AdBids_model_metrics_explore.yaml"; + export async function createAdBidsModel(page: Page) { await Promise.all([ waitForSource(page, "/sources/AdBids.yaml", [ diff --git a/web-local/tests/utils/exploreHelpers.ts b/web-local/tests/utils/exploreHelpers.ts index b491f53a80e..0246cd6c8c9 100644 --- a/web-local/tests/utils/exploreHelpers.ts +++ b/web-local/tests/utils/exploreHelpers.ts @@ -7,8 +7,8 @@ import { waitForFileNavEntry } from "web-local/tests/utils/waitHelpers"; export async function createExploreFromSource( page: Page, - sourcePath: string, - metricsViewPath: string, + sourcePath = "/sources/AdBids.yaml", + metricsViewPath = "/metrics/AdBids_metrics.yaml", ) { await openFileNavEntryContextMenu(page, sourcePath); await clickMenuButton(page, "Generate metrics"); @@ -18,11 +18,15 @@ export async function createExploreFromSource( export async function createExploreFromModel( page: Page, - modelPath: string, - metricsViewPath: string, + modelPath = "/models/AdBids_model.sql", + metricsViewPath = "/metrics/AdBids_model_metrics.yaml", + explorePath = "/explore-dashboards/AdBids_model_metrics_explore.yaml", ) { await openFileNavEntryContextMenu(page, modelPath); await clickMenuButton(page, "Generate metrics"); await waitForFileNavEntry(page, metricsViewPath, true); - await page.getByText("Create Explore dashboard").click(); + await Promise.all([ + waitForFileNavEntry(page, explorePath, true), + page.getByText("Create Explore dashboard").click(), + ]); } diff --git a/web-local/tests/utils/waitHelpers.ts b/web-local/tests/utils/waitHelpers.ts index 3d846f1cc54..132cfa1420a 100644 --- a/web-local/tests/utils/waitHelpers.ts +++ b/web-local/tests/utils/waitHelpers.ts @@ -14,6 +14,11 @@ export async function waitForFileNavEntry( } } +export async function gotoNavEntry(page: Page, filePath: string) { + await page.getByLabel(`${filePath} Nav Entry`).click(); + return waitForFileNavEntry(page, filePath, true); +} + export async function fileNotPresent(page: Page, filePath: string) { await asyncWait(100); await expect(getFileNavEntry(page, filePath)).toBeHidden();