Skip to content

Commit 2994c22

Browse files
committed
test(e2e): added test for the vector search onboarding screen
re #RI-7432 #RI-7275
1 parent c2437b4 commit 2994c22

File tree

4 files changed

+123
-2
lines changed

4 files changed

+123
-2
lines changed

redisinsight/ui/src/pages/browser/BrowserPage.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,10 @@ const BrowserPage = () => {
296296
(arePanelsCollapsed && isRightPanelOpen)
297297

298298
return (
299-
<div className={`browserPage ${styles.container}`}>
299+
<div
300+
className={`browserPage ${styles.container}`}
301+
data-testid="browser-page"
302+
>
300303
{arePanelsCollapsed && isRightPanelOpen && !isBrowserFullScreen && (
301304
<EmptyButton
302305
icon={ArrowLeftIcon}

tests/playwright/pageObjects/browser-page.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import { AddElementInList } from '../helpers/constants'
99

1010
export class BrowserPage extends BasePage {
1111
private toast: Toast
12+
1213
// CSS Selectors
14+
public readonly browserPage: Locator
15+
public readonly browserTab: Locator
1316
public readonly cssSelectorGrid: Locator
1417
public readonly cssSelectorRows: Locator
1518
public readonly cssSelectorKey: Locator
@@ -274,6 +277,8 @@ export class BrowserPage extends BasePage {
274277
this.toast = new Toast(page)
275278

276279
// CSS Selectors
280+
this.browserTab = page.getByRole('tab', { name: 'Browse' })
281+
this.browserPage = page.getByTestId('browser-page')
277282
this.cssSelectorGrid = page.locator('[aria-label="grid"]')
278283
this.cssSelectorRows = page.locator('[aria-label="row"]')
279284
this.cssSelectorKey = page.locator('[data-testid^="key-"]')
@@ -626,6 +631,11 @@ export class BrowserPage extends BasePage {
626631
page.getByTestId(`ttl-${keyName}`)
627632
}
628633

634+
async navigateToBrowserPage(): Promise<void> {
635+
await this.browserTab.getByRole('paragraph').click()
636+
await this.waitForLocatorVisible(this.browserPage)
637+
}
638+
629639
async commonAddNewKey(keyName: string, TTL?: string): Promise<void> {
630640
await this.waitForLocatorNotVisible(this.progressLine)
631641
await this.waitForLocatorNotVisible(this.loader)

tests/playwright/pageObjects/pages/vector-search/vector-search-page.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ export class VectorSearchPage extends BasePage {
2121
public readonly rqeNotAvailableCard: Locator
2222
public readonly createRedisCloudDatabaseButton: Locator
2323

24+
// ONBOARDING
25+
public readonly onboardingContainer: Locator
26+
public readonly onboardingDismissButton: Locator
27+
public readonly onboardingGetStartedButton: Locator
28+
public readonly onboardingSkipButton: Locator
29+
2430
// EDITOR
2531
public readonly editorContainer: Locator
2632
public readonly editorViewLine: Locator
@@ -80,6 +86,24 @@ export class VectorSearchPage extends BasePage {
8086
name: 'Get Started For Free',
8187
})
8288

89+
// ONBOARDING
90+
this.onboardingContainer = page.getByTestId('vector-search-onboarding')
91+
this.onboardingDismissButton = this.onboardingContainer.getByTestId(
92+
'vector-search-onboarding--dismiss-button',
93+
)
94+
this.onboardingGetStartedButton = this.onboardingContainer.getByRole(
95+
'button',
96+
{
97+
name: 'Explore vector search',
98+
},
99+
)
100+
this.onboardingSkipButton = this.onboardingContainer.getByRole(
101+
'button',
102+
{
103+
name: 'Skip for now',
104+
},
105+
)
106+
83107
// EDITOR
84108
this.editorContainer = page.getByTestId('vector-search-query-editor')
85109
this.editorViewLine = this.editorContainer.locator('.view-line')
@@ -145,7 +169,12 @@ export class VectorSearchPage extends BasePage {
145169
}, forceOnboarding)
146170

147171
await this.searchTab.getByRole('paragraph').click()
148-
await this.waitForLocatorVisible(this.vectorSearchPage)
172+
173+
if (forceOnboarding) {
174+
await this.waitForLocatorVisible(this.onboardingContainer)
175+
} else {
176+
await this.waitForLocatorVisible(this.vectorSearchPage)
177+
}
149178
}
150179

151180
async navigateToCreateIndexPage(): Promise<void> {
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import { VectorSearchPage } from '../../pageObjects/pages/vector-search/vector-search-page'
2+
import { test, expect } from '../../fixtures/test'
3+
import {
4+
addStandaloneInstanceAndNavigateToIt,
5+
navigateToStandaloneInstance,
6+
} from '../../helpers/utils'
7+
import { CreateIndexPage } from '../../pageObjects/pages/vector-search/create-index-page'
8+
import { ossStandaloneV6Config } from '../../helpers/conf'
9+
import { BrowserPage } from 'tests/playwright/pageObjects'
10+
11+
test.describe('Vector Search - Onboarding', () => {
12+
let searchPage: VectorSearchPage
13+
let createIndexPage: CreateIndexPage
14+
let browserPage: BrowserPage
15+
let cleanupInstance: () => Promise<void>
16+
17+
test.beforeEach(async ({ page, api: { databaseService } }) => {
18+
searchPage = new VectorSearchPage(page)
19+
createIndexPage = new CreateIndexPage(page)
20+
browserPage = new BrowserPage(page)
21+
22+
cleanupInstance = await addStandaloneInstanceAndNavigateToIt(
23+
page,
24+
databaseService,
25+
ossStandaloneV6Config,
26+
)
27+
28+
await navigateToStandaloneInstance(page, ossStandaloneV6Config)
29+
await searchPage.navigateToVectorSearchPage({ forceOnboarding: true })
30+
})
31+
32+
test.afterEach(async () => {
33+
await cleanupInstance()
34+
})
35+
36+
test('should open "Create Index" flow when clicking on "Get started" button', async () => {
37+
// Verify that commands results are empty
38+
await searchPage.waitForLocatorVisible(searchPage.onboardingContainer)
39+
40+
// Click on "Get started" button
41+
await searchPage.onboardingGetStartedButton.click()
42+
43+
// Verify that "Create index" flow is opened
44+
await createIndexPage.verifyCreateIndexPageLoaded()
45+
})
46+
47+
test('should dismiss onboarding when clicking on "Skip for now" button', async () => {
48+
// Verify that onboarding screen is visible
49+
await searchPage.waitForLocatorVisible(searchPage.onboardingContainer)
50+
51+
// Click on "Skip for now" button
52+
await searchPage.onboardingSkipButton.click()
53+
54+
// Verify that onboarding screen is not visible
55+
await searchPage.waitForLocatorVisible(searchPage.vectorSearchPage)
56+
})
57+
58+
test('should dismiss onboarding when clicking on "X" button', async () => {
59+
// Verify that onboarding screen is visible
60+
await searchPage.waitForLocatorVisible(searchPage.onboardingContainer)
61+
62+
// Click on "X" button
63+
await searchPage.onboardingDismissButton.click()
64+
})
65+
66+
test('should not open the onboarding screen when it is already dismissed', async () => {
67+
// Verify that onboarding screen is visible
68+
await searchPage.waitForLocatorVisible(searchPage.onboardingContainer)
69+
70+
// Go to Browser page
71+
await browserPage.navigateToBrowserPage()
72+
73+
// Navigate back to vector search page
74+
await searchPage.navigateToVectorSearchPage()
75+
76+
// Verify that onboarding screen is not visible anymore
77+
await searchPage.waitForLocatorVisible(searchPage.vectorSearchPage)
78+
})
79+
})

0 commit comments

Comments
 (0)