Skip to content
Merged
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
590b047
Added Database checks to the onboarding flow
O-Bots Feb 22, 2026
d0debad
Added compatibility page setup
O-Bots Feb 25, 2026
543d5e5
Finished up the onboarding flow suite
O-Bots Mar 4, 2026
4293606
.
O-Bots Mar 4, 2026
03d957a
Fix: Merge conflict
O-Bots Mar 11, 2026
5283bec
.
O-Bots Mar 13, 2026
f4b1014
Fix: Added fix for None discriptive error issue #36
O-Bots Mar 15, 2026
d3bd1cb
Linting and Prettier
O-Bots Mar 15, 2026
45fc0e8
Minor cleaning
MartinBraquet Mar 15, 2026
dbca768
Organizing helper func
O-Bots Mar 16, 2026
53c048a
Added Google account to the Onboarding flow
O-Bots Mar 17, 2026
bd27bf0
Added account cleanup for google accounts
O-Bots Mar 18, 2026
b7057e2
Started work on Sign-in tests
O-Bots Mar 25, 2026
b6e0c22
Linting and Prettier
O-Bots Mar 25, 2026
992db24
Added checks to the deleteUser func to check if the accout exists
O-Bots Mar 26, 2026
064bbfb
Linting and Prettier
O-Bots Mar 26, 2026
de476bd
Added POM's for social and organisation page
O-Bots Mar 31, 2026
6b1dec0
Formatting update, fixed homePage locator for signin
O-Bots Apr 2, 2026
a750776
.
O-Bots Apr 2, 2026
e21de93
.
O-Bots Apr 2, 2026
851992b
.
O-Bots Apr 2, 2026
c4fc76d
Coderabbitai fix's
O-Bots Apr 2, 2026
615f64d
Fix
MartinBraquet Apr 3, 2026
dcd7e06
Improve test utilities and stabilize onboarding flow tests
MartinBraquet Apr 3, 2026
bdec007
Changes requested
O-Bots Apr 3, 2026
213757c
Seperated deletion tests from onboarding
O-Bots Apr 3, 2026
ada66a2
.
O-Bots Apr 4, 2026
4d2db53
Changed POM/Fixture structure to use an app class to instantiate the …
O-Bots Apr 4, 2026
9fbff67
Apply suggestion from @MartinBraquet
MartinBraquet Apr 4, 2026
ebba02c
Apply suggestion from @MartinBraquet
MartinBraquet Apr 4, 2026
071c046
Delete .vscode/settings.json
MartinBraquet Apr 4, 2026
4a452bd
Apply suggestion from @MartinBraquet
MartinBraquet Apr 4, 2026
b0b0c9a
Apply suggestions from code review
MartinBraquet Apr 4, 2026
8c78112
Apply suggestion from @MartinBraquet
MartinBraquet Apr 4, 2026
b339311
Apply suggestion from @MartinBraquet
MartinBraquet Apr 4, 2026
d432f2c
Linting and Prettier
O-Bots Apr 4, 2026
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
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"codium.codeCompletion.enable": false
}
2 changes: 1 addition & 1 deletion backend/api/tests/unit/get-profiles.unit.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ describe('loadProfiles', () => {
})

describe('when an error occurs', () => {
it('throw if there is no compatability', async () => {
it('throw if there is no compatibility', async () => {
const props = {
orderBy: 'compatibility_score',
}
Expand Down
1 change: 1 addition & 0 deletions playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ function getSupabaseEnv() {
}
}

Comment thread
MartinBraquet marked this conversation as resolved.

const supabaseEnv = getSupabaseEnv()

// Inject into process.env so Playwright and your app code can read them
Expand Down
1 change: 1 addition & 0 deletions tests/e2e/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"compilerOptions": {
"rootDir": "../../",
"module": "commonjs",
"jsx": "react-jsx",
"moduleResolution": "node",
Expand Down
3 changes: 1 addition & 2 deletions tests/e2e/utils/firebaseUtils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import axios from 'axios'

import {config} from '../web/SPEC_CONFIG'

export async function firebaseLoginEmailPassword(
Expand Down Expand Up @@ -73,4 +72,4 @@ export async function deleteAccount(idToken: any) {
}
throw err
}
}
}
60 changes: 5 additions & 55 deletions tests/e2e/web/fixtures/base.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,11 @@
import {test as base} from '@playwright/test'

import {AuthPage} from '../pages/AuthPage'
import {ComatibilityPage} from '../pages/compatibilityPage'
import {HomePage} from '../pages/homePage'
import {OnboardingPage} from '../pages/onboardingPage'
import {OrganizationPage} from '../pages/organizationPage'
import {ProfilePage} from '../pages/profilePage'
import {SettingsPage} from '../pages/settingsPage'
import {SignUpPage} from '../pages/signUpPage'
import {SocialPage} from '../pages/socialPage'
import {testAccounts, UserAccountInformation} from '../utils/accountInformation'
import {deleteUser} from '../utils/deleteUser'
import {getAuthAccountInfo} from '../utils/networkUtils'
import { App } from '../pages/app'

export const test = base.extend<{
homePage: HomePage
onboardingPage: OnboardingPage
signUpPage: SignUpPage
profilePage: ProfilePage
authPage: AuthPage
settingsPage: SettingsPage
socialPage: SocialPage
organizationPage: OrganizationPage
compatabilityPage: ComatibilityPage
cleanUpUsers: void
app: App
onboardingAccount: UserAccountInformation
fakerAccount: UserAccountInformation
specAccount: UserAccountInformation
Expand Down Expand Up @@ -62,41 +44,9 @@ export const test = base.extend<{
console.log('Cleaning up spec account...')
await deleteUser('Email/Password', account)
},
onboardingPage: async ({page}, use) => {
const onboardingPage = new OnboardingPage(page)
await use(onboardingPage)
},
homePage: async ({page}, use) => {
const homePage = new HomePage(page)
await use(homePage)
},
signUpPage: async ({page}, use) => {
const signUpPage = new SignUpPage(page)
await use(signUpPage)
},
authPage: async ({page}, use) => {
const authPage = new AuthPage(page)
await use(authPage)
},
profilePage: async ({page}, use) => {
const profilePage = new ProfilePage(page)
await use(profilePage)
},
compatabilityPage: async ({page}, use) => {
const compatibilityPage = new ComatibilityPage(page)
await use(compatibilityPage)
},
settingsPage: async ({page}, use) => {
const settingsPage = new SettingsPage(page)
await use(settingsPage)
},
socialPage: async ({page}, use) => {
const socialPage = new SocialPage(page)
await use(socialPage)
},
organizationPage: async ({page}, use) => {
const organizationPage = new OrganizationPage(page)
await use(organizationPage)
app: async ({page}, use) => {
const appPage = new App(page)
await use(appPage)
},
})

Expand Down
40 changes: 5 additions & 35 deletions tests/e2e/web/fixtures/signInFixture.ts
Original file line number Diff line number Diff line change
@@ -1,47 +1,17 @@
import {test as base} from '@playwright/test'
import {AuthPage} from '../pages/AuthPage'
import {HomePage} from '../pages/homePage'
import { App } from '../pages/app'
import {testAccounts, UserAccountInformation} from '../utils/accountInformation'
import { OnboardingPage } from '../pages/onboardingPage'
import { SignUpPage } from '../pages/signUpPage'
import { ProfilePage } from '../pages/profilePage'
import { SettingsPage } from '../pages/settingsPage'

export const test = base.extend<{
homePage: HomePage
onboardingPage: OnboardingPage
signUpPage: SignUpPage
profilePage: ProfilePage
settingsPage: SettingsPage
authPage: AuthPage
app: App
dev_one_account: UserAccountInformation
fakerAccount: UserAccountInformation
googleAccountOne: UserAccountInformation
googleAccountTwo: UserAccountInformation
}>({
homePage: async ({page}, use) => {
const homePage = new HomePage(page)
await use(homePage)
},
onboardingPage: async ({page}, use) => {
const onboardingPage = new OnboardingPage(page)
await use(onboardingPage)
},
signUpPage: async ({page}, use) => {
const signUpPage = new SignUpPage(page)
await use(signUpPage)
},
profilePage: async ({page}, use) => {
const profilePage = new ProfilePage(page)
await use(profilePage)
},
settingsPage: async ({page}, use) => {
const settingsPage = new SettingsPage(page)
await use(settingsPage)
},
authPage: async ({page}, use) => {
const authPage = new AuthPage(page)
await use(authPage)
app: async ({page}, use) => {
const appPage = new App(page)
await use(appPage)
},
dev_one_account: async ({}, use) => {
const account = testAccounts.dev_one_account()
Expand Down
78 changes: 78 additions & 0 deletions tests/e2e/web/pages/app.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { Page } from "@playwright/test";
import { UserAccountInformation } from "../utils/accountInformation";
import { AuthPage } from "./authPage";
import { ComatibilityPage } from "./compatibilityPage";
import { HomePage } from "./homePage";
import { OnboardingPage } from "./onboardingPage";
import { OrganizationPage } from "./organizationPage";
import { ProfilePage } from "./profilePage";
import { SettingsPage } from "./settingsPage";
import { SignUpPage } from "./signUpPage";
import { SocialPage } from "./socialPage";

export class App {
readonly auth: AuthPage
readonly compatibility: ComatibilityPage
readonly home: HomePage
readonly onboarding: OnboardingPage
readonly organization: OrganizationPage
readonly profile: ProfilePage
readonly settings: SettingsPage
readonly signUp: SignUpPage
readonly social: SocialPage

constructor(public readonly page: Page) {
this.auth = new AuthPage(page)
this.compatibility = new ComatibilityPage(page)
this.home = new HomePage(page)
this.onboarding = new OnboardingPage(page)
this.organization = new OrganizationPage(page)
this.profile = new ProfilePage(page)
this.settings = new SettingsPage(page)
this.signUp = new SignUpPage(page)
this.social = new SocialPage(page)
}

async deleteProfileFromSettings() {
await this.home.clickSettingsLink()
await this.settings.clickDeleteAccountButton()
await this.settings.fillDeleteAccountSurvey('Delete me')
await this.settings.clickDeleteAccountButton()
await this.home.verifyHomePageLinks()
}

async skipOnboardingHeadToProfile(account: UserAccountInformation) {
await this.onboarding.clickSkipOnboardingButton()
await this.signUp.fillDisplayName(account.display_name)
await this.signUp.fillUsername(account.username)
await this.signUp.clickNextButton()
await this.signUp.clickNextButton()
await this.profile.clickCloseButton()
await this.onboarding.clickRefineProfileButton()
}

async registerWithEmail(account: UserAccountInformation) {
await this.home.goToRegisterPage()
await this.auth.fillEmailField(account.email)
await this.auth.fillPasswordField(account.password)
await this.auth.clickSignUpWithEmailButton()
}

async signinWithEmail(
accountOrEmail: UserAccountInformation | string,
password?: string,
) {
const email = typeof accountOrEmail === 'string' ? accountOrEmail : accountOrEmail.email

const resolvedPassword = typeof accountOrEmail === 'string' ? password : accountOrEmail.password

if (!email || !resolvedPassword) {
throw new Error('Provide either an `account` or `email` and `password`.')
}

await this.home.goToSigninPage()
await this.auth.fillEmailField(email)
await this.auth.fillPasswordField(resolvedPassword)
await this.auth.clickSignInWithEmailButton()
}
}
File renamed without changes.
Loading
Loading