188 lines
4.6 KiB
JavaScript
188 lines
4.6 KiB
JavaScript
/**
|
|
* @fileoverview Jest setup configuration for Laravel Healthcare MCP Server tests
|
|
* Configures global test environment, mocks, and utilities
|
|
*/
|
|
|
|
import { jest } from "@jest/globals";
|
|
|
|
// Set test environment variables
|
|
process.env.NODE_ENV = "test";
|
|
process.env.LARAVEL_API_BASE_URL = "https://test-api.example.com";
|
|
process.env.LARAVEL_API_TIMEOUT = "5000";
|
|
process.env.LARAVEL_API_RETRY_ATTEMPTS = "2";
|
|
|
|
// Mock console methods to reduce noise in tests
|
|
const originalConsole = global.console;
|
|
global.console = {
|
|
...originalConsole,
|
|
log: jest.fn(),
|
|
info: jest.fn(),
|
|
warn: jest.fn(),
|
|
error: jest.fn(),
|
|
debug: jest.fn(),
|
|
};
|
|
|
|
// Global test utilities
|
|
global.testUtils = {
|
|
/**
|
|
* Create a mock HTTP response
|
|
* @param {number} status - HTTP status code
|
|
* @param {Object} data - Response data
|
|
* @param {Object} headers - Response headers
|
|
* @returns {Object} Mock response object
|
|
*/
|
|
createMockResponse: (status = 200, data = {}, headers = {}) => ({
|
|
status,
|
|
data,
|
|
headers: {
|
|
"content-type": "application/json",
|
|
...headers,
|
|
},
|
|
statusText: status === 200 ? "OK" : "Error",
|
|
}),
|
|
|
|
/**
|
|
* Create a mock authentication token
|
|
* @param {string} authType - Authentication type
|
|
* @returns {string} Mock token
|
|
*/
|
|
createMockToken: (authType = "provider") =>
|
|
`mock_${authType}_token_${Date.now()}`,
|
|
|
|
/**
|
|
* Create mock patient data for HIPAA-compliant testing
|
|
* @returns {Object} Mock patient data
|
|
*/
|
|
createMockPatientData: () => ({
|
|
id: "test-patient-123",
|
|
firstName: "John",
|
|
lastName: "Doe",
|
|
email: "john.doe@test.example.com",
|
|
dateOfBirth: "1990-01-01",
|
|
genderIdentity: "Male",
|
|
preferredPhone: "555-0123",
|
|
address: "123 Test St",
|
|
city: "Test City",
|
|
state: "TS",
|
|
zipcode: "12345",
|
|
status: "active",
|
|
isPortalAccess: true,
|
|
}),
|
|
|
|
/**
|
|
* Create mock provider data
|
|
* @returns {Object} Mock provider data
|
|
*/
|
|
createMockProviderData: () => ({
|
|
id: "test-provider-456",
|
|
firstName: "Dr. Jane",
|
|
lastName: "Smith",
|
|
emailAddress: "dr.smith@test.example.com",
|
|
textMessageNumber: "555-0456",
|
|
username: "drsmith",
|
|
company_name: "Test Medical Center",
|
|
accessRights: {
|
|
admin: true,
|
|
practitioner: true,
|
|
patientPortal: false,
|
|
},
|
|
}),
|
|
|
|
/**
|
|
* Create mock prescription data
|
|
* @returns {Object} Mock prescription data
|
|
*/
|
|
createMockPrescriptionData: () => ({
|
|
id: "test-prescription-789",
|
|
patientId: "test-patient-123",
|
|
providerId: "test-provider-456",
|
|
medication: "Test Medication",
|
|
dosage: "10mg",
|
|
frequency: "Once daily",
|
|
duration: "30 days",
|
|
status: "active",
|
|
}),
|
|
|
|
/**
|
|
* Create mock appointment data
|
|
* @returns {Object} Mock appointment data
|
|
*/
|
|
createMockAppointmentData: () => ({
|
|
id: "test-appointment-101",
|
|
patientId: "test-patient-123",
|
|
providerId: "test-provider-456",
|
|
date: "2025-07-15",
|
|
time: "10:00",
|
|
type: "consultation",
|
|
status: "scheduled",
|
|
}),
|
|
|
|
/**
|
|
* Wait for a specified amount of time
|
|
* @param {number} ms - Milliseconds to wait
|
|
* @returns {Promise} Promise that resolves after the specified time
|
|
*/
|
|
wait: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
|
|
/**
|
|
* Generate a random string for testing
|
|
* @param {number} length - Length of the string
|
|
* @returns {string} Random string
|
|
*/
|
|
randomString: (length = 10) => {
|
|
const chars =
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
let result = "";
|
|
for (let i = 0; i < length; i++) {
|
|
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
}
|
|
return result;
|
|
},
|
|
};
|
|
|
|
// Global test constants
|
|
global.testConstants = {
|
|
AUTH_TYPES: {
|
|
PUBLIC: "public",
|
|
PROVIDER: "provider",
|
|
PATIENT: "patient",
|
|
PARTNER: "partner",
|
|
AFFILIATE: "affiliate",
|
|
NETWORK: "network",
|
|
},
|
|
|
|
HTTP_STATUS: {
|
|
OK: 200,
|
|
CREATED: 201,
|
|
BAD_REQUEST: 400,
|
|
UNAUTHORIZED: 401,
|
|
FORBIDDEN: 403,
|
|
NOT_FOUND: 404,
|
|
INTERNAL_SERVER_ERROR: 500,
|
|
},
|
|
|
|
MOCK_ENDPOINTS: {
|
|
LOGIN: "/api/login",
|
|
PATIENT_LOGIN: "/api/frontend/login",
|
|
PROVIDER_REGISTER: "/emr-api/provider-register",
|
|
PATIENT_UPDATE: "/api/emr/update-patient",
|
|
PRESCRIPTION_CREATE: "/api/emr/prescriptions",
|
|
},
|
|
};
|
|
|
|
// Setup global error handling for tests
|
|
process.on("unhandledRejection", (reason, promise) => {
|
|
console.error("Unhandled Rejection at:", promise, "reason:", reason);
|
|
});
|
|
|
|
// Cleanup after each test
|
|
afterEach(() => {
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
// Global teardown
|
|
afterAll(() => {
|
|
// Restore original console
|
|
global.console = originalConsole;
|
|
});
|