Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
44 changes: 44 additions & 0 deletions functions/src/functions/defaultSeed.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,48 @@ describeWithEmulators("function: defaultSeed", (env) => {
.get();
expect(userSymptomScores.docs.length).toBeGreaterThanOrEqual(1);
}, 30_000);

it("seeds clinician messages for specific userIds", async () => {
// First seed all users
await _defaultSeed(env.factory, {
date: new Date(),
only: [DebugDataComponent.users],
staticData: undefined,
onlyUserCollections: [],
userData: [],
});

const users = await env.collections.users.get();
const clinician = users.docs.find(
(userDoc) => userDoc.data().type === UserType.clinician,
);
const patient = users.docs.find(
(userDoc) => userDoc.data().type === UserType.patient,
);
expect(clinician).toBeDefined();
expect(patient).toBeDefined();

if (clinician === undefined) fail("clinician is undefined");
if (patient === undefined) fail("patient is undefined");

// Seed clinician messages for specific clinician userId
await _defaultSeed(env.factory, {
date: new Date(),
only: [],
staticData: undefined,
onlyUserCollections: [UserDebugDataComponent.messages],
userData: [
{
userId: clinician.id,
only: [UserDebugDataComponent.messages],
},
],
});

// Verify clinician messages were seeded
const clinicianMessages = await env.collections
.userMessages(clinician.id)
.get();
expect(clinicianMessages.docs.length).toBeGreaterThan(0);
}, 30_000);
});
54 changes: 41 additions & 13 deletions functions/src/functions/defaultSeed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,19 +168,47 @@ export async function _defaultSeed(
}
}

for (const userData of data.userData) {
try {
await _seedPatientCollections({
debugData: debugDataService,
trigger: triggerService,
userId: userData.userId,
components: userData.only,
date: data.date,
});
} catch (error) {
logger.error(
`Failed to seed user data ${userData.userId}: ${String(error)}`,
);
if (data.userData.length > 0) {
const userService = factory.user();
const allPatients = await userService.getAllPatients();

for (const userData of data.userData) {
try {
const user = await userService.getUser(userData.userId);
if (user?.content.type === UserType.patient) {
await _seedPatientCollections({
debugData: debugDataService,
trigger: triggerService,
userId: userData.userId,
components: userData.only,
date: data.date,
});
} else if (user?.content.type === UserType.clinician) {
const clinicianPatients = allPatients.filter(
(patient) => patient.content.clinician === user.id,
);
const patients = await Promise.all(
clinicianPatients.map(async (patient) => {
const patientAuth = await userService.getAuth(patient.id);
return {
name: patientAuth.displayName,
id: patient.id,
};
}),
);
await _seedClinicianCollections({
debugData: debugDataService,
trigger: triggerService,
userId: userData.userId,
components: userData.only,
patients,
});
}
} catch (error) {
logger.error(
`Failed to seed user data ${userData.userId}: ${String(error)}`,
);
}
}
}
}
Expand Down
Loading