Skip to main content
Glama
patient.integration.test.ts6.09 kB
import { ensureAuthenticated, medplum } from '../../src/config/medplumClient'; import { createPatient, getPatientById, updatePatient, searchPatients, CreatePatientArgs, } from '../../src/tools/patientUtils'; import { Patient } from '@medplum/fhirtypes'; // jest.setTimeout(10000); // Increase if tests are slow describe('Patient Tools Integration Tests', () => { let createdPatientId: string | undefined; let createdPatientId2: string | undefined; beforeAll(async () => { await ensureAuthenticated(); if (!medplum.getActiveLogin()) { throw new Error('Medplum authentication failed. Cannot run Patient integration tests.'); } console.log('Medplum client authenticated for Patient integration tests.'); }); // Test sequence for CRUD operations describe('createPatient', () => { it('should create a new patient (John Doe)', async () => { const johnDoeData: CreatePatientArgs = { firstName: 'JohnIntegration', // Using a unique name for tests lastName: 'DoeTest', birthDate: '1980-01-15', gender: 'male', }; const patient = await createPatient(johnDoeData); expect(patient).toBeDefined(); expect(patient).not.toBeNull(); if (patient && patient.id) { createdPatientId = patient.id; expect(patient.name?.[0]?.given?.[0]).toEqual(johnDoeData.firstName); expect(patient.name?.[0]?.family).toEqual(johnDoeData.lastName); expect(patient.birthDate).toEqual(johnDoeData.birthDate); expect(patient.gender).toEqual(johnDoeData.gender); } else { throw new Error('John Doe patient creation failed or ID is missing.'); } }); it('should create a second patient (Jane Smith)', async () => { const janeSmithData: CreatePatientArgs = { firstName: 'JaneIntegration', lastName: 'SmithTest', birthDate: '1992-07-20', }; const patient = await createPatient(janeSmithData); expect(patient).toBeDefined(); expect(patient).not.toBeNull(); if (patient && patient.id) { createdPatientId2 = patient.id; expect(patient.name?.[0]?.given?.[0]).toEqual(janeSmithData.firstName); expect(patient.name?.[0]?.family).toEqual(janeSmithData.lastName); expect(patient.birthDate).toEqual(janeSmithData.birthDate); } else { throw new Error('Jane Smith patient creation failed or ID is missing.'); } }); }); describe('getPatientById', () => { it('should retrieve an existing patient by ID', async () => { if (!createdPatientId) throw new Error('Test dependency failed: createdPatientId is not set.'); const patient = await getPatientById(createdPatientId); expect(patient).toBeDefined(); expect(patient).not.toBeNull(); expect(patient?.id).toEqual(createdPatientId); expect(patient?.name?.[0]?.family).toEqual('DoeTest'); }); it('should return null for a non-existent patient ID', async () => { const patient = await getPatientById('non-existent-id-123'); expect(patient).toBeNull(); }); }); describe('updatePatient', () => { it('should update an existing patient', async () => { if (!createdPatientId) throw new Error('Test dependency failed: createdPatientId is not set.'); const updates: Omit<Partial<Patient>, 'resourceType' | 'id'> = { birthDate: '1980-01-17', name: [{ given: ['JohnIntegration', 'UpdatedMiddle'], family: 'DoeTest' }], gender: 'other', }; const updatedPatient = await updatePatient(createdPatientId, updates); expect(updatedPatient).toBeDefined(); expect(updatedPatient).not.toBeNull(); expect(updatedPatient?.id).toEqual(createdPatientId); expect(updatedPatient?.birthDate).toEqual('1980-01-17'); expect(updatedPatient?.name?.[0]?.given?.join(' ')).toEqual('JohnIntegration UpdatedMiddle'); expect(updatedPatient?.gender).toEqual('other'); }); }); describe('searchPatients', () => { it('should find patients by family name', async () => { const patients = await searchPatients({ family: 'DoeTest' }); expect(patients).toBeDefined(); expect(patients.length).toBeGreaterThanOrEqual(1); expect(patients.some(p => p.id === createdPatientId)).toBe(true); }); it('should find patients by given and family name', async () => { const patients = await searchPatients({ given: 'JaneIntegration', family: 'SmithTest' }); expect(patients).toBeDefined(); expect(patients.length).toBeGreaterThanOrEqual(1); expect(patients.some(p => p.id === createdPatientId2)).toBe(true); }); it('should find patients by birthdate', async () => { const patients = await searchPatients({ birthdate: '1992-07-20' }); expect(patients).toBeDefined(); expect(patients.length).toBeGreaterThanOrEqual(1); const jane = patients.find(p => p.id === createdPatientId2); expect(jane).toBeDefined(); expect(jane?.name?.[0]?.given?.[0]).toEqual('JaneIntegration'); }); it('should return an empty array for non-matching criteria', async () => { const patients = await searchPatients({ family: 'NonExistentFamilyName123' }); expect(patients).toBeDefined(); expect(patients.length).toBe(0); }); }); // Optional: afterAll to clean up created test resources afterAll(async () => { console.log('Cleaning up patient test data...'); if (createdPatientId) { try { await medplum.deleteResource('Patient', createdPatientId); console.log(`Deleted test patient: ${createdPatientId}`); } catch (error) { console.error(`Error deleting patient ${createdPatientId}:`, error); } } if (createdPatientId2) { try { await medplum.deleteResource('Patient', createdPatientId2); console.log(`Deleted test patient: ${createdPatientId2}`); } catch (error) { console.error(`Error deleting patient ${createdPatientId2}:`, error); } } }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rkirkendall/medplum-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server