@metriport/fhir-sdk 0.30.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +564 -0
- package/dist/__tests__/careplan.test.d.ts +2 -0
- package/dist/__tests__/careplan.test.d.ts.map +1 -0
- package/dist/__tests__/careplan.test.js +544 -0
- package/dist/__tests__/careplan.test.js.map +1 -0
- package/dist/__tests__/clinical-dates.test.d.ts +2 -0
- package/dist/__tests__/clinical-dates.test.d.ts.map +1 -0
- package/dist/__tests__/clinical-dates.test.js +341 -0
- package/dist/__tests__/clinical-dates.test.js.map +1 -0
- package/dist/__tests__/coding-utilities.test.d.ts +2 -0
- package/dist/__tests__/coding-utilities.test.d.ts.map +1 -0
- package/dist/__tests__/coding-utilities.test.js +482 -0
- package/dist/__tests__/coding-utilities.test.js.map +1 -0
- package/dist/__tests__/date-range-performance.test.d.ts +2 -0
- package/dist/__tests__/date-range-performance.test.d.ts.map +1 -0
- package/dist/__tests__/date-range-performance.test.js +218 -0
- package/dist/__tests__/date-range-performance.test.js.map +1 -0
- package/dist/__tests__/date-range-search.test.d.ts +2 -0
- package/dist/__tests__/date-range-search.test.d.ts.map +1 -0
- package/dist/__tests__/date-range-search.test.js +215 -0
- package/dist/__tests__/date-range-search.test.js.map +1 -0
- package/dist/__tests__/env-setup.d.ts +2 -0
- package/dist/__tests__/env-setup.d.ts.map +1 -0
- package/dist/__tests__/env-setup.js +37 -0
- package/dist/__tests__/env-setup.js.map +1 -0
- package/dist/__tests__/fhir-bundle-sdk-basic.test.d.ts +2 -0
- package/dist/__tests__/fhir-bundle-sdk-basic.test.d.ts.map +1 -0
- package/dist/__tests__/fhir-bundle-sdk-basic.test.js +19 -0
- package/dist/__tests__/fhir-bundle-sdk-basic.test.js.map +1 -0
- package/dist/__tests__/fhir-bundle-sdk.test.d.ts +2 -0
- package/dist/__tests__/fhir-bundle-sdk.test.d.ts.map +1 -0
- package/dist/__tests__/fhir-bundle-sdk.test.js +953 -0
- package/dist/__tests__/fhir-bundle-sdk.test.js.map +1 -0
- package/dist/__tests__/fixtures/fhir-bundles.d.ts +31 -0
- package/dist/__tests__/fixtures/fhir-bundles.d.ts.map +1 -0
- package/dist/__tests__/fixtures/fhir-bundles.js +487 -0
- package/dist/__tests__/fixtures/fhir-bundles.js.map +1 -0
- package/dist/__tests__/phase1-verification.test.d.ts +2 -0
- package/dist/__tests__/phase1-verification.test.d.ts.map +1 -0
- package/dist/__tests__/phase1-verification.test.js +141 -0
- package/dist/__tests__/phase1-verification.test.js.map +1 -0
- package/dist/__tests__/phase2-verification.test.d.ts +2 -0
- package/dist/__tests__/phase2-verification.test.d.ts.map +1 -0
- package/dist/__tests__/phase2-verification.test.js +234 -0
- package/dist/__tests__/phase2-verification.test.js.map +1 -0
- package/dist/__tests__/phase3-verification.test.d.ts +2 -0
- package/dist/__tests__/phase3-verification.test.d.ts.map +1 -0
- package/dist/__tests__/phase3-verification.test.js +121 -0
- package/dist/__tests__/phase3-verification.test.js.map +1 -0
- package/dist/__tests__/phase4-verification.test.d.ts +2 -0
- package/dist/__tests__/phase4-verification.test.d.ts.map +1 -0
- package/dist/__tests__/phase4-verification.test.js +168 -0
- package/dist/__tests__/phase4-verification.test.js.map +1 -0
- package/dist/__tests__/phase5-verification.test.d.ts +2 -0
- package/dist/__tests__/phase5-verification.test.d.ts.map +1 -0
- package/dist/__tests__/phase5-verification.test.js +397 -0
- package/dist/__tests__/phase5-verification.test.js.map +1 -0
- package/dist/__tests__/reverse-references.test.d.ts +2 -0
- package/dist/__tests__/reverse-references.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-references.test.js +294 -0
- package/dist/__tests__/reverse-references.test.js.map +1 -0
- package/dist/__tests__/type-guards.test.d.ts +2 -0
- package/dist/__tests__/type-guards.test.d.ts.map +1 -0
- package/dist/__tests__/type-guards.test.js +163 -0
- package/dist/__tests__/type-guards.test.js.map +1 -0
- package/dist/clinical-dates.d.ts +26 -0
- package/dist/clinical-dates.d.ts.map +1 -0
- package/dist/clinical-dates.js +571 -0
- package/dist/clinical-dates.js.map +1 -0
- package/dist/fhir-bundle-sdk.d.ts +233 -0
- package/dist/fhir-bundle-sdk.d.ts.map +1 -0
- package/dist/fhir-bundle-sdk.js +545 -0
- package/dist/fhir-bundle-sdk.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/bundle-operations.d.ts +14 -0
- package/dist/internal/bundle-operations.d.ts.map +1 -0
- package/dist/internal/bundle-operations.js +55 -0
- package/dist/internal/bundle-operations.js.map +1 -0
- package/dist/internal/coding-systems.d.ts +48 -0
- package/dist/internal/coding-systems.d.ts.map +1 -0
- package/dist/internal/coding-systems.js +55 -0
- package/dist/internal/coding-systems.js.map +1 -0
- package/dist/internal/coding-utilities.d.ts +27 -0
- package/dist/internal/coding-utilities.d.ts.map +1 -0
- package/dist/internal/coding-utilities.js +297 -0
- package/dist/internal/coding-utilities.js.map +1 -0
- package/dist/internal/date-extraction.d.ts +12 -0
- package/dist/internal/date-extraction.d.ts.map +1 -0
- package/dist/internal/date-extraction.js +629 -0
- package/dist/internal/date-extraction.js.map +1 -0
- package/dist/internal/graph-traversal.d.ts +13 -0
- package/dist/internal/graph-traversal.d.ts.map +1 -0
- package/dist/internal/graph-traversal.js +89 -0
- package/dist/internal/graph-traversal.js.map +1 -0
- package/dist/internal/indexing.d.ts +17 -0
- package/dist/internal/indexing.d.ts.map +1 -0
- package/dist/internal/indexing.js +129 -0
- package/dist/internal/indexing.js.map +1 -0
- package/dist/internal/llm-context.d.ts +40 -0
- package/dist/internal/llm-context.d.ts.map +1 -0
- package/dist/internal/llm-context.js +214 -0
- package/dist/internal/llm-context.js.map +1 -0
- package/dist/internal/reference-resolution.d.ts +29 -0
- package/dist/internal/reference-resolution.d.ts.map +1 -0
- package/dist/internal/reference-resolution.js +338 -0
- package/dist/internal/reference-resolution.js.map +1 -0
- package/dist/internal/reference-utils.d.ts +26 -0
- package/dist/internal/reference-utils.d.ts.map +1 -0
- package/dist/internal/reference-utils.js +89 -0
- package/dist/internal/reference-utils.js.map +1 -0
- package/dist/internal/transparent-proxy.d.ts +12 -0
- package/dist/internal/transparent-proxy.d.ts.map +1 -0
- package/dist/internal/transparent-proxy.js +81 -0
- package/dist/internal/transparent-proxy.js.map +1 -0
- package/dist/internal/validation.d.ts +16 -0
- package/dist/internal/validation.d.ts.map +1 -0
- package/dist/internal/validation.js +45 -0
- package/dist/internal/validation.js.map +1 -0
- package/dist/type-guards.d.ts +212 -0
- package/dist/type-guards.d.ts.map +1 -0
- package/dist/type-guards.js +375 -0
- package/dist/type-guards.js.map +1 -0
- package/dist/types/coding-fields.d.ts +311 -0
- package/dist/types/coding-fields.d.ts.map +1 -0
- package/dist/types/coding-fields.js +3 -0
- package/dist/types/coding-fields.js.map +1 -0
- package/dist/types/sdk-types.d.ts +107 -0
- package/dist/types/sdk-types.d.ts.map +1 -0
- package/dist/types/sdk-types.js +17 -0
- package/dist/types/sdk-types.js.map +1 -0
- package/dist/types/smart-resources.d.ts +470 -0
- package/dist/types/smart-resources.d.ts.map +1 -0
- package/dist/types/smart-resources.js +249 -0
- package/dist/types/smart-resources.js.map +1 -0
- package/dist/utils/interval-tree/index.d.ts +87 -0
- package/dist/utils/interval-tree/index.d.ts.map +1 -0
- package/dist/utils/interval-tree/index.js +774 -0
- package/dist/utils/interval-tree/index.js.map +1 -0
- package/dist/utils/interval-tree/shallowequal/arrays.d.ts +3 -0
- package/dist/utils/interval-tree/shallowequal/arrays.d.ts.map +1 -0
- package/dist/utils/interval-tree/shallowequal/arrays.js +25 -0
- package/dist/utils/interval-tree/shallowequal/arrays.js.map +1 -0
- package/dist/utils/interval-tree/shallowequal/index.d.ts +6 -0
- package/dist/utils/interval-tree/shallowequal/index.d.ts.map +1 -0
- package/dist/utils/interval-tree/shallowequal/index.js +28 -0
- package/dist/utils/interval-tree/shallowequal/index.js.map +1 -0
- package/dist/utils/interval-tree/shallowequal/objects.d.ts +3 -0
- package/dist/utils/interval-tree/shallowequal/objects.d.ts.map +1 -0
- package/dist/utils/interval-tree/shallowequal/objects.js +28 -0
- package/dist/utils/interval-tree/shallowequal/objects.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const index_1 = require("../index");
|
|
4
|
+
const fhir_bundles_1 = require("./fixtures/fhir-bundles");
|
|
5
|
+
describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
6
|
+
describe("FR-6.1: exportSubset(resourceIds: string[]): Bundle creates new bundle with specified resources", () => {
|
|
7
|
+
it("should export subset of resources by ID", async () => {
|
|
8
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
9
|
+
const resourceIds = ["patient-123", "observation-001"];
|
|
10
|
+
const exportedBundle = sdk.exportSubset(resourceIds);
|
|
11
|
+
expect(exportedBundle).toBeDefined();
|
|
12
|
+
expect(exportedBundle.resourceType).toBe("Bundle");
|
|
13
|
+
expect(exportedBundle.entry).toHaveLength(2);
|
|
14
|
+
const patientEntry = exportedBundle.entry?.find(e => e.resource?.resourceType === "Patient");
|
|
15
|
+
const observationEntry = exportedBundle.entry?.find(e => e.resource?.resourceType === "Observation");
|
|
16
|
+
expect(patientEntry?.resource?.id).toBe("patient-123");
|
|
17
|
+
expect(observationEntry?.resource?.id).toBe("observation-001");
|
|
18
|
+
});
|
|
19
|
+
it("should handle subset with some nonexistent resources (FR-6.5)", async () => {
|
|
20
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
21
|
+
const resourceIds = ["patient-123", "nonexistent-id", "observation-001"];
|
|
22
|
+
const exportedBundle = sdk.exportSubset(resourceIds);
|
|
23
|
+
expect(exportedBundle.entry).toHaveLength(2); // Only existing resources included
|
|
24
|
+
const patientEntry = exportedBundle.entry?.find(e => e.resource?.resourceType === "Patient");
|
|
25
|
+
const observationEntry = exportedBundle.entry?.find(e => e.resource?.resourceType === "Observation");
|
|
26
|
+
expect(patientEntry?.resource?.id).toBe("patient-123");
|
|
27
|
+
expect(observationEntry?.resource?.id).toBe("observation-001");
|
|
28
|
+
});
|
|
29
|
+
it("should handle empty resource ID list", async () => {
|
|
30
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
31
|
+
const exportedBundle = sdk.exportSubset([]);
|
|
32
|
+
expect(exportedBundle.entry).toHaveLength(0);
|
|
33
|
+
expect(exportedBundle.total).toBe(0);
|
|
34
|
+
});
|
|
35
|
+
it("should handle all nonexistent resource IDs", async () => {
|
|
36
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
37
|
+
const exportedBundle = sdk.exportSubset(["nonexistent-1", "nonexistent-2"]);
|
|
38
|
+
expect(exportedBundle.entry).toHaveLength(0);
|
|
39
|
+
expect(exportedBundle.total).toBe(0);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe("FR-6.2: exportByType(resourceType: string): Bundle creates new bundle with all resources of specified type", () => {
|
|
43
|
+
it("should export all resources of specified type", async () => {
|
|
44
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
45
|
+
const exportedBundle = sdk.exportByType("Patient");
|
|
46
|
+
expect(exportedBundle).toBeDefined();
|
|
47
|
+
expect(exportedBundle.resourceType).toBe("Bundle");
|
|
48
|
+
expect(exportedBundle.entry?.length).toBeGreaterThan(0);
|
|
49
|
+
// All entries should be Patient resources
|
|
50
|
+
exportedBundle.entry?.forEach(entry => {
|
|
51
|
+
expect(entry.resource?.resourceType).toBe("Patient");
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
it("should return empty bundle for nonexistent resource type", async () => {
|
|
55
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.patientsOnlyBundle);
|
|
56
|
+
const exportedBundle = sdk.exportByType("Observation");
|
|
57
|
+
expect(exportedBundle.entry).toHaveLength(0);
|
|
58
|
+
expect(exportedBundle.total).toBe(0);
|
|
59
|
+
});
|
|
60
|
+
it("should export all observations from mixed bundle", async () => {
|
|
61
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
62
|
+
const exportedBundle = sdk.exportByType("Observation");
|
|
63
|
+
expect(exportedBundle.entry?.length).toBeGreaterThan(0);
|
|
64
|
+
exportedBundle.entry?.forEach(entry => {
|
|
65
|
+
expect(entry.resource?.resourceType).toBe("Observation");
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe("FR-6.3: exportByTypes(resourceTypes: string[]): Bundle creates new bundle with all resources of specified types", () => {
|
|
70
|
+
it("should export all resources of specified types", async () => {
|
|
71
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
72
|
+
const exportedBundle = sdk.exportByTypes(["Patient", "Observation"]);
|
|
73
|
+
expect(exportedBundle).toBeDefined();
|
|
74
|
+
expect(exportedBundle.entry?.length).toBeGreaterThan(0);
|
|
75
|
+
// All entries should be either Patient or Observation resources
|
|
76
|
+
exportedBundle.entry?.forEach(entry => {
|
|
77
|
+
expect(["Patient", "Observation"]).toContain(entry.resource?.resourceType);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
it("should handle empty resource types array", async () => {
|
|
81
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
82
|
+
const exportedBundle = sdk.exportByTypes([]);
|
|
83
|
+
expect(exportedBundle.entry).toHaveLength(0);
|
|
84
|
+
expect(exportedBundle.total).toBe(0);
|
|
85
|
+
});
|
|
86
|
+
it("should handle mix of existing and nonexistent resource types", async () => {
|
|
87
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.patientsOnlyBundle);
|
|
88
|
+
const exportedBundle = sdk.exportByTypes(["Patient", "Observation", "Encounter"]);
|
|
89
|
+
expect(exportedBundle.entry?.length).toBeGreaterThan(0);
|
|
90
|
+
exportedBundle.entry?.forEach(entry => {
|
|
91
|
+
expect(entry.resource?.resourceType).toBe("Patient");
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe("FR-6.4: Exported bundles maintain original bundle metadata but update total count", () => {
|
|
96
|
+
it("should maintain original bundle metadata", async () => {
|
|
97
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
98
|
+
const exportedBundle = sdk.exportSubset(["patient-123"]);
|
|
99
|
+
expect(exportedBundle.resourceType).toBe("Bundle");
|
|
100
|
+
expect(exportedBundle.type).toBe(fhir_bundles_1.validCompleteBundle.type);
|
|
101
|
+
// Preserve original bundle metadata if it exists
|
|
102
|
+
if (fhir_bundles_1.validCompleteBundle.id) {
|
|
103
|
+
expect(exportedBundle.id).toBe(fhir_bundles_1.validCompleteBundle.id);
|
|
104
|
+
}
|
|
105
|
+
if (fhir_bundles_1.validCompleteBundle.meta) {
|
|
106
|
+
expect(exportedBundle.meta).toEqual(fhir_bundles_1.validCompleteBundle.meta);
|
|
107
|
+
}
|
|
108
|
+
if (fhir_bundles_1.validCompleteBundle.timestamp) {
|
|
109
|
+
expect(exportedBundle.timestamp).toBe(fhir_bundles_1.validCompleteBundle.timestamp);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
it("should update total count correctly", async () => {
|
|
113
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
114
|
+
const exportedBundle = sdk.exportByType("Patient");
|
|
115
|
+
expect(exportedBundle.total).toBe(exportedBundle.entry?.length);
|
|
116
|
+
expect(exportedBundle.total).toBeGreaterThan(0);
|
|
117
|
+
});
|
|
118
|
+
it("should set total to 0 for empty exports", async () => {
|
|
119
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
120
|
+
const exportedBundle = sdk.exportSubset([]);
|
|
121
|
+
expect(exportedBundle.total).toBe(0);
|
|
122
|
+
expect(exportedBundle.entry).toHaveLength(0);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe("FR-6.6: Exported bundles preserve original entry.fullUrl values", () => {
|
|
126
|
+
it("should preserve fullUrl values in exported entries", async () => {
|
|
127
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
|
|
128
|
+
const exportedBundle = sdk.exportSubset(["patient-fullurl"]);
|
|
129
|
+
expect(exportedBundle.entry).toHaveLength(1);
|
|
130
|
+
const entry = exportedBundle.entry?.[0];
|
|
131
|
+
expect(entry?.fullUrl).toBeDefined();
|
|
132
|
+
expect(entry?.fullUrl).toContain("urn:uuid:");
|
|
133
|
+
});
|
|
134
|
+
it("should maintain fullUrl consistency across export types", async () => {
|
|
135
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
|
|
136
|
+
const exportBySubset = sdk.exportSubset(["patient-fullurl"]);
|
|
137
|
+
const exportByType = sdk.exportByType("Patient");
|
|
138
|
+
const subsetEntry = exportBySubset.entry?.[0];
|
|
139
|
+
const typeEntry = exportByType.entry?.find(e => e.resource?.id === "patient-fullurl");
|
|
140
|
+
expect(subsetEntry?.fullUrl).toBe(typeEntry?.fullUrl);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe("Performance and Edge Cases", () => {
|
|
144
|
+
it("should handle large resource lists efficiently", async () => {
|
|
145
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
146
|
+
const start = performance.now();
|
|
147
|
+
const exportedBundle = sdk.exportByTypes(["Patient", "Observation", "Encounter"]);
|
|
148
|
+
const end = performance.now();
|
|
149
|
+
expect(exportedBundle).toBeDefined();
|
|
150
|
+
expect(end - start).toBeLessThan(50); // Should be efficient
|
|
151
|
+
});
|
|
152
|
+
it("should handle bundles with undefined entries", async () => {
|
|
153
|
+
const emptyBundle = { resourceType: "Bundle", type: "collection" };
|
|
154
|
+
const sdk = await index_1.FhirBundleSdk.create(emptyBundle);
|
|
155
|
+
const exportedBundle = sdk.exportSubset(["any-id"]);
|
|
156
|
+
expect(exportedBundle.entry).toHaveLength(0);
|
|
157
|
+
expect(exportedBundle.total).toBe(0);
|
|
158
|
+
});
|
|
159
|
+
it("should return new bundle instances, not references", async () => {
|
|
160
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
161
|
+
const exportedBundle1 = sdk.exportSubset(["patient-123"]);
|
|
162
|
+
const exportedBundle2 = sdk.exportSubset(["patient-123"]);
|
|
163
|
+
expect(exportedBundle1).not.toBe(exportedBundle2);
|
|
164
|
+
expect(exportedBundle1.entry).not.toBe(exportedBundle2.entry);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=phase4-verification.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase4-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase4-verification.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase5-verification.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/phase5-verification.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
4
|
+
const util_1 = require("util");
|
|
5
|
+
const index_1 = require("../index");
|
|
6
|
+
const fhir_bundles_1 = require("./fixtures/fhir-bundles");
|
|
7
|
+
describe("Phase 5 Verification - Smart Reference Resolution", () => {
|
|
8
|
+
describe("FR-5.1: Resources returned by SDK have additional getter methods for each Reference field", () => {
|
|
9
|
+
it("should add reference methods to Observation resources", async () => {
|
|
10
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
11
|
+
const observations = sdk.getObservations();
|
|
12
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
13
|
+
const observation = observations[0];
|
|
14
|
+
expect(typeof observation.getSubject).toBe("function");
|
|
15
|
+
expect(typeof observation.getEncounter).toBe("function");
|
|
16
|
+
expect(typeof observation.getPerformers).toBe("function");
|
|
17
|
+
});
|
|
18
|
+
it("should add reference methods to Encounter resources", async () => {
|
|
19
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
20
|
+
const encounters = sdk.getEncounters();
|
|
21
|
+
expect(encounters.length).toBeGreaterThan(0);
|
|
22
|
+
const encounter = encounters[0];
|
|
23
|
+
expect(typeof encounter.getSubject).toBe("function");
|
|
24
|
+
expect(typeof encounter.getParticipants).toBe("function");
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe("FR-5.2: For Observation.subject reference, SDK adds getSubject() method", () => {
|
|
28
|
+
it("should resolve subject reference to Patient", async () => {
|
|
29
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
30
|
+
const observations = sdk.getObservations();
|
|
31
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
32
|
+
const observation = observations[0];
|
|
33
|
+
const subject = observation.getSubject();
|
|
34
|
+
expect(subject).toBeDefined();
|
|
35
|
+
expect(subject?.resourceType).toBe("Patient");
|
|
36
|
+
expect(subject?.id).toBe("patient-123");
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe("FR-5.3: For Observation.encounter reference, SDK adds getEncounter() method", () => {
|
|
40
|
+
it("should resolve encounter reference to Encounter", async () => {
|
|
41
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
42
|
+
const observations = sdk.getObservations();
|
|
43
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
44
|
+
const observation = observations[0];
|
|
45
|
+
const encounter = observation.getEncounter();
|
|
46
|
+
expect(encounter).toBeDefined();
|
|
47
|
+
expect(encounter?.resourceType).toBe("Encounter");
|
|
48
|
+
expect(encounter?.id).toBe("encounter-789");
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe("FR-5.4: For Observation.performer reference array, SDK adds getPerformers() method", () => {
|
|
52
|
+
it("should resolve performer references to array of resources", async () => {
|
|
53
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
54
|
+
const observations = sdk.getObservations();
|
|
55
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
56
|
+
const observation = observations[0];
|
|
57
|
+
const performers = observation.getPerformers();
|
|
58
|
+
expect(Array.isArray(performers)).toBe(true);
|
|
59
|
+
expect(performers.length).toBe(1);
|
|
60
|
+
expect(performers[0]?.resourceType).toBe("Practitioner");
|
|
61
|
+
expect(performers[0]?.id).toBe("practitioner-456");
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe("FR-5.5: Reference resolution methods handle both resource.id and fullUrl matching", () => {
|
|
65
|
+
it("should resolve references by resource.id", async () => {
|
|
66
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
67
|
+
const observations = sdk.getObservations();
|
|
68
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
69
|
+
const observation = observations[0];
|
|
70
|
+
const subject = observation.getSubject();
|
|
71
|
+
expect(subject?.id).toBe("patient-123");
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe("FR-5.6: Reference resolution methods return undefined for unresolvable references", () => {
|
|
75
|
+
it("should return undefined for broken references", async () => {
|
|
76
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
77
|
+
const observations = sdk.getObservations();
|
|
78
|
+
if (observations.length > 0) {
|
|
79
|
+
const observation = observations[0];
|
|
80
|
+
expect(observation.getSubject()).toBeUndefined();
|
|
81
|
+
expect(observation.getEncounter()).toBeUndefined();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
it("should return empty array for missing array references", async () => {
|
|
85
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
86
|
+
const observations = sdk.getObservations();
|
|
87
|
+
if (observations.length > 0) {
|
|
88
|
+
const observation = observations[0];
|
|
89
|
+
const performers = observation.getPerformers();
|
|
90
|
+
expect(Array.isArray(performers)).toBe(true);
|
|
91
|
+
expect(performers).toHaveLength(0);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe("FR-5.7: Reference resolution operates in O(1) time complexity per reference", () => {
|
|
96
|
+
it("should resolve references in O(1) time", async () => {
|
|
97
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
98
|
+
const observations = sdk.getObservations();
|
|
99
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
100
|
+
const observation = observations[0];
|
|
101
|
+
const start = performance.now();
|
|
102
|
+
observation.getSubject();
|
|
103
|
+
const end = performance.now();
|
|
104
|
+
expect(end - start).toBeLessThan(fhir_bundles_1.CONSTANT_TIME_EXPECTED_THRESHOLD_MS);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe("FR-5.8: Original reference fields remain unchanged", () => {
|
|
108
|
+
it("should preserve original reference fields", async () => {
|
|
109
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
110
|
+
const observations = sdk.getObservations();
|
|
111
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
112
|
+
const observation = observations[0];
|
|
113
|
+
expect(observation.subject).toEqual({ reference: "Patient/patient-123" });
|
|
114
|
+
expect(observation.encounter).toEqual({ reference: "Encounter/encounter-789" });
|
|
115
|
+
expect(observation.performer).toEqual([{ reference: "Practitioner/practitioner-456" }]);
|
|
116
|
+
});
|
|
117
|
+
it("should not include getter methods in JSON serialization", async () => {
|
|
118
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
119
|
+
const observations = sdk.getObservations();
|
|
120
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
121
|
+
const observation = observations[0];
|
|
122
|
+
const serialized = JSON.stringify(observation);
|
|
123
|
+
expect(serialized).not.toContain("getSubject");
|
|
124
|
+
expect(serialized).not.toContain("getEncounter");
|
|
125
|
+
expect(serialized).not.toContain("getPerformer");
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe("Reference Chaining", () => {
|
|
129
|
+
it("should support chaining through resolved references", async () => {
|
|
130
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
131
|
+
const observations = sdk.getObservations();
|
|
132
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
133
|
+
const observation = observations[0];
|
|
134
|
+
// Chain: Observation → Encounter → Patient
|
|
135
|
+
const patientViaChain = observation.getEncounter()?.getSubject();
|
|
136
|
+
expect(patientViaChain).toBeDefined();
|
|
137
|
+
expect(patientViaChain?.resourceType).toBe("Patient");
|
|
138
|
+
expect(patientViaChain?.id).toBe("patient-123");
|
|
139
|
+
});
|
|
140
|
+
it("should handle broken chains gracefully", async () => {
|
|
141
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
142
|
+
const observations = sdk.getObservations();
|
|
143
|
+
if (observations.length > 0) {
|
|
144
|
+
const observation = observations[0];
|
|
145
|
+
const brokenChain = observation.getEncounter()?.getSubject();
|
|
146
|
+
expect(brokenChain).toBeUndefined();
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe("Smart Resource Identity and Caching", () => {
|
|
151
|
+
it("should maintain object identity for cached resources", async () => {
|
|
152
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
153
|
+
const observation1 = sdk.getObservations()[0];
|
|
154
|
+
const observation2 = sdk.getObservations()[0];
|
|
155
|
+
expect(observation1).toBe(observation2);
|
|
156
|
+
});
|
|
157
|
+
it("should maintain consistency across different access methods", async () => {
|
|
158
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
159
|
+
const observationFromList = sdk.getObservations()[0];
|
|
160
|
+
const observationById = sdk.getResourceById("observation-001");
|
|
161
|
+
expect(observationFromList).toBe(observationById);
|
|
162
|
+
});
|
|
163
|
+
it("should cache resolved references", async () => {
|
|
164
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
165
|
+
const observations = sdk.getObservations();
|
|
166
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
167
|
+
const observation = observations[0];
|
|
168
|
+
const subject1 = observation.getSubject();
|
|
169
|
+
const subject2 = observation.getSubject();
|
|
170
|
+
expect(subject1).toBe(subject2);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
describe("Array Reference Chaining", () => {
|
|
174
|
+
it("should support chaining through array elements", async () => {
|
|
175
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
176
|
+
const reports = sdk.getDiagnosticReports();
|
|
177
|
+
if (reports.length > 0) {
|
|
178
|
+
const report = reports[0];
|
|
179
|
+
const results = report.getResults();
|
|
180
|
+
expect(Array.isArray(results)).toBe(true);
|
|
181
|
+
if (results.length > 0) {
|
|
182
|
+
const firstResult = results[0];
|
|
183
|
+
expect(typeof firstResult.getSubject).toBe("function");
|
|
184
|
+
const patient = firstResult.getSubject();
|
|
185
|
+
expect(patient?.resourceType).toBe("Patient");
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
describe("Smart Resource Marker", () => {
|
|
191
|
+
it("should mark resources as smart resources", async () => {
|
|
192
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
193
|
+
const observations = sdk.getObservations();
|
|
194
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
195
|
+
const observation = observations[0];
|
|
196
|
+
// Check the smart resource marker
|
|
197
|
+
expect(observation.__isSmartResource).toBe(true);
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
describe("Smart Resource toString() method", () => {
|
|
201
|
+
it("should render resources without proxy limitations", async () => {
|
|
202
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
203
|
+
const observations = sdk.getObservations();
|
|
204
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
205
|
+
const observation = observations[0];
|
|
206
|
+
const stringified = observation.toString();
|
|
207
|
+
expect(typeof stringified).toBe("string");
|
|
208
|
+
expect(stringified).toContain('"resourceType"');
|
|
209
|
+
expect(stringified).toContain('"id"');
|
|
210
|
+
expect(stringified).not.toContain("__isSmartResource");
|
|
211
|
+
expect(stringified).not.toContain("getSubject");
|
|
212
|
+
});
|
|
213
|
+
it("should render nested objects deeply", async () => {
|
|
214
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
215
|
+
const observation = sdk.getObservationById("observation-001");
|
|
216
|
+
expect(observation).toBeDefined();
|
|
217
|
+
const stringified = observation.toString();
|
|
218
|
+
const parsed = JSON.parse(stringified);
|
|
219
|
+
expect(parsed.subject).toBeDefined();
|
|
220
|
+
expect(parsed.subject.reference).toBeDefined();
|
|
221
|
+
expect(parsed.encounter).toBeDefined();
|
|
222
|
+
expect(parsed.encounter.reference).toBeDefined();
|
|
223
|
+
});
|
|
224
|
+
it("should support custom spacing", async () => {
|
|
225
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
226
|
+
const observation = sdk.getObservationById("observation-001");
|
|
227
|
+
expect(observation).toBeDefined();
|
|
228
|
+
const compactString = observation.toString(0);
|
|
229
|
+
const spacedString = observation.toString(4);
|
|
230
|
+
expect(compactString.length).toBeLessThan(spacedString.length);
|
|
231
|
+
expect(compactString).not.toContain("\n");
|
|
232
|
+
expect(spacedString).toContain("\n");
|
|
233
|
+
});
|
|
234
|
+
it("should render complex nested structures", async () => {
|
|
235
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
236
|
+
const patients = sdk.getPatients();
|
|
237
|
+
expect(patients.length).toBeGreaterThan(0);
|
|
238
|
+
const patient = patients[0];
|
|
239
|
+
const stringified = patient.toString();
|
|
240
|
+
const parsed = JSON.parse(stringified);
|
|
241
|
+
expect(parsed.resourceType).toBe("Patient");
|
|
242
|
+
expect(parsed.id).toBe("patient-123");
|
|
243
|
+
if (parsed.name && parsed.name.length > 0) {
|
|
244
|
+
expect(parsed.name[0]).toBeDefined();
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
it("should automatically format for console.log and REPL via util.inspect", async () => {
|
|
248
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
249
|
+
const observation = sdk.getObservationById("observation-001");
|
|
250
|
+
expect(observation).toBeDefined();
|
|
251
|
+
// util.inspect is what console.log and REPL use under the hood
|
|
252
|
+
const inspected = (0, util_1.inspect)(observation);
|
|
253
|
+
// Should be formatted as readable object output, not [Object] or [Proxy]
|
|
254
|
+
expect(inspected).toContain("resourceType:");
|
|
255
|
+
expect(inspected).toContain("Observation");
|
|
256
|
+
expect(inspected).toContain("id:");
|
|
257
|
+
expect(inspected).not.toContain("[Proxy]");
|
|
258
|
+
expect(inspected).not.toContain("getSubject");
|
|
259
|
+
expect(inspected).not.toContain("__isSmartResource");
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
describe("Nested Reference Path Resolution", () => {
|
|
263
|
+
describe("Encounter.diagnosis.condition", () => {
|
|
264
|
+
it("should resolve diagnosis.condition nested array reference", async () => {
|
|
265
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
266
|
+
const encounters = sdk.getEncounters();
|
|
267
|
+
expect(encounters.length).toBeGreaterThan(0);
|
|
268
|
+
const encounter = encounters[0];
|
|
269
|
+
expect(typeof encounter.getDiagnosisCondition).toBe("function");
|
|
270
|
+
const conditions = encounter.getDiagnosisCondition();
|
|
271
|
+
expect(Array.isArray(conditions)).toBe(true);
|
|
272
|
+
expect(conditions.length).toBe(1);
|
|
273
|
+
expect(conditions[0]?.resourceType).toBe("Condition");
|
|
274
|
+
expect(conditions[0]?.id).toBe("condition-222");
|
|
275
|
+
});
|
|
276
|
+
it("should preserve original diagnosis array field", async () => {
|
|
277
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
278
|
+
const encounters = sdk.getEncounters();
|
|
279
|
+
expect(encounters.length).toBeGreaterThan(0);
|
|
280
|
+
const encounter = encounters[0];
|
|
281
|
+
expect(encounter.diagnosis).toBeDefined();
|
|
282
|
+
expect(Array.isArray(encounter.diagnosis)).toBe(true);
|
|
283
|
+
expect(encounter.diagnosis?.[0]?.condition).toEqual({
|
|
284
|
+
reference: "Condition/condition-222",
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
describe("Encounter.participant.individual", () => {
|
|
289
|
+
it("should resolve participant.individual nested array reference", async () => {
|
|
290
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
291
|
+
const encounters = sdk.getEncounters();
|
|
292
|
+
expect(encounters.length).toBeGreaterThan(0);
|
|
293
|
+
const encounter = encounters[0];
|
|
294
|
+
expect(typeof encounter.getParticipants).toBe("function");
|
|
295
|
+
const participants = encounter.getParticipants();
|
|
296
|
+
expect(Array.isArray(participants)).toBe(true);
|
|
297
|
+
expect(participants.length).toBe(1);
|
|
298
|
+
expect(participants[0]?.resourceType).toBe("Practitioner");
|
|
299
|
+
expect(participants[0]?.id).toBe("practitioner-456");
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
describe("Encounter.location.location", () => {
|
|
303
|
+
it("should resolve location.location nested array reference", async () => {
|
|
304
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
305
|
+
const encounters = sdk.getEncounters();
|
|
306
|
+
expect(encounters.length).toBeGreaterThan(0);
|
|
307
|
+
const encounter = encounters[0];
|
|
308
|
+
expect(typeof encounter.getLocation).toBe("function");
|
|
309
|
+
const locations = encounter.getLocation();
|
|
310
|
+
expect(Array.isArray(locations)).toBe(true);
|
|
311
|
+
expect(locations.length).toBe(1);
|
|
312
|
+
expect(locations[0]?.resourceType).toBe("Location");
|
|
313
|
+
expect(locations[0]?.id).toBe("location-111");
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
describe("Encounter.hospitalization.origin", () => {
|
|
317
|
+
it("should resolve hospitalization.origin nested single reference", async () => {
|
|
318
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
319
|
+
const encounters = sdk.getEncounters();
|
|
320
|
+
expect(encounters.length).toBeGreaterThan(0);
|
|
321
|
+
const encounter = encounters[0];
|
|
322
|
+
expect(typeof encounter.getHospitalizationOrigin).toBe("function");
|
|
323
|
+
const origin = encounter.getHospitalizationOrigin();
|
|
324
|
+
expect(origin).toBeDefined();
|
|
325
|
+
expect(origin?.resourceType).toBe("Location");
|
|
326
|
+
expect(origin?.id).toBe("location-111");
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
describe("Encounter.hospitalization.destination", () => {
|
|
330
|
+
it("should resolve hospitalization.destination nested single reference", async () => {
|
|
331
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
332
|
+
const encounters = sdk.getEncounters();
|
|
333
|
+
expect(encounters.length).toBeGreaterThan(0);
|
|
334
|
+
const encounter = encounters[0];
|
|
335
|
+
expect(typeof encounter.getHospitalizationDestination).toBe("function");
|
|
336
|
+
const destination = encounter.getHospitalizationDestination();
|
|
337
|
+
expect(destination).toBeDefined();
|
|
338
|
+
expect(destination?.resourceType).toBe("Location");
|
|
339
|
+
expect(destination?.id).toBe("location-111");
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
describe("Patient.contact.organization", () => {
|
|
343
|
+
it("should resolve contact.organization nested array reference", async () => {
|
|
344
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
345
|
+
const patients = sdk.getPatients();
|
|
346
|
+
expect(patients.length).toBeGreaterThan(0);
|
|
347
|
+
const patient = patients[0];
|
|
348
|
+
expect(typeof patient.getContactOrganization).toBe("function");
|
|
349
|
+
const organizations = patient.getContactOrganization();
|
|
350
|
+
expect(Array.isArray(organizations)).toBe(true);
|
|
351
|
+
expect(organizations.length).toBe(1);
|
|
352
|
+
expect(organizations[0]?.resourceType).toBe("Organization");
|
|
353
|
+
expect(organizations[0]?.id).toBe("org-123");
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
describe("Practitioner.qualification.issuer", () => {
|
|
357
|
+
it("should resolve qualification.issuer nested array reference", async () => {
|
|
358
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
359
|
+
const practitioners = sdk.getPractitioners();
|
|
360
|
+
expect(practitioners.length).toBeGreaterThan(0);
|
|
361
|
+
const practitioner = practitioners[0];
|
|
362
|
+
expect(typeof practitioner.getQualificationIssuer).toBe("function");
|
|
363
|
+
const issuers = practitioner.getQualificationIssuer();
|
|
364
|
+
expect(Array.isArray(issuers)).toBe(true);
|
|
365
|
+
expect(issuers.length).toBe(1);
|
|
366
|
+
expect(issuers[0]?.resourceType).toBe("Organization");
|
|
367
|
+
expect(issuers[0]?.id).toBe("org-123");
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
describe("Missing nested references", () => {
|
|
371
|
+
it("should return empty array when nested array reference field is missing", async () => {
|
|
372
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
373
|
+
const diagnosticReports = sdk.getDiagnosticReports();
|
|
374
|
+
expect(diagnosticReports.length).toBeGreaterThan(0);
|
|
375
|
+
const report = diagnosticReports[0];
|
|
376
|
+
// DiagnosticReport has no media.link in our fixture
|
|
377
|
+
expect(typeof report.getMediaLink).toBe("function");
|
|
378
|
+
const mediaLinks = report.getMediaLink();
|
|
379
|
+
expect(Array.isArray(mediaLinks)).toBe(true);
|
|
380
|
+
expect(mediaLinks.length).toBe(0);
|
|
381
|
+
});
|
|
382
|
+
it("should return undefined when nested single reference field is missing", async () => {
|
|
383
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
384
|
+
const patients = sdk.getPatients();
|
|
385
|
+
expect(patients.length).toBeGreaterThan(0);
|
|
386
|
+
const patient = patients[0];
|
|
387
|
+
// Patient has no link.other in our fixture
|
|
388
|
+
expect(typeof patient.getLinkOther).toBe("function");
|
|
389
|
+
const linkOthers = patient.getLinkOther();
|
|
390
|
+
// getLinkOther returns an array since link is an array field
|
|
391
|
+
expect(Array.isArray(linkOthers)).toBe(true);
|
|
392
|
+
expect(linkOthers.length).toBe(0);
|
|
393
|
+
});
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
//# sourceMappingURL=phase5-verification.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase5-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase5-verification.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reverse-references.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/reverse-references.test.ts"],"names":[],"mappings":""}
|