Unified · Split
| @@ -55,8 +55,8 @@ scenario( · 54 unmodified lines | |||
| 55 | await headerName.waitFor(); | 55 | await headerName.waitFor(); |
| 56 | }); | 56 | }); |
| 57 | 57 | ||
| 58 | await step("Add the source with both methods", async () => { | 58 | await step("Add the integration with both methods", async () => { |
| 59 | await page.getByRole("button", { name: "Add source" }).click(); | 59 | await page.getByRole("button", { name: "Add integration" }).click(); |
| 60 | // onComplete routes to the new integration's detail hub. | 60 | // onComplete routes to the new integration's detail hub. |
| 61 | await page.waitForURL(/\/integrations\/(?!add\b)[^/?]+$/, { timeout: 30_000 }); | 61 | await page.waitForURL(/\/integrations\/(?!add\b)[^/?]+$/, { timeout: 30_000 }); |
| 62 | await page.getByText("Connections").first().waitFor(); | 62 | await page.getByText("Connections").first().waitFor(); |
| @@ -26,7 +26,7 @@ scenario( · 25 unmodified lines | |||
| 26 | const dialog = page.getByRole("dialog", { name: "Connect an integration" }); | 26 | const dialog = page.getByRole("dialog", { name: "Connect an integration" }); |
| 27 | await dialog.getByRole("link", { name: /^Google Photos\b/ }).click(); | 27 | await dialog.getByRole("link", { name: /^Google Photos\b/ }).click(); |
| 28 | await page.waitForURL(/\/integrations\/add\/google/); | 28 | await page.waitForURL(/\/integrations\/add\/google/); |
| 29 | await page.getByRole("heading", { name: "Add Google" }).waitFor(); | 29 | await page.getByRole("heading", { name: "Add Google integration" }).waitFor(); |
| 30 | }); | 30 | }); |
| 31 | 31 | ||
| 32 | await step("The Photos preset defaults to the focused namespace and products", async () => { | 32 | await step("The Photos preset defaults to the focused namespace and products", async () => { |
| @@ -44,8 +44,8 @@ scenario( · 43 unmodified lines | |||
| 44 | await page.getByText("Method 1 · Detected").waitFor(); | 44 | await page.getByText("Method 1 · Detected").waitFor(); |
| 45 | }); | 45 | }); |
| 46 | 46 | ||
| 47 | await step("Add the source", async () => { | 47 | await step("Add the integration", async () => { |
| 48 | await page.getByRole("button", { name: "Add source" }).click(); | 48 | await page.getByRole("button", { name: "Add integration" }).click(); |
| 49 | await page.waitForURL(/\/integrations\/(?!add\b)[^/?]+$/, { timeout: 30_000 }); | 49 | await page.waitForURL(/\/integrations\/(?!add\b)[^/?]+$/, { timeout: 30_000 }); |
| 50 | await page.getByText("Connections").first().waitFor(); | 50 | await page.getByText("Connections").first().waitFor(); |
| 51 | }); | 51 | }); |
| @@ -45,7 +45,7 @@ scenario( · 44 unmodified lines | |||
| 45 | await page.goto("/integrations/add/google", { | 45 | await page.goto("/integrations/add/google", { |
| 46 | waitUntil: "domcontentloaded", | 46 | waitUntil: "domcontentloaded", |
| 47 | }); | 47 | }); |
| 48 | await page.getByRole("heading", { name: "Add Google" }).waitFor(); | 48 | await page.getByRole("heading", { name: "Add Google integration" }).waitFor(); |
| 49 | await page.getByText("Customize your Google connection").waitFor(); | 49 | await page.getByText("Customize your Google connection").waitFor(); |
| 50 | await page.getByText("Gmail").first().waitFor(); | 50 | await page.getByText("Gmail").first().waitFor(); |
| 51 | await page.getByText("Google Calendar").first().waitFor(); | 51 | await page.getByText("Google Calendar").first().waitFor(); |
| @@ -55,7 +55,7 @@ scenario( · 3 unmodified lines | |||
| 55 | await page.goto("/integrations/add/microsoft", { | 55 | await page.goto("/integrations/add/microsoft", { |
| 56 | waitUntil: "domcontentloaded", | 56 | waitUntil: "domcontentloaded", |
| 57 | }); | 57 | }); |
| 58 | await page.getByRole("heading", { name: "Add Microsoft Graph" }).waitFor(); | 58 | await page.getByRole("heading", { name: "Add Microsoft integration" }).waitFor(); |
| 59 | await page.getByText("Customize Microsoft Graph").waitFor(); | 59 | await page.getByText("Customize Microsoft Graph").waitFor(); |
| 60 | expect(await page.getByText("All Microsoft Graph", { exact: true }).count()).toBe(0); | 60 | expect(await page.getByText("All Microsoft Graph", { exact: true }).count()).toBe(0); |
| 61 | await page.getByText("Productivity").waitFor(); | 61 | await page.getByText("Productivity").waitFor(); |
| @@ -64,8 +64,8 @@ scenario( · 63 unmodified lines | |||
| 64 | await page.getByPlaceholder("Authorization").last().waitFor(); | 64 | await page.getByPlaceholder("Authorization").last().waitFor(); |
| 65 | }); | 65 | }); |
| 66 | 66 | ||
| 67 | await step("Add the source with both methods", async () => { | 67 | await step("Add the integration with both methods", async () => { |
| 68 | await page.getByRole("button", { name: "Add source" }).click(); | 68 | await page.getByRole("button", { name: "Add integration" }).click(); |
| 69 | await page.waitForURL(/\/integrations\/(?!add\b)[^/?]+$/, { | 69 | await page.waitForURL(/\/integrations\/(?!add\b)[^/?]+$/, { |
| 70 | timeout: 30_000, | 70 | timeout: 30_000, |
| 71 | }); | 71 | }); |
| @@ -67,9 +67,9 @@ scenario( · 66 unmodified lines | |||
| 67 | await page.getByText("Auth required").first().waitFor(); | 67 | await page.getByText("Auth required").first().waitFor(); |
| 68 | }); | 68 | }); |
| 69 | 69 | ||
| 70 | await step("Add the source with the declared method", async () => { | 70 | await step("Add the integration with the declared method", async () => { |
| 71 | await page.getByPlaceholder("e.g. Linear").fill(name); | 71 | await page.getByPlaceholder("e.g. Linear").fill(name); |
| 72 | await page.getByRole("button", { name: "Add source" }).click(); | 72 | await page.getByRole("button", { name: "Add integration" }).click(); |
| 73 | // onComplete routes to the new integration's detail hub. | 73 | // onComplete routes to the new integration's detail hub. |
| 74 | await page.waitForURL(/\/integrations\/(?!add\b)[^/?]+$/, { timeout: 30_000 }); | 74 | await page.waitForURL(/\/integrations\/(?!add\b)[^/?]+$/, { timeout: 30_000 }); |
| 75 | const landedSlug = new URL(page.url()).pathname.split("/").filter(Boolean).at(-1); | 75 | const landedSlug = new URL(page.url()).pathname.split("/").filter(Boolean).at(-1); |
| @@ -42,9 +42,9 @@ scenario( · 41 unmodified lines | |||
| 42 | await page.getByText("OAuth metadata is discovered from this server").waitFor(); | 42 | await page.getByText("OAuth metadata is discovered from this server").waitFor(); |
| 43 | }); | 43 | }); |
| 44 | 44 | ||
| 45 | await step("Add the PostHog MCP source", async () => { | 45 | await step("Add the PostHog MCP integration", async () => { |
| 46 | await page.getByPlaceholder("e.g. Linear").fill(displayName); | 46 | await page.getByPlaceholder("e.g. Linear").fill(displayName); |
| 47 | await page.getByRole("button", { name: "Add source" }).click(); | 47 | await page.getByRole("button", { name: "Add integration" }).click(); |
| 48 | await page.waitForURL(/\/integrations\/(?!add\b)[^/?]+$/, { timeout: 30_000 }); | 48 | await page.waitForURL(/\/integrations\/(?!add\b)[^/?]+$/, { timeout: 30_000 }); |
| 49 | const landedSlug = new URL(page.url()).pathname.split("/").filter(Boolean).at(-1); | 49 | const landedSlug = new URL(page.url()).pathname.split("/").filter(Boolean).at(-1); |
| 50 | expect(landedSlug, "the add flow lands on the created integration").toBe(String(slug)); | 50 | expect(landedSlug, "the add flow lands on the created integration").toBe(String(slug)); |