Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
3a1dd4c
Added Database checks to the onboarding flow
O-Bots Feb 22, 2026
f49cd0e
Added compatibility page setup
O-Bots Feb 25, 2026
bd4b52c
Finished up the onboarding flow suite
O-Bots Mar 4, 2026
25084fd
.
O-Bots Mar 4, 2026
f4fe146
Fix: Merge conflict
O-Bots Mar 11, 2026
0a45632
.
O-Bots Mar 13, 2026
714dec9
Fix: Added fix for None discriptive error issue #36
O-Bots Mar 15, 2026
ba32fb9
Linting and Prettier
O-Bots Mar 15, 2026
282dfea
Minor cleaning
MartinBraquet Mar 15, 2026
f9f79b7
Organizing helper func
O-Bots Mar 16, 2026
8b21014
Added Google account to the Onboarding flow
O-Bots Mar 17, 2026
7b07107
Added account cleanup for google accounts
O-Bots Mar 18, 2026
8ecdbcc
Started work on Sign-in tests
O-Bots Mar 25, 2026
dee657d
Linting and Prettier
O-Bots Mar 25, 2026
40c4cdd
Added checks to the deleteUser func to check if the accout exists
O-Bots Mar 26, 2026
2745c3c
Linting and Prettier
O-Bots Mar 26, 2026
a191eb5
Formatting update, fixed homePage locator for signin
O-Bots Apr 2, 2026
64c4104
.
O-Bots Apr 2, 2026
d9d9bed
.
O-Bots Apr 2, 2026
6c6a592
.
O-Bots Apr 2, 2026
fde2e71
Coderabbitai fix's
O-Bots Apr 2, 2026
4ba8663
Fix
MartinBraquet Apr 3, 2026
2dd3e87
Improve test utilities and stabilize onboarding flow tests
MartinBraquet Apr 3, 2026
e0e4b3b
Changes requested
O-Bots Apr 3, 2026
4dd3051
Changed POM/Fixture structure to use an app class to instantiate the …
O-Bots Apr 4, 2026
dedc199
Apply suggestion from @MartinBraquet
MartinBraquet Apr 4, 2026
8b082bf
Delete .vscode/settings.json
MartinBraquet Apr 4, 2026
b80d401
Apply suggestion from @MartinBraquet
MartinBraquet Apr 4, 2026
2a8f3aa
Apply suggestion from @MartinBraquet
MartinBraquet Apr 4, 2026
02e91ea
Apply suggestion from @MartinBraquet
MartinBraquet Apr 4, 2026
4a75de4
Linting and Prettier
O-Bots Apr 4, 2026
704f3a9
Updated People page
O-Bots May 11, 2026
e1defac
Fix app.ts
O-Bots May 11, 2026
1189cac
Updated peoplePage.ts: continued adding functions to use filters
O-Bots May 12, 2026
4f2eb6e
Coderabbitai fix's
O-Bots Apr 2, 2026
e6b98fa
.
O-Bots May 12, 2026
51c71fe
Explanded seeding to better reflect the different types of profiles
O-Bots May 14, 2026
64378ca
Updated People page
O-Bots May 20, 2026
32e5ff9
Lint and Prettier
O-Bots May 20, 2026
137d097
Test renamed
O-Bots May 20, 2026
2575b7d
CodeRabbit Suggestions
O-Bots May 20, 2026
45c89c1
.
O-Bots May 20, 2026
ad16b55
Apply suggestions from code review
MartinBraquet May 20, 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
2 changes: 1 addition & 1 deletion .github/workflows/cd-api.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: API Release
on:
push:
branches: [ main, master ]
branches: [main, master]
paths:
- 'backend/api/package.json'
- '.github/workflows/cd-api.yml'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: CI

on:
push:
branches: [ main ]
branches: [main]
pull_request:
branches: [ main ]
branches: [main]

jobs:
lint:
Expand Down
13 changes: 2 additions & 11 deletions backend/email/emails/new-endorsement.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,7 @@
import {
Body,
Button,
Container,
Head,
Html,
Preview,
Section,
Text,
} from '@react-email/components'
import {Body, Button, Container, Head, Html, Preview, Section, Text} from '@react-email/components'
import {DOMAIN} from 'common/envs/constants'
import {type User} from 'common/user'
import { container, content, Footer, main} from 'email/utils'
import {container, content, Footer, main} from 'email/utils'
import React from 'react'
import {createT} from 'shared/locale'

Expand Down
2 changes: 1 addition & 1 deletion backend/email/emails/new-message.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {ANDROID_APP_URL} from 'common/constants'
import {DOMAIN} from 'common/envs/constants'
import {type ProfileRow} from 'common/profiles/profile'
import {type User} from 'common/user'
import { container, content, Footer, main} from 'email/utils'
import {container, content, Footer, main} from 'email/utils'
import React from 'react'
import {createT} from 'shared/locale'

Expand Down
4 changes: 4 additions & 0 deletions common/src/choices.ts
Original file line number Diff line number Diff line change
Expand Up @@ -339,3 +339,7 @@ export type SubstanceIntentionTuple = {
export type SubstancePreferenceTuple = {
[K in keyof typeof SUBSTANCE_PREFERENCE_CHOICES]: [K, (typeof SUBSTANCE_PREFERENCE_CHOICES)[K]]
}[keyof typeof SUBSTANCE_PREFERENCE_CHOICES]

export type LastActiveTuple = {
[K in keyof typeof LAST_ONLINE_CHOICES]: [K, (typeof LAST_ONLINE_CHOICES)[K]]
}[keyof typeof LAST_ONLINE_CHOICES]
18 changes: 17 additions & 1 deletion tests/e2e/backend/utils/userInformation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,13 @@ import {
PSYCHEDELICS_CHOICES,
RACE_CHOICES,
RELATIONSHIP_CHOICES,
RELATIONSHIP_STATUS_CHOICES,
ROMANTIC_CHOICES,
RELIGION_CHOICES,
LANGUAGE_CHOICES,
SUBSTANCE_INTENTION_CHOICES,
SUBSTANCE_PREFERENCE_CHOICES,
MBTI_CHOICES,
} from 'common/choices'

class UserAccountInformationForSeeding {
Expand All @@ -30,8 +34,13 @@ class UserAccountInformationForSeeding {
min: faker.number.int({min: 18, max: 27}),
max: faker.number.int({min: 36, max: 68}),
}

has_kids = faker.number.int({min: 0, max: 5})
wants_kids_strength = faker.number.int({min: 0, max: 4})
is_smoker = faker.datatype.boolean()
relationship_status = Object.values(RELATIONSHIP_STATUS_CHOICES)
pref_relation_styles = Object.values(RELATIONSHIP_CHOICES)
pref_romantic_styles = Object.values(ROMANTIC_CHOICES)
languages = Object.values(LANGUAGE_CHOICES)
political_beliefs = Object.values(POLITICAL_CHOICES)
religion = Object.values(RELIGION_CHOICES)
diet = Object.values(DIET_CHOICES)
Expand All @@ -42,13 +51,20 @@ class UserAccountInformationForSeeding {
company = faker.company.name()
occupation_title = faker.person.jobTitle()
university = faker.company.name()
keywords = faker.lorem.word()

cannabis = Object.values(CANNABIS_CHOICES)
psychedelics = Object.values(PSYCHEDELICS_CHOICES)
cannabis_intention = Object.values(SUBSTANCE_INTENTION_CHOICES)
cannabis_pref = Object.values(SUBSTANCE_PREFERENCE_CHOICES)
psychedelics_intention = Object.values(SUBSTANCE_INTENTION_CHOICES)
psychedelics_pref = Object.values(SUBSTANCE_PREFERENCE_CHOICES)
mbti = Object.values(MBTI_CHOICES)
big5_openness = faker.number.int({min: 0, max: 100})
big5_conscientiousness = faker.number.int({min: 0, max: 100})
big5_extraversion = faker.number.int({min: 0, max: 100})
big5_agreeableness = faker.number.int({min: 0, max: 100})
big5_neuroticism = faker.number.int({min: 0, max: 100})

randomElement(array: Array<string>) {
return array[Math.floor(Math.random() * array.length)].toLowerCase()
Expand Down
5 changes: 4 additions & 1 deletion tests/e2e/utils/firebaseUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,10 @@ export async function deleteAccount(idToken: any) {
* Check if a Firebase user exists by email
* Returns userId if exists, undefined if not found
*/
export async function firebaseUserExists(email: string, password: string): Promise<string | undefined> {
export async function firebaseUserExists(
email: string,
password: string,
): Promise<string | undefined> {
try {
const login = await firebaseLoginEmailPassword(email, password)
return login.data.localId
Expand Down
51 changes: 42 additions & 9 deletions tests/e2e/utils/seedDatabase.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import {faker} from '@faker-js/faker'
import {debug} from 'common/logger'
import {PrivateUser} from 'common/user'
import {getDefaultNotificationPreferences} from 'common/user-notification-preferences'
Expand Down Expand Up @@ -37,40 +38,72 @@ export async function seedDbUser(
},
],
}
const relationshipStyle = userInfo.randomElement(userInfo.pref_relation_styles)
let romanticStyle: string | null = null
if (relationshipStyle === 'relationship') {
romanticStyle = userInfo.randomElement(userInfo.pref_romantic_styles)
}

const numberOfLanguages = faker.number.int({min: 1, max: 3})
let languagesKnown = []

for (let i = 0; i < numberOfLanguages; i++) {
languagesKnown.push(userInfo.randomElement(userInfo.languages))
}

const keywords = faker.number.int({min: 1, max: 4})
let profileKeywords = []
for (let i = 0; i < keywords; i++) {
profileKeywords.push(userInfo.keywords)
}

const basicProfile = {
user_id: userId,
bio_length: userInfo.bio.length,
bio: bio,
age: userInfo.age,
gender: userInfo.randomElement(userInfo.gender),
ethnicity: [userInfo.randomElement(userInfo.ethnicity)],
height_in_inches: userInfo.height_in_inches,
pref_gender: [userInfo.randomElement(userInfo.pref_gender)],
pref_relation_styles: [relationshipStyle],
relationship_status: [userInfo.randomElement(userInfo.relationship_status)],
pref_romantic_styles: romanticStyle ? [romanticStyle] : [],
pref_age_min: userInfo.pref_age.min,
pref_age_max: userInfo.pref_age.max,
born_in_location: userInfo.born_in_location,
company: userInfo.company,
occupation_title: userInfo.occupation_title,
religion: [userInfo.randomElement(userInfo.religion)],
has_kids: userInfo.has_kids,
wants_kids_strength: userInfo.wants_kids_strength,
is_smoker: userInfo.is_smoker,
}

const mediumProfile = {
...basicProfile,
drinks_per_month: userInfo.drinks_per_month,
diet: [userInfo.randomElement(userInfo.diet)],
education_level: userInfo.randomElement(userInfo.education_level),
ethnicity: [userInfo.randomElement(userInfo.ethnicity)],
gender: userInfo.randomElement(userInfo.gender),
height_in_inches: userInfo.height_in_inches,
pref_gender: [userInfo.randomElement(userInfo.pref_gender)],
pref_age_min: userInfo.pref_age.min,
pref_age_max: userInfo.pref_age.max,
languages: languagesKnown,
keywords: profileKeywords,
}

const fullProfile = {
...mediumProfile,
occupation_title: userInfo.occupation_title,
cannabis: userInfo.randomElement(userInfo.cannabis),
psychedelics: userInfo.randomElement(userInfo.psychedelics),
cannabis_intention: [userInfo.randomElement(userInfo.cannabis_intention)],
psychedelics_intention: [userInfo.randomElement(userInfo.psychedelics_intention)],
cannabis_pref: [userInfo.randomElement(userInfo.cannabis_pref)],
psychedelics_pref: [userInfo.randomElement(userInfo.psychedelics_pref)],
political_beliefs: [userInfo.randomElement(userInfo.political_beliefs)],
pref_relation_styles: [userInfo.randomElement(userInfo.pref_relation_styles)],
religion: [userInfo.randomElement(userInfo.religion)],
mbti: userInfo.randomElement(userInfo.mbti),
big5_openness: userInfo.big5_openness,
big5_conscientiousness: userInfo.big5_conscientiousness,
big5_extraversion: userInfo.big5_extraversion,
big5_agreeableness: userInfo.big5_agreeableness,
big5_neuroticism: userInfo.big5_neuroticism,
}

const profileData =
Expand Down
6 changes: 6 additions & 0 deletions tests/e2e/web/pages/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import {ProfilePage} from './profilePage'
import {SettingsPage} from './settingsPage'
import {SignUpPage} from './signUpPage'
import {SocialPage} from './socialPage'
import {PeoplePage} from './peoplePage'
import {NotificationPage} from './notificationsPage'

export class App {
readonly auth: AuthPage
Expand All @@ -21,6 +23,8 @@ export class App {
readonly settings: SettingsPage
readonly signUp: SignUpPage
readonly social: SocialPage
readonly people: PeoplePage
readonly notifs: NotificationPage

constructor(public readonly page: Page) {
this.auth = new AuthPage(page)
Expand All @@ -32,6 +36,8 @@ export class App {
this.settings = new SettingsPage(page)
this.signUp = new SignUpPage(page)
this.social = new SocialPage(page)
this.people = new PeoplePage(page)
this.notifs = new NotificationPage(page)
}

async deleteProfileFromSettings() {
Expand Down
6 changes: 4 additions & 2 deletions tests/e2e/web/pages/authPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,10 @@ export class AuthPage {
await popup.getByLabel('Email').fill(email)
if (display_name) await popup.getByLabel('Display name').fill(display_name)
if (username) await popup.getByLabel('Screen name', {exact: true}).fill(username)
await popup.getByText('Sign in with Google.com', {exact: true}).click()
await popup.waitForEvent('close')
await Promise.all([
popup.waitForEvent('close'),
popup.getByText('Sign in with Google.com', {exact: true}).click(),
])
}

async clickSignUpWithEmailButton() {
Expand Down
11 changes: 11 additions & 0 deletions tests/e2e/web/pages/notificationsPage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {expect, Locator, Page} from '@playwright/test'

export class NotificationPage {
private readonly notificationTab: Locator
private readonly settingsTab: Locator

constructor(public readonly page: Page) {
this.notificationTab = page.getByTestId('notifications-tab')
this.settingsTab = page.getByTestId('settings-tab')
}
}
Loading
Loading