Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 24 additions & 1 deletion .github/playwright/impact-map.generated.json
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@
"playwright/e2e/Features/TeamsHierarchy.spec.ts",
"playwright/e2e/Features/TestSuiteMultiPipeline.spec.ts",
"playwright/e2e/Features/TestSuitePipelineRedeploy.spec.ts",
"playwright/e2e/Features/WelcomeScreen.spec.ts",
"playwright/e2e/Features/Workflows/GitSinkTokenMask.spec.ts",
"playwright/e2e/Flow/ApiServiceRest.spec.ts",
"playwright/e2e/Flow/Collect.spec.ts",
Expand Down Expand Up @@ -751,6 +752,7 @@
"playwright/e2e/Features/IncidentManager.spec.ts",
"playwright/e2e/Features/ProfilePlatformSettings.spec.ts",
"playwright/e2e/Features/ProfilePreferences.spec.ts",
"playwright/e2e/Features/WelcomeScreen.spec.ts",
"playwright/e2e/Pages/BotsProfile.spec.ts",
"playwright/e2e/Pages/CustomProperties.spec.ts"
]
Expand Down Expand Up @@ -827,6 +829,7 @@
"playwright/e2e/Features/Table.spec.ts",
"playwright/e2e/Features/TableSearch.spec.ts",
"playwright/e2e/Features/TableSorting.spec.ts",
"playwright/e2e/Features/WelcomeScreen.spec.ts",
"playwright/e2e/Features/Workflows/ChangeRequestReviewLifecycle.spec.ts",
"playwright/e2e/Features/Workflows/GitSinkTokenMask.spec.ts",
"playwright/e2e/Flow/ApiCollection.spec.ts",
Expand Down Expand Up @@ -3654,6 +3657,7 @@
"playwright/e2e/Features/TierWidget.spec.ts",
"playwright/e2e/Features/Topic.spec.ts",
"playwright/e2e/Features/UserProfileOnlineStatus.spec.ts",
"playwright/e2e/Features/WelcomeScreen.spec.ts",
"playwright/e2e/Features/Workflows/ChangeRequestReviewLifecycle.spec.ts",
"playwright/e2e/Features/Workflows/GitSinkTokenMask.spec.ts",
"playwright/e2e/Features/Workflows/NoOpWorkflowNodeConfig.spec.ts",
Expand Down Expand Up @@ -4208,6 +4212,7 @@
"playwright/e2e/Features/TestSuiteMultiPipeline.spec.ts",
"playwright/e2e/Features/TierWidget.spec.ts",
"playwright/e2e/Features/Topic.spec.ts",
"playwright/e2e/Features/WelcomeScreen.spec.ts",
"playwright/e2e/Features/Workflows/ChangeRequestReviewLifecycle.spec.ts",
"playwright/e2e/Features/Workflows/GitSinkTokenMask.spec.ts",
"playwright/e2e/Features/Workflows/NoOpWorkflowNodeConfig.spec.ts",
Expand Down Expand Up @@ -7917,7 +7922,8 @@
],
"specs": [
"playwright/e2e/Features/LandingPageWidgets/LandingPage.spec.ts",
"playwright/e2e/Features/LandingPageWidgets/LandingPageTopicWidgets.spec.ts"
"playwright/e2e/Features/LandingPageWidgets/LandingPageTopicWidgets.spec.ts",
"playwright/e2e/Features/WelcomeScreen.spec.ts"
]
},
{
Expand Down Expand Up @@ -7959,6 +7965,14 @@
"playwright/e2e/Pages/Users.spec.ts"
]
},
{
"sources": [
"openmetadata-ui/src/main/resources/ui/src/components/MyData/WelcomeScreen/WelcomeScreen.component.tsx"
],
"specs": [
"playwright/e2e/Features/WelcomeScreen.spec.ts"
]
},
{
"sources": [
"openmetadata-ui/src/main/resources/ui/src/components/MyData/Widgets/Common/TopicWidget/ConnectorBreakdown.tsx"
Expand Down Expand Up @@ -12162,6 +12176,7 @@
"playwright/e2e/Features/TierWidget.spec.ts",
"playwright/e2e/Features/Topic.spec.ts",
"playwright/e2e/Features/UserProfileOnlineStatus.spec.ts",
"playwright/e2e/Features/WelcomeScreen.spec.ts",
"playwright/e2e/Features/Workflows/ChangeRequestReviewLifecycle.spec.ts",
"playwright/e2e/Features/Workflows/GitSinkTokenMask.spec.ts",
"playwright/e2e/Features/Workflows/NoOpWorkflowNodeConfig.spec.ts",
Expand Down Expand Up @@ -13041,6 +13056,14 @@
"playwright/e2e/Flow/MetricListSearch.spec.ts"
]
},
{
"sources": [
"openmetadata-ui/src/main/resources/ui/src/pages/MyDataPage/MyDataPage.component.tsx"
],
"specs": [
"playwright/e2e/Features/WelcomeScreen.spec.ts"
]
},
{
"sources": [
"openmetadata-ui/src/main/resources/ui/src/pages/OnlineUsersPage/OnlineUsersPage.tsx"
Expand Down
19 changes: 19 additions & 0 deletions .github/playwright/impact-map.json
Original file line number Diff line number Diff line change
Expand Up @@ -1102,6 +1102,25 @@
"playwright/e2e/Features/SuggestionsSliderPermissions.spec.ts",
"playwright/e2e/Features/TagsSuggestion.spec.ts"
]
},
{
"_comment": "The first-login welcome screen and the post-deploy upgrade screen (the chunk-load ErrorFallback), with the brand hooks and artwork they render. WelcomeScreen.spec.ts drives the welcome screen in classic and AI mode (shown once, close, both actions, stays dismissed on the kept-alive AI home); AppModeAiPersonaLandsAtRoot.spec.ts covers the AI-mode landing route the gate wraps. No spec forces a chunk-load failure, so the upgrade screen is covered by ErrorFallback.test.tsx.",
"sources": [
"openmetadata-ui/src/main/resources/ui/src/pages/MyDataPage/**",
"openmetadata-ui/src/main/resources/ui/src/hooks/useFirstLoginWelcome.ts",
"openmetadata-ui/src/main/resources/ui/src/components/discovery/personal-space/personalSpace.module.tsx",
"openmetadata-ui/src/main/resources/ui/src/components/common/ErrorBoundary/**",
"openmetadata-ui/src/main/resources/ui/src/utils/BrandData/**",
"openmetadata-ui/src/main/resources/ui/src/assets/img/welcome-screen-*.svg",
"openmetadata-ui/src/main/resources/ui/src/assets/img/upgrade-screen-*.svg",
"openmetadata-ui/src/main/resources/ui/src/assets/img/welcome-screen.png",
"openmetadata-ui/src/main/resources/ui/src/assets/svg/om-upgrade.svg"
],
"projects": ["chromium"],
"specs": [
"playwright/e2e/Features/WelcomeScreen.spec.ts",
"playwright/e2e/Features/AppMode/AppModeAiPersonaLandsAtRoot.spec.ts"
]
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
/*
* Copyright 2026 Collate.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Page } from '@playwright/test';
import { DOMAIN_TAGS } from '../../constant/config';
import { clickIgnoringToasts } from '../../utils/common';
import { waitForAllLoadersToDisappear } from '../../utils/entity';
import { expect, test } from '../fixtures/pages';
import { enableAiAppMode } from '../Utils/appMode';

// The shared admin session seeds `loggedInUsers`, which is how every other spec
// keeps the welcome screen away. Drop it once per page — the session flag keeps
// a reload from dropping it again — so this page is the user's first login.
const asFirstLogin = (page: Page) =>
page.addInitScript(() => {
if (!sessionStorage.getItem('__pw_first_login')) {
localStorage.removeItem('loggedInUsers');
sessionStorage.setItem('__pw_first_login', '1');
}
});

const openHome = async (page: Page, path: string) => {
await page.goto(path, { waitUntil: 'domcontentloaded' });
await waitForAllLoadersToDisappear(page);
};

test.describe(
'First-login welcome screen',
{ tag: ['@Features', DOMAIN_TAGS.PLATFORM] },
() => {
test('shows once on the classic home and closes to the landing page', async ({
page,
}) => {
await asFirstLogin(page);
await openHome(page, '/my-data');

await test.step('the first visit shows the welcome screen', async () => {
await expect(page.getByTestId('welcome-screen')).toBeVisible();
await expect(page.getByTestId('welcome-screen-img')).toBeVisible();
});

await test.step('closing it shows the landing page', async () => {
await clickIgnoringToasts(page.getByTestId('welcome-screen-close-btn'));

await expect(page.getByTestId('home-page-surface')).toBeVisible();
await expect(page.getByTestId('welcome-screen')).toBeHidden();
});

await test.step('it does not come back on the next visit', async () => {
await page.reload({ waitUntil: 'domcontentloaded' });
await waitForAllLoadersToDisappear(page);

await expect(page.getByTestId('home-page-surface')).toBeVisible();
await expect(page.getByTestId('welcome-screen')).toBeHidden();
});
});

test('classic: connect a data source opens the database service wizard', async ({
page,
}) => {
await asFirstLogin(page);
await openHome(page, '/my-data');

await clickIgnoringToasts(page.getByTestId('welcome-screen-connect-btn'));

await expect(page).toHaveURL(/\/databaseServices\/add-service/);
});

test('classic: take a product tour opens the tour', async ({ page }) => {
await asFirstLogin(page);
await openHome(page, '/my-data');

await clickIgnoringToasts(page.getByTestId('welcome-screen-tour-btn'));

await expect(page).toHaveURL(/\/tour/);
});

test('AI mode: shows on the home, opens every connector, and stays dismissed', async ({
page,
}) => {
await asFirstLogin(page);
await enableAiAppMode(page);
await openHome(page, '/');

await test.step('the first visit shows the welcome screen', async () => {
await expect(page.getByTestId('welcome-screen')).toBeVisible();
});

await test.step('connect a data source opens every category', async () => {
await clickIgnoringToasts(
page.getByTestId('welcome-screen-connect-btn')
);

await expect(page).toHaveURL(/\/all\/add-service/);
});

await test.step('the kept-alive home does not show it again', async () => {
await page.goBack({ waitUntil: 'domcontentloaded' });
await waitForAllLoadersToDisappear(page);

await expect(page.getByTestId('home-landing-page')).toBeVisible();
await expect(page.getByTestId('welcome-screen')).toBeHidden();
});
});
}
);
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading