diff --git a/shared-helpers/src/types/backend-swagger.ts b/shared-helpers/src/types/backend-swagger.ts
index e3b5ca0ffe7..72390b1da4e 100644
--- a/shared-helpers/src/types/backend-swagger.ts
+++ b/shared-helpers/src/types/backend-swagger.ts
@@ -3420,7 +3420,7 @@ export interface ListingFilterParams {
availability?: FilterAvailabilityEnum
/** */
- bathrooms?: number
+ bathrooms?: []
/** */
bedrooms?: number
diff --git a/sites/partners/load-testing/headless-listing-save.js b/sites/partners/load-testing/headless-listing-save.js
new file mode 100644
index 00000000000..1c81558d372
--- /dev/null
+++ b/sites/partners/load-testing/headless-listing-save.js
@@ -0,0 +1,72 @@
+/* eslint-disable import/no-unresolved */
+import { group, check } from "k6"
+import http from "k6/http"
+
+export const options = {
+ vus: 1,
+ iterations: 1,
+}
+
+export default function () {
+ let params
+ let resp
+ let url
+ let userCookies
+
+ group("Default group", function () {
+ params = {
+ headers: {
+ language: `en`,
+ appurl: `https://partners.core-dev.bloomhousing.dev`,
+ accept: `application/json, text/plain, */*`,
+ "content-type": `application/json`,
+ referer: `https://partners.core-dev.bloomhousing.dev/sign-in`,
+ },
+ cookies: {},
+ }
+
+ url = http.url`https://partners.core-dev.bloomhousing.dev/api/adapter/auth/login`
+ resp = http.request("POST", url, `{"email":"admin@example.com","password":"abcdef"}`, params)
+
+ check(resp, { "sign in": (r) => r.status === 201 })
+ userCookies = resp.cookies
+ // eslint-disable-next-line no-undef
+ console.log("33:", userCookies)
+
+ params = {
+ headers: {
+ language: `en`,
+ appurl: `https://partners.core-dev.bloomhousing.dev`,
+ accept: `application/json, text/plain, */*`,
+ referer: `https://partners.core-dev.bloomhousing.dev/sign-in`,
+ },
+ cookies: {},
+ }
+
+ url = http.url`https://partners.core-dev.bloomhousing.dev/api/adapter/user`
+ resp = http.request("GET", url, null, params)
+
+ check(resp, { "get user": (r) => r.status === 200 })
+
+ params = {
+ headers: {
+ language: `en`,
+ appurl: `https://partners.core-dev.bloomhousing.dev`,
+ accept: `application/json, text/plain, */*`,
+ "content-type": `application/json`,
+ referer: `https://partners.core-dev.bloomhousing.dev/listings/5fdfd253-d270-48e4-92ee-793ec5beda78/edit`,
+ },
+ cookies: {},
+ }
+
+ url = http.url`https://partners.core-dev.bloomhousing.dev/api/adapter/listings/5fdfd253-d270-48e4-92ee-793ec5beda78`
+ resp = http.request(
+ "PUT",
+ url,
+ `{"id":"d8842fca-6830-486f-80cc-85296a41847c","assets":[],"createdAt":"2026-06-01T06:15:26.738Z","updatedAt":"2026-06-01T06:50:23.921Z","additionalApplicationSubmissionNotes":null,"digitalApplication":true,"commonDigitalApplication":true,"paperApplication":false,"referralOpportunity":false,"accessibility":null,"amenities":null,"buildingTotalUnits":0,"developer":"Cielo Housing","listingFileNumber":null,"householdSizeMax":0,"householdSizeMin":0,"neighborhood":"North End","region":"Eastside","configurableRegion":null,"petPolicy":null,"allowsDogs":null,"allowsCats":null,"smokingPolicy":null,"unitsAvailable":1,"unitAmenities":null,"servicesOffered":null,"yearBuilt":1900,"applicationDueDate":"2026-07-01T06:15:00.000Z","applicationOpenDate":"2026-05-31T06:15:25.104Z","applicationFee":"60","creditScreeningFee":null,"applicationOrganization":null,"applicationPickUpAddressOfficeHours":null,"applicationPickUpAddressType":null,"applicationDropOffAddressOfficeHours":null,"applicationDropOffAddressType":null,"applicationMailingAddressType":null,"buildingSelectionCriteria":null,"marketingFlyer":null,"accessibleMarketingFlyer":null,"cocInfo":null,"costsNotIncluded":null,"creditHistory":null,"criminalBackground":null,"depositMin":"0","depositMax":"50","depositType":null,"depositHelperText":"Deposit will not exceed one month's rent","disableUnitsAccordion":false,"hasHudEbllClearance":null,"leasingAgentEmail":"joe@smithrealty.com","leasingAgentName":"Joe Smith","leasingAgentOfficeHours":"9:00am - 5:00pm, Monday-Friday","leasingAgentPhone":"(773) 580-5897","leasingAgentTitle":"Senior Leasing Agent","managementWebsite":null,"name":"test notification listing","parkingFee":null,"parkType":null,"postmarkedApplicationsReceivedByDate":"2025-06-06T23:00:00.000Z","programRules":null,"rentalAssistance":"Housing Choice Vouchers, Section 8 and other valid rental assistance programs will be considered for this property. ","rentalHistory":null,"requiredDocuments":null,"requiredDocumentsList":null,"specialNotes":null,"waitlistCurrentSize":null,"waitlistMaxSize":null,"whatToExpect":"
Applicants will be contacted by the property agent in rank order until vacancies are filled. All of the information that you have provided will be verified and your eligibility confirmed. Your application will be removed from the waitlist if you have made any fraudulent statements. If we cannot verify a housing preference that you have claimed, you will not receive the preference but will not be otherwise penalized. Should your application be chosen, be prepared to fill out a more detailed application and provide required supporting documents.
","whatToExpectAdditionalText":null,"status":"active","reviewOrderType":"firstComeFirstServe","displayWaitlistSize":false,"reservedCommunityDescription":"Seniors over 55 are eligible for this property ","reservedCommunityMinAge":null,"resultLink":null,"isWaitlistOpen":false,"waitlistOpenSpots":null,"customMapPin":false,"contentUpdatedAt":"2026-06-01T06:38:31.303Z","publishedAt":"2026-06-01T06:19:08.419Z","scheduledPublishAt":null,"closedAt":null,"afsLastRunAt":"1970-01-01T00:00:00.000Z","lotteryLastPublishedAt":null,"lotteryLastRunAt":null,"lotteryStatus":null,"lastApplicationUpdateAt":"2026-06-01T06:50:23.919Z","listingMultiselectQuestions":[],"applicationMethods":[{"createdAt":"2026-06-01T06:38:31.306Z","updatedAt":"2026-06-01T06:38:31.306Z","id":"6eda6877-1d17-4451-8281-b3efadd00165","type":"Internal","label":null,"externalReference":null,"acceptsPostmarkedApplications":null,"phoneNumber":null,"paperApplications":[]}],"listingEvents":[],"listingsBuildingAddress":{"id":"a3f24b64-8e54-4a2d-aa3a-5026d3dee83e","placeName":"Yellowstone National Park","city":"Yellowstone National Park","county":"Teton","state":"WY","street":"3200 Old Faithful Inn Rd","zipCode":"82190","latitude":44.45995,"longitude":-110.831197},"listingsApplicationPickUpAddress":{"placeName":"Yosemite National Park","city":"Yosemite Valley","county":"Mariposa","state":"CA","street":"9035 Village Dr","zipCode":"95389","latitude":37.7487501,"longitude":-119.5920354},"listingsApplicationDropOffAddress":{"placeName":"Yosemite National Park","city":"Yosemite Valley","county":"Mariposa","state":"CA","street":"9035 Village Dr","zipCode":"95389","latitude":37.7487501,"longitude":-119.5920354},"listingsApplicationMailingAddress":{"placeName":"Rocky Mountain National Park","city":"Estes Park","county":"Larimer","state":"CO","street":"1000 US-36","zipCode":"80517","latitude":40.3800984,"longitude":-105.5709864},"listingsLeasingAgentAddress":{"id":"fb4715f2-224a-454b-8717-914d37097568","placeName":"Rocky Mountain National Park","city":"Estes Park","county":"Larimer","state":"CO","street":"1000 US-36","zipCode":"80517","latitude":40.3800984,"longitude":-105.5709864},"listingsMarketingFlyerFile":null,"listingsAccessibleMarketingFlyerFile":null,"jurisdictions":{"id":"3f0dbbe8-a84d-4158-bfc8-fd8e378d68dc","name":"Bloomington"},"listingsResult":null,"reservedCommunityTypes":null,"listingImages":[{"ordinal":0,"assets":{"createdAt":"2026-06-01T06:15:26.741Z","updatedAt":"2026-06-01T06:15:26.741Z","id":"ee118a51-3e74-40e8-bf35-9ed613ff62b2","fileId":"https://res.cloudinary.com/exygy/image/upload/w_1302,c_limit,q_65/dev/trayan-xIOYJSVEZ8c-unsplash_f1axsg.jpg","label":"cloudinaryBuilding"},"description":""}],"listingFeatures":{"accessibleHeightToilet":false,"accessibleParking":false,"acInUnit":false,"barrierFreeBathroom":false,"barrierFreeEntrance":false,"barrierFreePropertyEntrance":false,"barrierFreeUnitEntrance":true,"bathGrabBarsOrReinforcements":false,"bathroomCounterLowered":false,"brailleSignageInBuilding":false,"carbonMonoxideDetectorWithStrobe":false,"carpetInUnit":false,"elevator":true,"extraAudibleCarbonMonoxideDetector":false,"extraAudibleSmokeDetector":false,"fireSuppressionSprinklerSystem":false,"frontControlsDishwasher":false,"frontControlsStoveCookTop":false,"grabBars":true,"hardFlooringInUnit":false,"hearing":true,"hearingAndVision":false,"heatingInUnit":true,"inUnitWasherDryer":false,"kitchenCounterLowered":false,"laundryInBuilding":true,"leverHandlesOnDoors":false,"leverHandlesOnFaucets":false,"loweredCabinets":false,"loweredLightSwitch":false,"mobility":true,"noEntryStairs":false,"nonDigitalKitchenAppliances":false,"noStairsToParkingSpots":false,"noStairsWithinUnit":false,"parkingOnSite":true,"refrigeratorWithBottomDoorFreezer":false,"rollInShower":true,"serviceAnimalsAllowed":false,"smokeDetectorWithStrobe":false,"streetLevelEntrance":false,"toiletGrabBarsOrReinforcements":false,"ttyAmplifiedPhone":false,"turningCircleInBathrooms":false,"visual":false,"walkInShower":false,"wheelchairRamp":false,"wideDoorways":true},"listingUtilities":{"water":true,"gas":true,"trash":false,"sewer":true,"electricity":false,"cable":false,"phone":true,"internet":false},"units":[{"id":"4c129a57-c4d6-4d60-8cf6-83294f72d22b","amiChart":{"createdAt":"2026-06-01T06:15:26.383Z","updatedAt":"2026-06-01T06:15:26.383Z","id":"5e8aa82a-9ccb-4652-866b-0e5dabbc6001","name":"Noble Skyline - Bloomington"},"amiPercentage":"30","annualIncomeMin":null,"monthlyIncomeMin":"2000","floor":1,"annualIncomeMax":null,"maxOccupancy":3,"minOccupancy":1,"monthlyRent":"1200","numBathrooms":1,"numBedrooms":1,"number":"101","sqFeet":"750","monthlyRentAsPercentOfIncome":null,"bmrProgramChart":null,"unitTypes":{"createdAt":"2026-06-01T06:15:26.266Z","updatedAt":"2026-06-01T06:15:26.266Z","id":"d18d6ef2-4bea-462f-a10c-3a7c4135054d","name":"oneBdrm","numBedrooms":1},"unitRentTypes":null,"accessibilityPriorityType":null,"unitAmiChartOverrides":null}],"unitGroups":[],"unitsSummarized":{"unitTypes":[{"createdAt":"2026-06-01T06:15:26.266Z","updatedAt":"2026-06-01T06:15:26.266Z","id":"d18d6ef2-4bea-462f-a10c-3a7c4135054d","name":"oneBdrm","numBedrooms":1}],"priorityTypes":[],"amiPercentages":["30"],"byUnitTypeAndRent":[{"areaRange":{"min":750,"max":750},"minIncomeRange":{"min":"$2,000","max":"$2,000"},"occupancyRange":{"min":1,"max":3},"rentRange":{"min":"$1,200","max":"$1,200"},"rentAsPercentIncomeRange":{"min":null,"max":null},"floorRange":{"min":1,"max":1},"unitTypes":{"createdAt":"2026-06-01T06:15:26.266Z","updatedAt":"2026-06-01T06:15:26.266Z","id":"d18d6ef2-4bea-462f-a10c-3a7c4135054d","name":"oneBdrm","numBedrooms":1},"totalAvailable":1}],"byUnitType":[{"areaRange":{"min":750,"max":750},"minIncomeRange":{"min":"$2,000","max":"$2,000"},"occupancyRange":{"min":1,"max":3},"rentRange":{"min":"$1,200","max":"$1,200"},"rentAsPercentIncomeRange":{"min":null,"max":null},"floorRange":{"min":1,"max":1},"unitTypes":{"createdAt":"2026-06-01T06:15:26.266Z","updatedAt":"2026-06-01T06:15:26.266Z","id":"d18d6ef2-4bea-462f-a10c-3a7c4135054d","name":"oneBdrm","numBedrooms":1},"totalAvailable":0}],"byAMI":[{"percent":"30","byUnitType":[{"areaRange":{"min":750,"max":750},"minIncomeRange":{"min":"$2,000","max":"$2,000"},"occupancyRange":{"min":1,"max":3},"rentRange":{"min":"$1,200","max":"$1,200"},"rentAsPercentIncomeRange":{"min":null,"max":null},"floorRange":{"min":1,"max":1},"unitTypes":{"createdAt":"2026-06-01T06:15:26.266Z","updatedAt":"2026-06-01T06:15:26.266Z","id":"d18d6ef2-4bea-462f-a10c-3a7c4135054d","name":"oneBdrm","numBedrooms":1},"totalAvailable":1}]}],"hmi":{"columns":{"sizeColumn":"listings.householdSize","maxIncomeMonth":"listings.maxIncomeMonth","maxIncomeYear":"listings.maxIncomeYear"},"rows":[{"sizeColumn":1,"maxIncomeMonth":"listings.monthlyIncome*income:$3,000.00","maxIncomeYear":"listings.annualIncome*income:$36,000"},{"sizeColumn":2,"maxIncomeMonth":"listings.monthlyIncome*income:$4,000.00","maxIncomeYear":"listings.annualIncome*income:$48,000"},{"sizeColumn":3,"maxIncomeMonth":"listings.monthlyIncome*income:$5,000.00","maxIncomeYear":"listings.annualIncome*income:$60,000"}]}},"urlSlug":"blue_sky_apartments_3200_old_faithful_inn_rd_yellowstone_national_park_wy","requestedChanges":null,"requestedChangesDate":"1970-01-01T07:00:00.000Z","lotteryOptIn":null,"includeCommunityDisclaimer":null,"communityDisclaimerTitle":null,"communityDisclaimerDescription":null,"marketingType":"marketing","marketingYear":null,"marketingSeason":null,"marketingMonth":null,"homeType":"apartment","isVerified":false,"section8Acceptance":false,"listingNeighborhoodAmenities":null,"lastUpdatedByUser":{"id":"2d272706-6d90-4457-839b-98fe00a0b464","name":"First Last"},"property":null,"showWaitlist":false,"configurableAccessibilityFeatures":["configurableAccessibilityFeatures.barrierFreeUnitEntrance","configurableAccessibilityFeatures.elevator","configurableAccessibilityFeatures.grabBars","configurableAccessibilityFeatures.hearing","configurableAccessibilityFeatures.heatingInUnit","configurableAccessibilityFeatures.laundryInBuilding","configurableAccessibilityFeatures.mobility","configurableAccessibilityFeatures.parkingOnSite","configurableAccessibilityFeatures.rollInShower","configurableAccessibilityFeatures.wideDoorways"],"mapPinPosition":"automatic","includeCommunityDisclaimerQuestion":null,"listingAvailabilityQuestion":"availableUnits","listingSection8Acceptance":"no","utilities":["water","gas","sewer","phone"],"reviewOrderQuestion":"reviewOrderFCFS","waitlistOpenQuestion":"no","digitalApplicationChoice":"yes","paperApplicationChoice":"no","referralOpportunityChoice":"no","canApplicationsBeMailedIn":"yes","canPaperApplicationsBePickedUp":"yes","canApplicationsBeDroppedOff":"yes","whereApplicationsMailedIn":"anotherAddress","whereApplicationsPickedUp":"anotherAddress","whereApplicationsDroppedOff":"anotherAddress","arePostmarksConsidered":"yes","postmarkByDateDateField":{"month":"06","day":"06","year":"2025"},"postmarkByDateTimeField":{"hours":"04","minutes":"00","period":"pm"},"applicationDueDateField":{"month":"06","day":"30","year":"2026"},"applicationDueTimeField":{"hours":"11","minutes":"15","period":"pm"},"commonDigitalApplicationChoice":"yes"}`,
+ params
+ )
+
+ check(resp, { "update listing": (r) => r.status === 200 })
+ })
+}
diff --git a/sites/public/load-testing/headless.js b/sites/public/load-testing/headless.js
new file mode 100644
index 00000000000..f4b8dd321b3
--- /dev/null
+++ b/sites/public/load-testing/headless.js
@@ -0,0 +1,368 @@
+/* eslint-disable import/no-unresolved */
+import { group, sleep, check } from "k6"
+import http from "k6/http"
+import sql from "k6/x/sql"
+import driver from "k6/x/sql/driver/postgres"
+
+/**
+ * Run this with the following command `k6 run headless.js --env DB_URL=""`
+ * adding vus increases the number of workers
+ * adding iterations increases the max number of runs the default funciton will perform
+ * in AWS environments we'll need to run this is the EC2 instance so that we can hit the db since its protected behind the VPC
+ */
+
+export const options = {
+ vus: 5,
+ iterations: 10,
+}
+
+const randomString = (stringLength = 5) =>
+ (Math.random() + 1).toString(36).substring(2, stringLength + 2)
+
+let db
+
+export function setup() {
+ // eslint-disable-next-line no-undef
+ db = sql.open(driver, __ENV.DB_URL)
+}
+
+export function teardown() {
+ db.close()
+}
+
+export default function () {
+ let params
+ let resp
+ let url
+
+ group("Default group", function () {
+ const email = `${randomString()}+${randomString()}@exygy.com`
+ const password = `Abcdef123456!${randomString()}`
+
+ // Hit base URL
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `document`,
+ "sec-fetch-mode": `navigate`,
+ "sec-fetch-site": `none`,
+ "sec-fetch-user": `?1`,
+ "upgrade-insecure-requests": `1`,
+ accept: `text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7`,
+ priority: `u=0, i`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/`
+ resp = http.request("GET", url, null, params)
+ check(resp, { "status equals 200": (r) => r.status === 200 })
+
+ // create a user
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "content-type": `application/json`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `empty`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-site": `same-origin`,
+ accept: `application/json, text/plain, */*`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ jurisdictionname: `Bloomington`,
+ language: `en`,
+ origin: `https://core-dev.bloomhousing.dev`,
+ priority: `u=1, i`,
+ referer: `https://core-dev.bloomhousing.dev/create-account`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/user/public`
+ resp = http.request(
+ "POST",
+ url,
+ `{"firstName":"${randomString()}","middleName":"","lastName":"${randomString()}","email":"${email}","password":"${password}","passwordConfirmation":"${password}","dob":"1955-01-11T08:00:00.000Z","language":"en","appUrl":"https://core-dev.bloomhousing.dev"}`,
+ params
+ )
+ check(resp, { "status equals 201": (r) => r.status === 201 })
+
+ const userToConfirm = db.query(
+ db,
+ `SELECT id, confirmation_token FROM user_accounts WHERE email = '${email}';`
+ )
+ const confirmationToken = userToConfirm[0].confirmation_token
+
+ // hit confirm user page
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `document`,
+ "sec-fetch-mode": `navigate`,
+ "sec-fetch-site": `none`,
+ "sec-fetch-user": `?1`,
+ "upgrade-insecure-requests": `1`,
+ accept: `text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7`,
+ priority: `u=0, i`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/?token=${confirmationToken}`
+ resp = http.request("GET", url, null, params)
+ check(resp, { "status equals 200": (r) => r.status === 200 })
+
+ // confirm user
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "content-type": `application/json`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `empty`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-site": `same-origin`,
+ accept: `application/json, text/plain, */*`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ jurisdictionname: `Bloomington`,
+ language: `en`,
+ origin: `https://core-dev.bloomhousing.dev`,
+ priority: `u=1, i`,
+ referer: `https://core-dev.bloomhousing.dev/?token=${confirmationToken}`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/auth/confirm`
+ resp = http.request("PUT", url, `{"token":"${confirmationToken}"}`, params)
+ check(resp, { "status equals 201": (r) => r.status === 201 })
+
+ // sign in
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "content-type": `application/json`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `empty`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-site": `same-origin`,
+ accept: `application/json, text/plain, */*`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ jurisdictionname: `Bloomington`,
+ language: `en`,
+ origin: `https://core-dev.bloomhousing.dev`,
+ priority: `u=1, i`,
+ referer: `https://core-dev.bloomhousing.dev/sign-in`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/auth/login`
+ resp = http.request("POST", url, `{"email":"${email}","password":"${password}"}`, params)
+ check(resp, { "status equals 201": (r) => r.status === 201 })
+
+ const vuJar = http.cookieJar()
+ const cookiesForURL = vuJar.cookiesForURL("https://core-dev.bloomhousing.dev")
+ check(null, {
+ "has cookie 'access-token'": () => cookiesForURL["access-token"].length > 0,
+ "has cookie 'refresh-token'": () => cookiesForURL["refresh-token"].length > 0,
+ "has cookie 'access-token-available'": () =>
+ cookiesForURL["access-token-available"].length > 0,
+ })
+
+ // get user profile
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `empty`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-site": `same-origin`,
+ accept: `application/json, text/plain, */*`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ jurisdictionname: `Bloomington`,
+ language: `en`,
+ priority: `u=1, i`,
+ referer: `https://core-dev.bloomhousing.dev/sign-in`,
+ },
+ cookies: {
+ ["access-token"]: cookiesForURL["access-token"],
+ ["refresh-token"]: cookiesForURL["refresh-token"],
+ ["access-token-available"]: cookiesForURL["access-token-available"],
+ },
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/user`
+ resp = http.request("GET", url, null, params)
+ check(resp, { "status equals 200": (r) => r.status === 200 })
+
+ // Get Jurisdiction
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `empty`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-site": `same-origin`,
+ accept: `application/json, text/plain, */*`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ jurisdictionname: `Bloomington`,
+ language: `en`,
+ priority: `u=1, i`,
+ referer: `https://core-dev.bloomhousing.dev/applications/start/choose-language?listingId=496cd10a-4f3d-4add-9a79-c10ab7cd72b2`,
+ },
+ cookies: {
+ ["access-token"]: cookiesForURL["access-token"],
+ ["refresh-token"]: cookiesForURL["refresh-token"],
+ ["access-token-available"]: cookiesForURL["access-token-available"],
+ },
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/jurisdictions/38f7eb8c-e29c-447e-9b01-eb1c78f5457c`
+ resp = http.request("GET", url, null, params)
+ check(resp, { "status equals 200": (r) => r.status === 200 })
+
+ // Look at a listing
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "if-none-match": `"89n9pbkw5fd51"`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `empty`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-site": `same-origin`,
+ accept: `application/json, text/plain, */*`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ jurisdictionname: `Bloomington`,
+ language: `en`,
+ priority: `u=1, i`,
+ referer: `https://core-dev.bloomhousing.dev/applications/start/choose-language?listingId=496cd10a-4f3d-4add-9a79-c10ab7cd72b2`,
+ },
+ cookies: {
+ ["access-token"]: cookiesForURL["access-token"],
+ ["refresh-token"]: cookiesForURL["refresh-token"],
+ ["access-token-available"]: cookiesForURL["access-token-available"],
+ },
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/listings/496cd10a-4f3d-4add-9a79-c10ab7cd72b2`
+ resp = http.request("GET", url, null, params)
+ check(resp, { "status equals 200": (r) => r.status === 200 })
+
+ // jurisdiction fetch
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `empty`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-site": `same-origin`,
+ accept: `application/json, text/plain, */*`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ jurisdictionname: `Bloomington`,
+ language: `en`,
+ priority: `u=1, i`,
+ referer: `https://core-dev.bloomhousing.dev/applications/start/choose-language?listingId=496cd10a-4f3d-4add-9a79-c10ab7cd72b2`,
+ },
+ cookies: {
+ ["access-token"]: cookiesForURL["access-token"],
+ ["refresh-token"]: cookiesForURL["refresh-token"],
+ ["access-token-available"]: cookiesForURL["access-token-available"],
+ },
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/jurisdictions/38f7eb8c-e29c-447e-9b01-eb1c78f5457c`
+ resp = http.request("GET", url, null, params)
+ check(resp, { "status equals 200": (r) => r.status === 200 })
+
+ // verify application submission
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "content-type": `application/json`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `empty`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-site": `same-origin`,
+ accept: `application/json, text/plain, */*`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ jurisdictionname: `Bloomington`,
+ language: `en`,
+ origin: `https://core-dev.bloomhousing.dev`,
+ priority: `u=1, i`,
+ referer: `https://core-dev.bloomhousing.dev/applications/review/summary`,
+ },
+ cookies: {
+ ["access-token"]: cookiesForURL["access-token"],
+ ["refresh-token"]: cookiesForURL["refresh-token"],
+ ["access-token-available"]: cookiesForURL["access-token-available"],
+ },
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/applications/verify`
+ resp = http.request(
+ "POST",
+ url,
+ `{"loaded":false,"autofilled":false,"completedSections":3,"submissionType":"electronical","language":"en","acceptedTerms":false,"status":"submitted","accessibleUnitWaitlistNumber":null,"conventionalUnitWaitlistNumber":null,"manualLotteryPositionNumber":null,"applicant":{"phoneNumberType":"home","noPhone":false,"applicantAddress":{"street":"Eastborne Avenue","street2":"1/2","city":"Los Angeles","state":"AZ","zipCode":"90024","county":"","longitude":-118.426842,"latitude":34.056933},"workInRegion":"no","phoneNumber":"(520) 123-4567","firstName":"First Name","middleName":"Middle Name","lastName":"Last Name","birthMonth":"1","birthDay":"1","birthYear":"2000","emailAddress":"${email}","noEmail":false,"fullTimeStudent":null,"applicantWorkAddress":{"street":"","street2":"","city":"","state":"","zipCode":"","county":""}},"additionalPhone":false,"additionalPhoneNumber":"","additionalPhoneNumberType":"","contactPreferences":["letter"],"householdSize":1,"housingStatus":"","sendMailToMailingAddress":false,"applicationsMailingAddress":{"street":"","street2":"","city":"","state":"","zipCode":""},"applicationsAlternateAddress":{"street":"","street2":"","city":"","state":"","zipCode":""},"alternateContact":{"type":"noContact","firstName":"","lastName":"","agency":"","phoneNumber":"","emailAddress":null,"address":{"street":"","street2":"","city":"","state":"","zipCode":""}},"accessibility":{"mobility":false,"vision":false,"hearing":false,"other":null},"householdExpectingChanges":false,"householdStudent":false,"incomeVouchers":true,"income":"5000.00","incomePeriod":"perMonth","householdMember":[],"preferredUnitTypes":[{"id":"cb6dad5c-88af-4afe-af72-4eb4a0318ef7"}],"demographics":{"ethnicity":"notHispanicLatino","gender":"","sexualOrientation":"","howDidYouHear":["friend"],"race":["asian","asian-asianIndian"],"spokenLanguage":""},"preferences":[],"programs":[],"confirmationCode":"","id":"","reachedReviewStep":true,"reviewStatus":"pending","listing":{"id":"496cd10a-4f3d-4add-9a79-c10ab7cd72b2"},"appUrl":"https://core-dev.bloomhousing.dev"}`,
+ params
+ )
+ check(resp, { "status equals 201": (r) => r.status === 201 })
+
+ // submit application
+ params = {
+ headers: {
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "content-type": `application/json`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-fetch-dest": `empty`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-site": `same-origin`,
+ accept: `application/json, text/plain, */*`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ jurisdictionname: `Bloomington`,
+ language: `en`,
+ origin: `https://core-dev.bloomhousing.dev`,
+ priority: `u=1, i`,
+ referer: `https://core-dev.bloomhousing.dev/applications/review/terms`,
+ },
+ cookies: {
+ ["access-token"]: cookiesForURL["access-token"],
+ ["refresh-token"]: cookiesForURL["refresh-token"],
+ ["access-token-available"]: cookiesForURL["access-token-available"],
+ },
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/applications/submit`
+ resp = http.request(
+ "POST",
+ url,
+ `{"loaded":false,"autofilled":false,"completedSections":6,"submissionType":"electronical","language":"en","acceptedTerms":true,"status":"submitted","accessibleUnitWaitlistNumber":null,"conventionalUnitWaitlistNumber":null,"manualLotteryPositionNumber":null,"applicant":{"phoneNumberType":"home","noPhone":false,"applicantAddress":{"street":"Eastborne Avenue","street2":"1/2","city":"Los Angeles","state":"AZ","zipCode":"90024","county":"","longitude":-118.426842,"latitude":34.056933},"workInRegion":"no","phoneNumber":"(520) 123-4567","firstName":"${randomString()}}","middleName":"${randomString()}}","lastName":"${randomString()}}","birthMonth":"1","birthDay":"1","birthYear":"2000","emailAddress":"${email}","noEmail":false,"fullTimeStudent":null,"applicantWorkAddress":{"street":"","street2":"","city":"","state":"","zipCode":"","county":""}},"additionalPhone":false,"additionalPhoneNumber":"","additionalPhoneNumberType":"","contactPreferences":["letter"],"householdSize":1,"housingStatus":"","sendMailToMailingAddress":false,"applicationsMailingAddress":{"street":"","street2":"","city":"","state":"","zipCode":""},"applicationsAlternateAddress":{"street":"","street2":"","city":"","state":"","zipCode":""},"alternateContact":{"type":"noContact","firstName":"","lastName":"","agency":"","phoneNumber":"","emailAddress":null,"address":{"street":"","street2":"","city":"","state":"","zipCode":""}},"accessibility":{"mobility":false,"vision":false,"hearing":false,"other":null},"householdExpectingChanges":false,"householdStudent":false,"incomeVouchers":true,"income":"5000.00","incomePeriod":"perMonth","householdMember":[],"preferredUnitTypes":[{"id":"cb6dad5c-88af-4afe-af72-4eb4a0318ef7"}],"demographics":{"ethnicity":"notHispanicLatino","gender":"","sexualOrientation":"","howDidYouHear":["friend"],"race":["asian","asian-asianIndian"],"spokenLanguage":""},"preferences":[],"programs":[],"confirmationCode":"","id":"","reachedReviewStep":true,"reviewStatus":"pending","listings":{"id":"496cd10a-4f3d-4add-9a79-c10ab7cd72b2"},"appUrl":"https://core-dev.bloomhousing.dev"}`,
+ params
+ )
+ check(resp, { "status equals 201": (r) => r.status === 201 })
+ })
+ sleep(1)
+}
diff --git a/sites/public/load-testing/initial-test.js b/sites/public/load-testing/initial-test.js
new file mode 100644
index 00000000000..de2de341e5c
--- /dev/null
+++ b/sites/public/load-testing/initial-test.js
@@ -0,0 +1,205 @@
+/* eslint-disable import/no-unresolved */
+import { browser } from "k6/browser"
+import { sleep } from "k6"
+
+export const options = {
+ scenarios: {
+ default: {
+ executor: "ramping-vus",
+ startVUs: 0,
+ gracefulRampDown: "0s",
+ options: {
+ browser: { type: "chromium" },
+ },
+ stages: [
+ { duration: "30s", target: 1 },
+ { duration: "30s", target: 1 },
+ { duration: "30s", target: 2 },
+ { duration: "30s", target: 2 },
+ { duration: "30s", target: 3 },
+ { duration: "30s", target: 3 },
+ ],
+ // vus: 10,
+ // iterations: 100,
+ },
+ },
+}
+
+const randomNumber = (min = 1, max = 5) => Math.floor(Math.random() * (max - min) + min)
+const randomString = (stringLength = 5) =>
+ (Math.random() + 1).toString(36).substring(2, stringLength + 2)
+
+const clickNext = async (page, waitFor = false) => {
+ await page.getByRole("button", { name: "Next", exact: true }).click()
+ //TODO: get rid of sleep
+ await sleep(randomNumber())
+ const text = await page.getByRole("button", { name: waitFor ? waitFor : "Next", exact: true })
+ await text.waitFor({
+ state: "visible",
+ })
+}
+
+export default async function () {
+ const page = await browser.newPage()
+
+ try {
+ await page.goto("https://core-dev.bloomhousing.dev/")
+
+ await page.getByRole("link", { name: "Listings", exact: true }).click()
+
+ await page.getByRole("link", { name: "Blue Sky Apartments", exact: true }).click()
+
+ await page.getByRole("link", { name: "Apply online", exact: true }).click()
+
+ await page.locator("section").click()
+
+ await page.locator("div:nth-of-type(2) > button:nth-of-type(1)").click()
+
+ await clickNext(page)
+
+ await page
+ .getByRole("textbox", { name: "First or given name", exact: true })
+ .fill(randomString())
+
+ await page
+ .getByRole("textbox", { name: "Middle name (optional)", exact: true })
+ .fill(randomString())
+
+ await page
+ .getByRole("textbox", { name: "Last or family name", exact: true })
+ .fill(randomString())
+
+ await page.getByRole("textbox", { name: "Month", exact: true }).fill(`${randomNumber(1, 12)}`)
+
+ await page.getByRole("textbox", { name: "Day", exact: true }).fill(`${randomNumber(1, 27)}`)
+
+ await page
+ .getByRole("textbox", { name: "Year", exact: true })
+ .fill(`${randomNumber(1980, 2005)}`)
+
+ await page
+ .getByRole("textbox", { name: "Your email address", exact: true })
+ .fill(`example+${randomString(10)}@exygy.com`)
+
+ await clickNext(page)
+
+ await page.getByRole("textbox", { name: "Number", exact: true }).fill("(520) 123-4567")
+
+ await page.locator("section").click()
+
+ await page
+ .getByRole("combobox", {
+ name: "What type of number is this?",
+ exact: true,
+ })
+ .selectOption("home")
+
+ await page
+ .getByRole("textbox", { name: "Street address", exact: true })
+ .fill("2325 eastborne st")
+
+ await page.getByRole("textbox", { name: "Apt or unit #", exact: true }).fill("1/2")
+
+ await page.getByRole("textbox", { name: "City name", exact: true }).fill("los angeles")
+
+ await page.getByRole("combobox", { name: "State", exact: true }).selectOption("AL")
+
+ await page.getByRole("combobox", { name: "State", exact: true }).selectOption("AZ")
+
+ await page.getByRole("textbox", { name: "Zip code", exact: true }).fill("90025")
+
+ await clickNext(page)
+
+ await page.getByRole("checkbox", { name: "Letter", exact: true }).click()
+
+ await page.getByRole("radio", { name: "No", exact: true }).check()
+
+ await clickNext(page)
+
+ await clickNext(page)
+
+ const text = await page.getByRole("radio", { name: "have an alternate contact", exact: false })
+ await text.waitFor({
+ state: "visible",
+ })
+
+ await page.getByRole("radio", { name: "have an alternate contact", exact: false }).click()
+
+ await clickNext(page)
+
+ await page.getByRole("radio", { name: "I will live alone", exact: true }).click()
+
+ await clickNext(page)
+
+ await page.locator(".font-semibold").click()
+
+ await clickNext(page)
+
+ await page.locator("div:nth-of-type(4) .font-semibold").click()
+
+ await clickNext(page)
+
+ await page.locator("div:nth-of-type(2) > div .font-semibold").click()
+
+ await page.locator(".seeds-card > div:nth-of-type(3)").click()
+
+ await clickNext(page)
+
+ await page.locator("div:nth-of-type(2) > div .font-semibold").click()
+
+ await clickNext(page)
+
+ await page.locator("div:nth-of-type(1) > div > div > .font-semibold").click()
+
+ await page.locator(".seeds-card > div:nth-of-type(3)").click()
+
+ await clickNext(page)
+
+ await page
+ .getByRole("textbox", {
+ name: "What is your household total pre-tax income?",
+ exact: true,
+ })
+ .fill("5000")
+
+ await page.locator("div:nth-of-type(1) > div > div > .font-semibold").click()
+
+ await page.locator(".seeds-card > div:nth-of-type(3)").click()
+
+ await clickNext(page)
+
+ await page.locator('[data-divider="inset"] div:nth-of-type(2) .font-semibold').click()
+
+ await page
+ .locator("div:nth-of-type(2) > div > div:nth-of-type(1) > div > .font-semibold")
+ .click()
+
+ await page
+ .getByRole("combobox", {
+ name: "Which best describes your ethnicity?",
+ exact: true,
+ })
+ .selectOption("notHispanicLatino")
+
+ await page.locator(".border-none div:nth-of-type(5) .font-semibold").click()
+
+ await clickNext(page, "Confirm")
+
+ await page.getByRole("button", { name: "Confirm", exact: true }).click()
+
+ await page.locator(".font-semibold").click()
+
+ await page.getByRole("button", { name: "Submit", exact: true }).click()
+
+ await page
+ .getByRole("link", {
+ name: "View submitted application and print a copy.",
+ exact: true,
+ })
+ .click()
+
+ await sleep(1)
+ } finally {
+ await page?.close()
+ }
+}
diff --git a/sites/public/load-testing/old-headless.js b/sites/public/load-testing/old-headless.js
new file mode 100644
index 00000000000..9aac30e4c31
--- /dev/null
+++ b/sites/public/load-testing/old-headless.js
@@ -0,0 +1,177 @@
+/* eslint-disable import/no-unresolved */
+import { group, sleep, check } from "k6"
+import http from "k6/http"
+
+export const options = {
+ vus: 500,
+ iterations: 10000,
+}
+
+const randomString = (stringLength = 5) =>
+ (Math.random() + 1).toString(36).substring(2, stringLength + 2)
+
+export default function () {
+ let params
+ let resp
+ let url
+
+ group("Default group", function () {
+ // home page get
+ params = {
+ headers: {
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-ch-ua-mobile": `?0`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "upgrade-insecure-requests": `1`,
+ accept: `text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7`,
+ "sec-fetch-site": `none`,
+ "sec-fetch-mode": `navigate`,
+ "sec-fetch-user": `?1`,
+ "sec-fetch-dest": `document`,
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ priority: `u=0, i`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/`
+ resp = http.request("GET", url, null, params)
+ check(resp, { "home page get": (r) => r.status === 200 })
+
+ // jurisdictions get
+ params = {
+ headers: {
+ language: `en`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-ch-ua-mobile": `?0`,
+ jurisdictionname: `Bloomington`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ accept: `application/json, text/plain, */*`,
+ "sec-fetch-site": `same-origin`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-dest": `empty`,
+ referer: `https://core-dev.bloomhousing.dev/applications/start/choose-language?listingId=5fdfd253-d270-48e4-92ee-793ec5beda78`,
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ priority: `u=1, i`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/jurisdictions/2bc7a6c3-13b2-4a7e-9a98-2f47d9686ba5`
+ resp = http.request("GET", url, null, params)
+ check(resp, { "jurisdictions get 1": (r) => r.status === 200 })
+
+ // listings get
+ params = {
+ headers: {
+ language: `en`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-ch-ua-mobile": `?0`,
+ jurisdictionname: `Bloomington`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ accept: `application/json, text/plain, */*`,
+ "sec-fetch-site": `same-origin`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-dest": `empty`,
+ referer: `https://core-dev.bloomhousing.dev/applications/start/choose-language?listingId=5fdfd253-d270-48e4-92ee-793ec5beda78`,
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ "if-none-match": `"89n9pbkw5fd51"`,
+ priority: `u=1, i`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/listings/5fdfd253-d270-48e4-92ee-793ec5beda78`
+ resp = http.request("GET", url, null, params)
+ check(resp, { "listing get": (r) => r.status === 200 })
+
+ // jurisdiction get
+ params = {
+ headers: {
+ language: `en`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-ch-ua-mobile": `?0`,
+ jurisdictionname: `Bloomington`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ accept: `application/json, text/plain, */*`,
+ "sec-fetch-site": `same-origin`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-dest": `empty`,
+ referer: `https://core-dev.bloomhousing.dev/applications/start/choose-language?listingId=5fdfd253-d270-48e4-92ee-793ec5beda78`,
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ priority: `u=1, i`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/jurisdictions/2bc7a6c3-13b2-4a7e-9a98-2f47d9686ba5`
+ resp = http.request("GET", url, null, params)
+ check(resp, { "jurisdiction get 2": (r) => r.status === 200 })
+
+ // verify application
+ params = {
+ headers: {
+ language: `en`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-ch-ua-mobile": `?0`,
+ jurisdictionname: `Bloomington`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ accept: `application/json, text/plain, */*`,
+ "content-type": `application/json`,
+ origin: `https://core-dev.bloomhousing.dev`,
+ "sec-fetch-site": `same-origin`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-dest": `empty`,
+ referer: `https://core-dev.bloomhousing.dev/applications/review/summary`,
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ priority: `u=1, i`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/applications/verify`
+ resp = http.request(
+ "POST",
+ url,
+ `{"loaded":false,"autofilled":false,"completedSections":6,"submissionType":"electronical","language":"en","acceptedTerms":true,"status":"submitted","accessibleUnitWaitlistNumber":null,"conventionalUnitWaitlistNumber":null,"manualLotteryPositionNumber":null,"applicant":{"phoneNumberType":"","noPhone":true,"applicantAddress":{"street":"2024 1st Street","city":"Napa","state":"CA","zipCode":"94559","county":"","longitude":-122.29551,"latitude":38.297914},"workInRegion":"no","phoneNumber":"","firstName":"Eric","middleName":"","lastName":"McGarry","birthMonth":"02","birthDay":"12","birthYear":"1998","emailAddress":"eric.mcgarry@exygy.com","noEmail":false,"fullTimeStudent":null,"applicantWorkAddress":{"street":"","street2":"","city":"","state":"","zipCode":"","county":""}},"additionalPhone":false,"additionalPhoneNumber":"","additionalPhoneNumberType":"","contactPreferences":["email"],"householdSize":1,"housingStatus":"","sendMailToMailingAddress":false,"applicationsMailingAddress":{"street":"","street2":"","city":"","state":"","zipCode":""},"applicationsAlternateAddress":{"street":"","street2":"","city":"","state":"","zipCode":""},"alternateContact":null,"accessibility":{"mobility":false,"vision":false,"hearing":false,"other":null},"householdExpectingChanges":false,"householdStudent":false,"reasonableAccommodations":"","incomeVouchers":false,"income":"1234.00","incomePeriod":"perYear","householdMember":[],"preferredUnitTypes":[{"id":"ee78d841-c49a-487d-b316-834037673338"}],"demographics":{"ethnicity":"","gender":"","sexualOrientation":"","howDidYouHear":[],"race":[],"spokenLanguage":""},"preferences":[{"multiselectQuestionId":"fe910943-d01f-4900-bd3e-b62782d61740","key":"City Employees","claimed":true,"options":[{"key":"At least one member of my household is a city employee","checked":true,"extraData":[]}]}],"programs":[{"multiselectQuestionId":"6cef9823-d856-404e-83e1-d77c0f0caf3b","key":"Veteran","claimed":true,"options":[{"key":"Yes","checked":true,"extraData":[]}]}],"applicationSelections":[],"confirmationCode":"","id":"","reachedReviewStep":true,"reviewStatus":"pending","listings":{"id":"5fdfd253-d270-48e4-92ee-793ec5beda78"},"appUrl":"https://core-dev.bloomhousing.dev"}`,
+ params
+ )
+
+ check(resp, { "verify ": (r) => r.status === 201 })
+
+ // application submission
+ params = {
+ headers: {
+ language: `en`,
+ "sec-ch-ua-platform": `"macOS"`,
+ "sec-ch-ua": `"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"`,
+ "sec-ch-ua-mobile": `?0`,
+ jurisdictionname: `Bloomington`,
+ appurl: `https://core-dev.bloomhousing.dev`,
+ accept: `application/json, text/plain, */*`,
+ "content-type": `application/json`,
+ origin: `https://core-dev.bloomhousing.dev`,
+ "sec-fetch-site": `same-origin`,
+ "sec-fetch-mode": `cors`,
+ "sec-fetch-dest": `empty`,
+ referer: `https://core-dev.bloomhousing.dev/applications/review/terms`,
+ "accept-encoding": `gzip, deflate, br, zstd`,
+ "accept-language": `en-US,en;q=0.9`,
+ priority: `u=1, i`,
+ },
+ cookies: {},
+ }
+ url = http.url`https://core-dev.bloomhousing.dev/api/adapter/applications/submit`
+ resp = http.request(
+ "POST",
+ url,
+ `{"loaded":false,"autofilled":false,"completedSections":6,"submissionType":"electronical","language":"en","acceptedTerms":true,"status":"submitted","accessibleUnitWaitlistNumber":null,"conventionalUnitWaitlistNumber":null,"manualLotteryPositionNumber":null,"applicant":{"phoneNumberType":"","noPhone":true,"applicantAddress":{"street":"2024 1st Street","city":"Napa","state":"CA","zipCode":"94559","county":"","longitude":-122.29551,"latitude":38.297914},"workInRegion":"no","phoneNumber":"","firstName":"Eric","middleName":"","lastName":"McGarry","birthMonth":"02","birthDay":"12","birthYear":"1998","emailAddress":"eric.mcgarry@exygy.com","noEmail":false,"fullTimeStudent":null,"applicantWorkAddress":{"street":"","street2":"","city":"","state":"","zipCode":"","county":""}},"additionalPhone":false,"additionalPhoneNumber":"","additionalPhoneNumberType":"","contactPreferences":["email"],"householdSize":1,"housingStatus":"","sendMailToMailingAddress":false,"applicationsMailingAddress":{"street":"","street2":"","city":"","state":"","zipCode":""},"applicationsAlternateAddress":{"street":"","street2":"","city":"","state":"","zipCode":""},"alternateContact":null,"accessibility":{"mobility":false,"vision":false,"hearing":false,"other":null},"householdExpectingChanges":false,"householdStudent":false,"reasonableAccommodations":"","incomeVouchers":false,"income":"1234.00","incomePeriod":"perYear","householdMember":[],"preferredUnitTypes":[{"id":"ee78d841-c49a-487d-b316-834037673338"}],"demographics":{"ethnicity":"","gender":"","sexualOrientation":"","howDidYouHear":[],"race":[],"spokenLanguage":""},"preferences":[{"multiselectQuestionId":"fe910943-d01f-4900-bd3e-b62782d61740","key":"City Employees","claimed":true,"options":[{"key":"At least one member of my household is a city employee","checked":true,"extraData":[]}]}],"programs":[{"multiselectQuestionId":"6cef9823-d856-404e-83e1-d77c0f0caf3b","key":"Veteran","claimed":true,"options":[{"key":"Yes","checked":true,"extraData":[]}]}],"applicationSelections":[],"confirmationCode":"","id":"","reachedReviewStep":true,"reviewStatus":"pending","listings":{"id":"5fdfd253-d270-48e4-92ee-793ec5beda78"},"appUrl":"https://core-dev.bloomhousing.dev"}`,
+ params
+ )
+ check(resp, { "submission ": (r) => r.status === 201 })
+ })
+}