diff --git a/ui/app/components/footer.tsx b/ui/app/components/footer.tsx index e773472..0800eaf 100644 --- a/ui/app/components/footer.tsx +++ b/ui/app/components/footer.tsx @@ -7,6 +7,7 @@ const FooterComponent = () => { DATASET USED @@ -23,6 +24,7 @@ const FooterComponent = () => { README @@ -31,6 +33,7 @@ const FooterComponent = () => { FAQ diff --git a/ui/app/components/header.tsx b/ui/app/components/header.tsx index 677ae67..ab648d1 100644 --- a/ui/app/components/header.tsx +++ b/ui/app/components/header.tsx @@ -47,12 +47,14 @@ export function Header() { Sign up Start Free diff --git a/ui/tests/config/testData.ts b/ui/tests/config/testData.ts new file mode 100644 index 0000000..41febe4 --- /dev/null +++ b/ui/tests/config/testData.ts @@ -0,0 +1,9 @@ +import urls from '../config/urls.json'; + +export const navitems: { navItem: string; expectedRes: string }[] = [ + { navItem: "Home", expectedRes: urls.falkorDBUrl }, + { navItem: "Github", expectedRes: urls.benchmarkGithubUrl }, + { navItem: "Discord", expectedRes: urls.falkordbDiscordUrl }, + { navItem: "Sign up", expectedRes: urls.signUpUrl }, + { navItem: "Start Free", expectedRes: urls.startFreeUrl }, + ]; \ No newline at end of file diff --git a/ui/tests/logic/POM/mainPage.ts b/ui/tests/logic/POM/mainPage.ts index 6cb571b..9660f8a 100644 --- a/ui/tests/logic/POM/mainPage.ts +++ b/ui/tests/logic/POM/mainPage.ts @@ -4,14 +4,26 @@ import BasePage from "../../infra/ui/basePage"; export default class NavBarComponent extends BasePage { + /* Header Locators */ + private get falkorDBLogo(): Locator { return this.page.locator("//header//img[@alt='FalkorDB']") } + private get navBarSocialLink(): (navItem: string) => Locator { + return (navItem: string) => this.page.locator(`//a[@title="${navItem}"]`); + } + + private get navBarLink(): (navItem: string) => Locator { + return (navItem: string) => this.page.locator(`//a[contains(text(), '${navItem}')]`); + } + async clickOnFalkorLogo(): Promise { await this.falkorDBLogo.click(); } + /* Header Functionality */ + async clickOnFalkor(): Promise { await this.page.waitForLoadState('networkidle'); const [newPage] = await Promise.all([ @@ -20,4 +32,22 @@ export default class NavBarComponent extends BasePage { ]); return newPage } + + async getNavBarSocialLink(navItem : string): Promise { + await this.page.waitForLoadState('networkidle'); + const [newPage] = await Promise.all([ + this.page.waitForEvent('popup'), + this.navBarSocialLink(navItem).click(), + ]); + return newPage + } + + async getNavBarLink(navItem : string): Promise { + await this.page.waitForLoadState('networkidle'); + const [newPage] = await Promise.all([ + this.page.waitForEvent('popup'), + this.navBarLink(navItem).click(), + ]); + return newPage + } } \ No newline at end of file diff --git a/ui/tests/tests/header.spec.ts b/ui/tests/tests/header.spec.ts index f94b731..eab773a 100644 --- a/ui/tests/tests/header.spec.ts +++ b/ui/tests/tests/header.spec.ts @@ -2,6 +2,7 @@ import { test, expect } from '@playwright/test'; import BrowserWrapper from '../infra/ui/browserWrapper'; import MainPage from '../logic/POM/mainPage'; import urls from '../config/urls.json'; +import { navitems } from '../config/testData'; test.describe(' Navbar tests', () => { let browser: BrowserWrapper; @@ -19,4 +20,20 @@ test.describe(' Navbar tests', () => { const page = await header.clickOnFalkor(); expect(page.url()).toBe(urls.falkorDBUrl) }) + + navitems.slice(0,3).forEach(({navItem, expectedRes}) => { + test(`Verify clicking on ${navItem} redirects to specified ${navItem}`, async () => { + const header = await browser.createNewPage(MainPage, urls.baseUrl) + const page = await header.getNavBarSocialLink(navItem); + expect(page.url()).toBe(expectedRes) + }) + }) + + navitems.slice(3,5).forEach(({navItem, expectedRes}) => { + test(`Verify clicking on ${navItem} redirects to specified ${navItem}`, async () => { + const header = await browser.createNewPage(MainPage, urls.baseUrl) + const page = await header.getNavBarLink(navItem); + expect(page.url()).toBe(expectedRes) + }) + }) }); \ No newline at end of file