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();