Files
Compass/tests/e2e/web/specs/onboardingFlow.spec.ts
MartinBraquet fbda1caaf7 Fix e2e tests
2026-03-05 23:49:25 +01:00

304 lines
14 KiB
TypeScript

import {userInformationFromDb} from '../../utils/databaseUtils'
import {expect, test} from '../fixtures/base'
test.describe('when given valid input', () => {
test('should successfully complete the onboarding flow', async ({
homePage,
onboardingPage,
signUpPage,
authPage,
profilePage,
testAccount,
}) => {
console.log(
`Starting "should successfully complete the onboarding flow" with ${testAccount.username}`,
)
await homePage.gotToHomePage()
await homePage.clickSignUpButton()
await authPage.fillEmailField(testAccount.email)
await authPage.fillPasswordField(testAccount.password)
await authPage.clickSignUpWithEmailButton()
await onboardingPage.clickContinueButton() //First continue
await onboardingPage.clickContinueButton() //Second continue
await onboardingPage.clickGetStartedButton()
await signUpPage.fillDisplayName(testAccount.display_name)
await signUpPage.fillUsername(testAccount.username)
await signUpPage.clickNextButton()
await signUpPage.chooseGender(testAccount.gender)
await signUpPage.fillAge(testAccount.age)
await signUpPage.fillHeight({
feet: testAccount.height?.feet,
inches: testAccount.height?.inches,
})
await signUpPage.fillEthnicity(testAccount.ethnicity_origin)
await signUpPage.fillHeadline(testAccount.headline)
await signUpPage.fillKeywords(testAccount.keywords)
await signUpPage.fillInterestedInConnectingWith(testAccount.interested_in)
await signUpPage.fillAgeRangeInterest(
testAccount.Interested_in_ages?.min,
testAccount.Interested_in_ages?.max,
)
await signUpPage.setConnectionType(testAccount.connection_type)
await signUpPage.setRelationshipStatus(testAccount.relationship_status)
await signUpPage.setRelationshipStyle(testAccount.relationship_style)
await signUpPage.fillCurrentNumberOfChildren(testAccount.number_of_kids)
await signUpPage.setWantChildrenExpectation(testAccount.children_expectation)
await signUpPage.setInterests(testAccount.interests)
await signUpPage.setCauses(testAccount.causes)
await signUpPage.setHighestEducationLevel(testAccount.education_level)
await signUpPage.fillUniversity(testAccount.university)
await signUpPage.fillJobTitle(testAccount.job_title)
await signUpPage.fillCompany(testAccount.company)
await signUpPage.setWorkArea(testAccount.work_area)
await signUpPage.setPoliticalBeliefs(
testAccount.beliefs?.political?.belief,
testAccount.beliefs?.political?.details,
)
await signUpPage.setReligiousBeliefs(
testAccount.beliefs?.religious?.belief,
testAccount.beliefs?.religious?.details,
)
await signUpPage.setPersonalityType(testAccount.personality_type)
await signUpPage.setOpennessPersonalityValue(testAccount.big_five_personality_traits?.openness)
await signUpPage.setAgreeablenessPersonalityValue(
testAccount.big_five_personality_traits?.agreeableness,
)
await signUpPage.setConscientiousnessPersonalityValue(
testAccount.big_five_personality_traits?.conscientiousness,
)
await signUpPage.setExtraversionPersonalityValue(
testAccount.big_five_personality_traits?.extraversion,
)
await signUpPage.setNeuroticismPersonalityValue(
testAccount.big_five_personality_traits?.neuroticism,
)
await signUpPage.setDietType(testAccount.diet)
await signUpPage.setIsSmoker(testAccount.is_smoker)
await signUpPage.fillAlcoholPerMonth(testAccount.alcohol_consumed_per_month)
await signUpPage.setLanguages(testAccount.languages)
await signUpPage.addSocialMediaPlatform(testAccount.social_media)
await signUpPage.fillBio(testAccount.bio)
await signUpPage.clickNextButton()
await profilePage.clickCloseButton()
await onboardingPage.clickRefineProfileButton()
await profilePage.clickAnswerQuestionsButton()
const compatQuestionOne = await profilePage.answerCompatibilityQuestion(
testAccount.compatibility,
)
await profilePage.clickNextCompatibilityQuestionButton()
await profilePage.clickSkipCompatibilityQuestionButton()
await profilePage.clickSkipCompatibilityQuestionButton()
await profilePage.clickSkipCompatibilityQuestionButton()
//Verify information is correct
await profilePage.verifyDisplayNameAndAge(testAccount.display_name, testAccount.age)
await profilePage.verifyHeadline(testAccount.headline)
await profilePage.verifyKeywords(testAccount.keywords)
await profilePage.verifyGenderLocationHeight(
testAccount.gender,
undefined,
testAccount.height?.feet,
testAccount.height?.inches,
)
await profilePage.verifyInterestedInConnectingWith(
testAccount.interested_in,
testAccount.Interested_in_ages?.min,
testAccount.Interested_in_ages?.max,
)
await profilePage.verifyRelationShipTypeAndInterest(
testAccount.connection_type,
testAccount.relationship_style,
)
await profilePage.verifyRelationshipStatus(testAccount.relationship_status)
await profilePage.verifyCurrentNumberOfKids(testAccount.number_of_kids)
await profilePage.verifyWantChildrenExpectation(testAccount.children_expectation)
await profilePage.verifyInterests(testAccount.interests)
await profilePage.verifyCauses(testAccount.causes)
await profilePage.verifyEducationLevelAndUniversity(
testAccount.education_level,
testAccount.university,
)
await profilePage.verifyJobInformation(testAccount.job_title, testAccount.company)
await profilePage.verifyWorkArea(testAccount.work_area)
await profilePage.verifyPoliticalBeliefs(
testAccount.beliefs?.political?.belief,
testAccount.beliefs?.political?.details,
)
await profilePage.verifyReligiousBeliefs(
testAccount.beliefs?.religious?.belief,
testAccount.beliefs?.religious?.details,
)
await profilePage.verifyPersonalityType(testAccount.personality_type)
await profilePage.verifyBigFivePersonalitySection(testAccount.big_five_personality_traits)
await profilePage.verifyDiet(testAccount.diet)
await profilePage.verifySmoker(testAccount.is_smoker)
await profilePage.verifyDrinksPerMonth(testAccount.alcohol_consumed_per_month)
await profilePage.verifyLanguages(testAccount.languages)
await profilePage.verifySocialMedia(testAccount.social_media)
await profilePage.verifyBio(testAccount.bio)
await profilePage.verifyCompatibilityAnswers(compatQuestionOne)
//Verify Database Information
const dbInfo = await userInformationFromDb(testAccount)
console.log(dbInfo.profile)
await expect(dbInfo.user.name).toBe(testAccount.display_name)
await expect(dbInfo.user.username).toBe(testAccount.username)
await expect(dbInfo.profile.bio_text).toBe(testAccount.bio)
await expect(dbInfo.profile.gender).toEqual(testAccount.gender?.[1])
await expect(dbInfo.profile.headline).toEqual(testAccount.headline)
await expect(dbInfo.profile.keywords).toEqual(
expect.arrayContaining(testAccount.keywords?.split(', ') ?? []),
)
await expect(String(dbInfo.profile.age)).toEqual(testAccount.age)
await expect(dbInfo.profile.height_in_inches).toEqual(Number(testAccount.height?.feet) * 12)
await expect(dbInfo.profile.ethnicity).toContain(testAccount.ethnicity_origin?.[1])
await expect(dbInfo.profile.pref_gender).toContain(testAccount.interested_in?.[1])
await expect(String(dbInfo.profile.pref_age_min)).toContain(testAccount.Interested_in_ages?.min)
await expect(String(dbInfo.profile.pref_age_max)).toContain(testAccount.Interested_in_ages?.max)
await expect(dbInfo.profile.pref_relation_styles).toContain(
`${testAccount.connection_type?.[1]}`.toLowerCase(),
)
await expect(dbInfo.profile.relationship_status).toContain(testAccount.relationship_status?.[1])
await expect(dbInfo.profile.pref_romantic_styles).toContain(testAccount.relationship_style?.[1])
await expect(dbInfo.profile.has_kids).toEqual(Number(testAccount.number_of_kids))
await expect(dbInfo.profile.wants_kids_strength).toEqual(testAccount.children_expectation?.[1])
await expect(dbInfo.profile.education_level).toContain(
`${testAccount.education_level?.[1]}`.toLowerCase(),
)
await expect(dbInfo.profile.university).toContain(testAccount.university)
await expect(dbInfo.profile.occupation_title).toContain(testAccount.job_title)
await expect(dbInfo.profile.company).toContain(testAccount.company)
await expect(dbInfo.profile.political_beliefs).toContain(
testAccount.beliefs?.political?.belief?.[1],
)
await expect(dbInfo.profile.political_details).toContain(
testAccount.beliefs?.political?.details,
)
await expect(dbInfo.profile.religion).toContain(testAccount.beliefs?.religious?.belief?.[1])
await expect(dbInfo.profile.religious_beliefs).toContain(
testAccount.beliefs?.religious?.details,
)
await expect(dbInfo.profile.mbti).toContain(`${testAccount.personality_type}`.toLowerCase())
await expect(dbInfo.profile.big5_openness).toEqual(
testAccount.big_five_personality_traits?.openness,
)
await expect(dbInfo.profile.big5_conscientiousness).toEqual(
testAccount.big_five_personality_traits?.conscientiousness,
)
await expect(dbInfo.profile.big5_extraversion).toEqual(
testAccount.big_five_personality_traits?.extraversion,
)
await expect(dbInfo.profile.big5_agreeableness).toEqual(
testAccount.big_five_personality_traits?.agreeableness,
)
await expect(dbInfo.profile.big5_neuroticism).toEqual(
testAccount.big_five_personality_traits?.neuroticism,
)
await expect(dbInfo.profile.diet).toContain(testAccount.diet?.[1].toLowerCase())
await expect(dbInfo.profile.is_smoker).toEqual(testAccount.is_smoker)
await expect(dbInfo.profile.languages).toHaveLength(2)
await expect(dbInfo.profile.languages).toEqual(
expect.arrayContaining(testAccount.languages?.map(([_, l]) => l.toLowerCase()) ?? []),
)
await expect(String(dbInfo.profile.drinks_per_month)).toEqual(
testAccount.alcohol_consumed_per_month,
)
})
test('should successfully skip the onboarding flow', async ({
homePage,
onboardingPage,
signUpPage,
authPage,
profilePage,
fakerAccount,
}) => {
console.log(
`Starting "should successfully skip the onboarding flow" with ${fakerAccount.username}`,
)
await homePage.gotToHomePage()
await homePage.clickSignUpButton()
await authPage.fillEmailField(fakerAccount.email)
await authPage.fillPasswordField(fakerAccount.password)
await authPage.clickSignUpWithEmailButton()
await onboardingPage.clickSkipOnboardingButton()
await signUpPage.fillDisplayName(fakerAccount.display_name)
await signUpPage.fillUsername(fakerAccount.username)
await signUpPage.clickNextButton()
await signUpPage.clickNextButton() //Skip optional information
await profilePage.clickCloseButton()
await onboardingPage.clickRefineProfileButton()
const dbInfo = await userInformationFromDb(fakerAccount)
await expect(dbInfo.user.name).toContain(fakerAccount.display_name)
await expect(dbInfo.user.username).toContain(fakerAccount.username)
})
test.describe('should successfully complete the onboarding flow after using the back button', () => {
test.beforeEach(async ({homePage, authPage, fakerAccount}) => {
console.log(`Before each with ${fakerAccount.username}`)
await homePage.gotToHomePage()
await homePage.clickSignUpButton()
await authPage.fillEmailField(fakerAccount.email)
await authPage.fillPasswordField(fakerAccount.password)
await authPage.clickSignUpWithEmailButton()
})
test("the first time it's an option", async ({
onboardingPage,
signUpPage,
profilePage,
fakerAccount,
}) => {
console.log(`Starting "the first time its an option" with ${fakerAccount.username}`)
await onboardingPage.clickContinueButton()
await onboardingPage.clickBackButton()
await onboardingPage.clickContinueButton()
await onboardingPage.clickContinueButton()
await onboardingPage.clickGetStartedButton()
await signUpPage.fillDisplayName(fakerAccount.display_name)
await signUpPage.fillUsername(fakerAccount.username)
await signUpPage.clickNextButton()
await signUpPage.clickNextButton() //Skip optional information
await profilePage.clickCloseButton()
await onboardingPage.clickRefineProfileButton()
const dbInfo = await userInformationFromDb(fakerAccount)
await expect(dbInfo.user.name).toContain(fakerAccount.display_name)
await expect(dbInfo.user.username).toContain(fakerAccount.username)
})
test("the second time it's an option", async ({
onboardingPage,
signUpPage,
profilePage,
fakerAccount,
}) => {
console.log(`Starting "the second time its an option" with ${fakerAccount.username}`)
await onboardingPage.clickContinueButton()
await onboardingPage.clickContinueButton()
await onboardingPage.clickBackButton()
await onboardingPage.clickContinueButton()
await onboardingPage.clickGetStartedButton()
await signUpPage.fillDisplayName(fakerAccount.display_name)
await signUpPage.fillUsername(fakerAccount.username)
await signUpPage.clickNextButton()
await signUpPage.clickNextButton() //Skip optional information
await profilePage.clickCloseButton()
await onboardingPage.clickRefineProfileButton()
const dbInfo = await userInformationFromDb(fakerAccount)
await expect(dbInfo.user.name).toContain(fakerAccount.display_name)
await expect(dbInfo.user.username).toContain(fakerAccount.username)
})
})
})
test.describe('when an error occurs', () => {
test('placeholder', async () => {})
})