@metriport/fhir-sdk 1.6.2 → 1.7.0
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/dist/__tests__/careplan.test.js +24 -22
- package/dist/__tests__/careplan.test.js.map +1 -1
- package/dist/__tests__/clinical-dates.test.js +25 -23
- package/dist/__tests__/clinical-dates.test.js.map +1 -1
- package/dist/__tests__/coding-utilities.test.js +9 -7
- package/dist/__tests__/coding-utilities.test.js.map +1 -1
- package/dist/__tests__/date-range-performance.test.js +4 -2
- package/dist/__tests__/date-range-performance.test.js.map +1 -1
- package/dist/__tests__/date-range-search.test.js +15 -13
- package/dist/__tests__/date-range-search.test.js.map +1 -1
- package/dist/__tests__/env-setup.js +32 -4
- package/dist/__tests__/env-setup.js.map +1 -1
- package/dist/__tests__/fhir-bundle-sdk-basic.test.js +6 -4
- package/dist/__tests__/fhir-bundle-sdk-basic.test.js.map +1 -1
- package/dist/__tests__/fhir-bundle-sdk.test.js +87 -85
- package/dist/__tests__/fhir-bundle-sdk.test.js.map +1 -1
- package/dist/__tests__/fixtures/fhir-bundles.d.ts +1 -1
- package/dist/__tests__/fixtures/fhir-bundles.d.ts.map +1 -1
- package/dist/__tests__/fixtures/fhir-bundles.js +17 -11
- package/dist/__tests__/fixtures/fhir-bundles.js.map +1 -1
- package/dist/__tests__/phase1-verification.test.js +12 -10
- package/dist/__tests__/phase1-verification.test.js.map +1 -1
- package/dist/__tests__/phase2-verification.test.js +16 -14
- package/dist/__tests__/phase2-verification.test.js.map +1 -1
- package/dist/__tests__/phase3-verification.test.js +17 -15
- package/dist/__tests__/phase3-verification.test.js.map +1 -1
- package/dist/__tests__/phase4-verification.test.js +29 -27
- package/dist/__tests__/phase4-verification.test.js.map +1 -1
- package/dist/__tests__/phase5-verification.test.js +40 -38
- package/dist/__tests__/phase5-verification.test.js.map +1 -1
- package/dist/__tests__/reverse-references.test.js +31 -29
- package/dist/__tests__/reverse-references.test.js.map +1 -1
- package/dist/__tests__/type-guards.test.js +18 -16
- package/dist/__tests__/type-guards.test.js.map +1 -1
- package/dist/clinical-dates.js +5 -1
- package/dist/clinical-dates.js.map +1 -1
- package/dist/fhir-bundle-sdk.js +38 -34
- package/dist/fhir-bundle-sdk.js.map +1 -1
- package/dist/index.js +22 -4
- package/dist/index.js.map +1 -1
- package/dist/internal/bundle-operations.js +9 -3
- package/dist/internal/bundle-operations.js.map +1 -1
- package/dist/internal/coding-systems.d.ts +12 -12
- package/dist/internal/coding-systems.js +18 -15
- package/dist/internal/coding-systems.js.map +1 -1
- package/dist/internal/coding-utilities.js +23 -15
- package/dist/internal/coding-utilities.js.map +1 -1
- package/dist/internal/date-extraction.js +7 -2
- package/dist/internal/date-extraction.js.map +1 -1
- package/dist/internal/graph-traversal.js +7 -3
- package/dist/internal/graph-traversal.js.map +1 -1
- package/dist/internal/indexing.js +15 -9
- package/dist/internal/indexing.js.map +1 -1
- package/dist/internal/llm-context.js +17 -8
- package/dist/internal/llm-context.js.map +1 -1
- package/dist/internal/reference-resolution.js +32 -25
- package/dist/internal/reference-resolution.js.map +1 -1
- package/dist/internal/reference-utils.js +11 -4
- package/dist/internal/reference-utils.js.map +1 -1
- package/dist/internal/transparent-proxy.js +14 -10
- package/dist/internal/transparent-proxy.js.map +1 -1
- package/dist/internal/validation.js +8 -4
- package/dist/internal/validation.js.map +1 -1
- package/dist/type-guards.d.ts +134 -105
- package/dist/type-guards.d.ts.map +1 -1
- package/dist/type-guards.js +322 -26
- package/dist/type-guards.js.map +1 -1
- package/dist/types/coding-fields.js +2 -1
- package/dist/types/sdk-types.js +5 -1
- package/dist/types/sdk-types.js.map +1 -1
- package/dist/types/smart-resources.js +10 -5
- package/dist/types/smart-resources.js.map +1 -1
- package/dist/utils/interval-tree/index.js +19 -10
- package/dist/utils/interval-tree/index.js.map +1 -1
- package/dist/utils/interval-tree/shallowequal/arrays.js +4 -1
- package/dist/utils/interval-tree/shallowequal/arrays.js.map +1 -1
- package/dist/utils/interval-tree/shallowequal/index.js +13 -5
- package/dist/utils/interval-tree/shallowequal/index.js.map +1 -1
- package/dist/utils/interval-tree/shallowequal/objects.js +4 -1
- package/dist/utils/interval-tree/shallowequal/objects.js.map +1 -1
- package/package.json +4 -3
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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");
|
|
3
5
|
describe("Phase 3 Verification - Reference Validation", () => {
|
|
4
6
|
describe("FR-2.1: lookForBrokenReferences() method returns validation result", () => {
|
|
5
7
|
it("should return validation result for valid bundle", async () => {
|
|
6
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
8
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
7
9
|
const result = sdk.lookForBrokenReferences();
|
|
8
10
|
expect(result).toBeDefined();
|
|
9
11
|
expect(typeof result.hasBrokenReferences).toBe("boolean");
|
|
10
12
|
expect(Array.isArray(result.brokenReferences)).toBe(true);
|
|
11
13
|
});
|
|
12
14
|
it("should return true for valid references", async () => {
|
|
13
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
15
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
14
16
|
const result = sdk.lookForBrokenReferences();
|
|
15
17
|
expect(result.hasBrokenReferences).toBe(false);
|
|
16
18
|
expect(result.brokenReferences).toHaveLength(0);
|
|
17
19
|
});
|
|
18
20
|
it("should return false for invalid references", async () => {
|
|
19
|
-
const sdk = await FhirBundleSdk.create(bundleWithBrokenReferences);
|
|
21
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
20
22
|
const result = sdk.lookForBrokenReferences();
|
|
21
23
|
expect(result.hasBrokenReferences).toBe(true);
|
|
22
24
|
expect(result.brokenReferences.length).toBeGreaterThan(0);
|
|
@@ -24,32 +26,32 @@ describe("Phase 3 Verification - Reference Validation", () => {
|
|
|
24
26
|
});
|
|
25
27
|
describe("FR-2.2: Validation identifies references by Resource/id pattern and fullUrl references", () => {
|
|
26
28
|
it("should identify Resource/id pattern references", async () => {
|
|
27
|
-
const sdk = await FhirBundleSdk.create(bundleWithBrokenReferences);
|
|
29
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
28
30
|
const result = sdk.lookForBrokenReferences();
|
|
29
31
|
const brokenSubjectRef = result.brokenReferences.find(ref => ref.reference === "Patient/nonexistent-patient");
|
|
30
32
|
expect(brokenSubjectRef).toBeDefined();
|
|
31
33
|
});
|
|
32
34
|
it("should validate fullUrl references", async () => {
|
|
33
|
-
const sdk = await FhirBundleSdk.create(bundleWithFullUrlReferences);
|
|
35
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
|
|
34
36
|
const result = sdk.lookForBrokenReferences();
|
|
35
37
|
expect(result.hasBrokenReferences).toBe(false);
|
|
36
38
|
});
|
|
37
39
|
});
|
|
38
40
|
describe("FR-2.3: Validation handles both relative and absolute references", () => {
|
|
39
41
|
it("should handle relative references (Patient/123)", async () => {
|
|
40
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
42
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
41
43
|
const result = sdk.lookForBrokenReferences();
|
|
42
44
|
expect(result.hasBrokenReferences).toBe(false);
|
|
43
45
|
});
|
|
44
46
|
it("should handle absolute references (urn:uuid:123)", async () => {
|
|
45
|
-
const sdk = await FhirBundleSdk.create(bundleWithFullUrlReferences);
|
|
47
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
|
|
46
48
|
const result = sdk.lookForBrokenReferences();
|
|
47
49
|
expect(result.hasBrokenReferences).toBe(false);
|
|
48
50
|
});
|
|
49
51
|
});
|
|
50
52
|
describe("FR-2.4: Validation result includes list of broken references with details", () => {
|
|
51
53
|
it("should provide detailed broken reference information", async () => {
|
|
52
|
-
const sdk = await FhirBundleSdk.create(bundleWithBrokenReferences);
|
|
54
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
53
55
|
const result = sdk.lookForBrokenReferences();
|
|
54
56
|
expect(result.brokenReferences.length).toBeGreaterThan(0);
|
|
55
57
|
const brokenRef = result.brokenReferences[0];
|
|
@@ -62,7 +64,7 @@ describe("Phase 3 Verification - Reference Validation", () => {
|
|
|
62
64
|
}
|
|
63
65
|
});
|
|
64
66
|
it("should identify specific broken reference details", async () => {
|
|
65
|
-
const sdk = await FhirBundleSdk.create(bundleWithBrokenReferences);
|
|
67
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
66
68
|
const result = sdk.lookForBrokenReferences();
|
|
67
69
|
const brokenSubjectRef = result.brokenReferences.find(ref => ref.reference === "Patient/nonexistent-patient");
|
|
68
70
|
expect(brokenSubjectRef).toBeDefined();
|
|
@@ -74,7 +76,7 @@ describe("Phase 3 Verification - Reference Validation", () => {
|
|
|
74
76
|
describe("Edge Cases and Advanced Validation", () => {
|
|
75
77
|
it("should handle empty bundle gracefully", async () => {
|
|
76
78
|
const emptyBundle = { resourceType: "Bundle", type: "collection" };
|
|
77
|
-
const sdk = await FhirBundleSdk.create(emptyBundle);
|
|
79
|
+
const sdk = await index_1.FhirBundleSdk.create(emptyBundle);
|
|
78
80
|
const result = sdk.lookForBrokenReferences();
|
|
79
81
|
expect(result.hasBrokenReferences).toBe(false);
|
|
80
82
|
expect(result.brokenReferences).toHaveLength(0);
|
|
@@ -93,13 +95,13 @@ describe("Phase 3 Verification - Reference Validation", () => {
|
|
|
93
95
|
},
|
|
94
96
|
],
|
|
95
97
|
};
|
|
96
|
-
const sdk = await FhirBundleSdk.create(bundleWithoutRefs);
|
|
98
|
+
const sdk = await index_1.FhirBundleSdk.create(bundleWithoutRefs);
|
|
97
99
|
const result = sdk.lookForBrokenReferences();
|
|
98
100
|
expect(result.hasBrokenReferences).toBe(false);
|
|
99
101
|
expect(result.brokenReferences).toHaveLength(0);
|
|
100
102
|
});
|
|
101
103
|
it("should handle bundles with some valid and some broken references", async () => {
|
|
102
|
-
const sdk = await FhirBundleSdk.create(bundleWithBrokenReferences);
|
|
104
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
103
105
|
const result = sdk.lookForBrokenReferences();
|
|
104
106
|
expect(result.hasBrokenReferences).toBe(true);
|
|
105
107
|
expect(result.brokenReferences.length).toBeGreaterThan(0);
|
|
@@ -107,7 +109,7 @@ describe("Phase 3 Verification - Reference Validation", () => {
|
|
|
107
109
|
});
|
|
108
110
|
describe("Performance Requirements", () => {
|
|
109
111
|
it("should validate references efficiently for large bundles", async () => {
|
|
110
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
112
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
111
113
|
const start = performance.now();
|
|
112
114
|
const result = sdk.lookForBrokenReferences();
|
|
113
115
|
const end = performance.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase3-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase3-verification.test.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"phase3-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase3-verification.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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");
|
|
3
5
|
describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
4
6
|
describe("FR-6.1: exportSubset(resourceIds: string[]): Bundle creates new bundle with specified resources", () => {
|
|
5
7
|
it("should export subset of resources by ID", async () => {
|
|
6
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
8
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
7
9
|
const resourceIds = ["patient-123", "observation-001"];
|
|
8
10
|
const exportedBundle = sdk.exportSubset(resourceIds);
|
|
9
11
|
expect(exportedBundle).toBeDefined();
|
|
@@ -15,7 +17,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
15
17
|
expect(observationEntry?.resource?.id).toBe("observation-001");
|
|
16
18
|
});
|
|
17
19
|
it("should handle subset with some nonexistent resources (FR-6.5)", async () => {
|
|
18
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
20
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
19
21
|
const resourceIds = ["patient-123", "nonexistent-id", "observation-001"];
|
|
20
22
|
const exportedBundle = sdk.exportSubset(resourceIds);
|
|
21
23
|
expect(exportedBundle.entry).toHaveLength(2); // Only existing resources included
|
|
@@ -25,13 +27,13 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
25
27
|
expect(observationEntry?.resource?.id).toBe("observation-001");
|
|
26
28
|
});
|
|
27
29
|
it("should handle empty resource ID list", async () => {
|
|
28
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
30
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
29
31
|
const exportedBundle = sdk.exportSubset([]);
|
|
30
32
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
31
33
|
expect(exportedBundle.total).toBe(0);
|
|
32
34
|
});
|
|
33
35
|
it("should handle all nonexistent resource IDs", async () => {
|
|
34
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
36
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
35
37
|
const exportedBundle = sdk.exportSubset(["nonexistent-1", "nonexistent-2"]);
|
|
36
38
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
37
39
|
expect(exportedBundle.total).toBe(0);
|
|
@@ -39,7 +41,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
39
41
|
});
|
|
40
42
|
describe("FR-6.2: exportByType(resourceType: string): Bundle creates new bundle with all resources of specified type", () => {
|
|
41
43
|
it("should export all resources of specified type", async () => {
|
|
42
|
-
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
44
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
43
45
|
const exportedBundle = sdk.exportByType("Patient");
|
|
44
46
|
expect(exportedBundle).toBeDefined();
|
|
45
47
|
expect(exportedBundle.resourceType).toBe("Bundle");
|
|
@@ -50,13 +52,13 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
50
52
|
});
|
|
51
53
|
});
|
|
52
54
|
it("should return empty bundle for nonexistent resource type", async () => {
|
|
53
|
-
const sdk = await FhirBundleSdk.create(patientsOnlyBundle);
|
|
55
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.patientsOnlyBundle);
|
|
54
56
|
const exportedBundle = sdk.exportByType("Observation");
|
|
55
57
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
56
58
|
expect(exportedBundle.total).toBe(0);
|
|
57
59
|
});
|
|
58
60
|
it("should export all observations from mixed bundle", async () => {
|
|
59
|
-
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
61
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
60
62
|
const exportedBundle = sdk.exportByType("Observation");
|
|
61
63
|
expect(exportedBundle.entry?.length).toBeGreaterThan(0);
|
|
62
64
|
exportedBundle.entry?.forEach(entry => {
|
|
@@ -66,7 +68,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
66
68
|
});
|
|
67
69
|
describe("FR-6.3: exportByTypes(resourceTypes: string[]): Bundle creates new bundle with all resources of specified types", () => {
|
|
68
70
|
it("should export all resources of specified types", async () => {
|
|
69
|
-
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
71
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
70
72
|
const exportedBundle = sdk.exportByTypes(["Patient", "Observation"]);
|
|
71
73
|
expect(exportedBundle).toBeDefined();
|
|
72
74
|
expect(exportedBundle.entry?.length).toBeGreaterThan(0);
|
|
@@ -76,13 +78,13 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
76
78
|
});
|
|
77
79
|
});
|
|
78
80
|
it("should handle empty resource types array", async () => {
|
|
79
|
-
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
81
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
80
82
|
const exportedBundle = sdk.exportByTypes([]);
|
|
81
83
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
82
84
|
expect(exportedBundle.total).toBe(0);
|
|
83
85
|
});
|
|
84
86
|
it("should handle mix of existing and nonexistent resource types", async () => {
|
|
85
|
-
const sdk = await FhirBundleSdk.create(patientsOnlyBundle);
|
|
87
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.patientsOnlyBundle);
|
|
86
88
|
const exportedBundle = sdk.exportByTypes(["Patient", "Observation", "Encounter"]);
|
|
87
89
|
expect(exportedBundle.entry?.length).toBeGreaterThan(0);
|
|
88
90
|
exportedBundle.entry?.forEach(entry => {
|
|
@@ -92,29 +94,29 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
92
94
|
});
|
|
93
95
|
describe("FR-6.4: Exported bundles maintain original bundle metadata but update total count", () => {
|
|
94
96
|
it("should maintain original bundle metadata", async () => {
|
|
95
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
97
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
96
98
|
const exportedBundle = sdk.exportSubset(["patient-123"]);
|
|
97
99
|
expect(exportedBundle.resourceType).toBe("Bundle");
|
|
98
|
-
expect(exportedBundle.type).toBe(validCompleteBundle.type);
|
|
100
|
+
expect(exportedBundle.type).toBe(fhir_bundles_1.validCompleteBundle.type);
|
|
99
101
|
// Preserve original bundle metadata if it exists
|
|
100
|
-
if (validCompleteBundle.id) {
|
|
101
|
-
expect(exportedBundle.id).toBe(validCompleteBundle.id);
|
|
102
|
+
if (fhir_bundles_1.validCompleteBundle.id) {
|
|
103
|
+
expect(exportedBundle.id).toBe(fhir_bundles_1.validCompleteBundle.id);
|
|
102
104
|
}
|
|
103
|
-
if (validCompleteBundle.meta) {
|
|
104
|
-
expect(exportedBundle.meta).toEqual(validCompleteBundle.meta);
|
|
105
|
+
if (fhir_bundles_1.validCompleteBundle.meta) {
|
|
106
|
+
expect(exportedBundle.meta).toEqual(fhir_bundles_1.validCompleteBundle.meta);
|
|
105
107
|
}
|
|
106
|
-
if (validCompleteBundle.timestamp) {
|
|
107
|
-
expect(exportedBundle.timestamp).toBe(validCompleteBundle.timestamp);
|
|
108
|
+
if (fhir_bundles_1.validCompleteBundle.timestamp) {
|
|
109
|
+
expect(exportedBundle.timestamp).toBe(fhir_bundles_1.validCompleteBundle.timestamp);
|
|
108
110
|
}
|
|
109
111
|
});
|
|
110
112
|
it("should update total count correctly", async () => {
|
|
111
|
-
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
113
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
112
114
|
const exportedBundle = sdk.exportByType("Patient");
|
|
113
115
|
expect(exportedBundle.total).toBe(exportedBundle.entry?.length);
|
|
114
116
|
expect(exportedBundle.total).toBeGreaterThan(0);
|
|
115
117
|
});
|
|
116
118
|
it("should set total to 0 for empty exports", async () => {
|
|
117
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
119
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
118
120
|
const exportedBundle = sdk.exportSubset([]);
|
|
119
121
|
expect(exportedBundle.total).toBe(0);
|
|
120
122
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
@@ -122,7 +124,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
122
124
|
});
|
|
123
125
|
describe("FR-6.6: Exported bundles preserve original entry.fullUrl values", () => {
|
|
124
126
|
it("should preserve fullUrl values in exported entries", async () => {
|
|
125
|
-
const sdk = await FhirBundleSdk.create(bundleWithFullUrlReferences);
|
|
127
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
|
|
126
128
|
const exportedBundle = sdk.exportSubset(["patient-fullurl"]);
|
|
127
129
|
expect(exportedBundle.entry).toHaveLength(1);
|
|
128
130
|
const entry = exportedBundle.entry?.[0];
|
|
@@ -130,7 +132,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
130
132
|
expect(entry?.fullUrl).toContain("urn:uuid:");
|
|
131
133
|
});
|
|
132
134
|
it("should maintain fullUrl consistency across export types", async () => {
|
|
133
|
-
const sdk = await FhirBundleSdk.create(bundleWithFullUrlReferences);
|
|
135
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
|
|
134
136
|
const exportBySubset = sdk.exportSubset(["patient-fullurl"]);
|
|
135
137
|
const exportByType = sdk.exportByType("Patient");
|
|
136
138
|
const subsetEntry = exportBySubset.entry?.[0];
|
|
@@ -140,7 +142,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
140
142
|
});
|
|
141
143
|
describe("Performance and Edge Cases", () => {
|
|
142
144
|
it("should handle large resource lists efficiently", async () => {
|
|
143
|
-
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
145
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
|
|
144
146
|
const start = performance.now();
|
|
145
147
|
const exportedBundle = sdk.exportByTypes(["Patient", "Observation", "Encounter"]);
|
|
146
148
|
const end = performance.now();
|
|
@@ -149,13 +151,13 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
149
151
|
});
|
|
150
152
|
it("should handle bundles with undefined entries", async () => {
|
|
151
153
|
const emptyBundle = { resourceType: "Bundle", type: "collection" };
|
|
152
|
-
const sdk = await FhirBundleSdk.create(emptyBundle);
|
|
154
|
+
const sdk = await index_1.FhirBundleSdk.create(emptyBundle);
|
|
153
155
|
const exportedBundle = sdk.exportSubset(["any-id"]);
|
|
154
156
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
155
157
|
expect(exportedBundle.total).toBe(0);
|
|
156
158
|
});
|
|
157
159
|
it("should return new bundle instances, not references", async () => {
|
|
158
|
-
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
160
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
159
161
|
const exportedBundle1 = sdk.exportSubset(["patient-123"]);
|
|
160
162
|
const exportedBundle2 = sdk.exportSubset(["patient-123"]);
|
|
161
163
|
expect(exportedBundle1).not.toBe(exportedBundle2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase4-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase4-verification.test.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"phase4-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase4-verification.test.ts"],"names":[],"mappings":"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"}
|