@api-client/core 0.11.11 → 0.12.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.
Files changed (252) hide show
  1. package/Testing.md +1 -1
  2. package/bin/plugins/events/EventPlugin.ts +61 -0
  3. package/bin/plugins/events/assert.ts +193 -0
  4. package/bin/plugins/events/types.ts +6 -0
  5. package/bin/test.ts +8 -1
  6. package/build/src/amf/AmfShapeGenerator.d.ts +6 -3
  7. package/build/src/amf/AmfShapeGenerator.d.ts.map +1 -1
  8. package/build/src/amf/AmfShapeGenerator.js +4 -1
  9. package/build/src/amf/AmfShapeGenerator.js.map +1 -1
  10. package/build/src/amf/AmfTypes.d.ts +2 -2
  11. package/build/src/amf/AmfTypes.d.ts.map +1 -1
  12. package/build/src/amf/AmfTypes.js.map +1 -1
  13. package/build/src/amf/DataValueGenerator.d.ts +15 -15
  14. package/build/src/amf/DataValueGenerator.d.ts.map +1 -1
  15. package/build/src/amf/DataValueGenerator.js +14 -14
  16. package/build/src/amf/DataValueGenerator.js.map +1 -1
  17. package/build/src/browser.d.ts +12 -9
  18. package/build/src/browser.d.ts.map +1 -1
  19. package/build/src/browser.js +11 -8
  20. package/build/src/browser.js.map +1 -1
  21. package/build/src/exceptions/attach_exception.d.ts +11 -0
  22. package/build/src/exceptions/attach_exception.d.ts.map +1 -0
  23. package/build/src/exceptions/attach_exception.js +11 -0
  24. package/build/src/exceptions/attach_exception.js.map +1 -0
  25. package/build/src/exceptions/detach_exception.d.ts +11 -0
  26. package/build/src/exceptions/detach_exception.d.ts.map +1 -0
  27. package/build/src/exceptions/detach_exception.js +11 -0
  28. package/build/src/exceptions/detach_exception.js.map +1 -0
  29. package/build/src/exceptions/remove_model_exception.d.ts +8 -0
  30. package/build/src/exceptions/remove_model_exception.d.ts.map +1 -0
  31. package/build/src/exceptions/remove_model_exception.js +8 -0
  32. package/build/src/exceptions/remove_model_exception.js.map +1 -0
  33. package/build/src/exceptions/remove_namespace_exception.d.ts +8 -0
  34. package/build/src/exceptions/remove_namespace_exception.d.ts.map +1 -0
  35. package/build/src/exceptions/remove_namespace_exception.js +8 -0
  36. package/build/src/exceptions/remove_namespace_exception.js.map +1 -0
  37. package/build/src/index.d.ts +12 -9
  38. package/build/src/index.d.ts.map +1 -1
  39. package/build/src/index.js +11 -8
  40. package/build/src/index.js.map +1 -1
  41. package/build/src/legacy.d.ts +8 -0
  42. package/build/src/legacy.d.ts.map +1 -1
  43. package/build/src/legacy.js +9 -0
  44. package/build/src/legacy.js.map +1 -1
  45. package/build/src/modeling/Bindings.d.ts +2 -2
  46. package/build/src/modeling/Bindings.d.ts.map +1 -1
  47. package/build/src/modeling/Bindings.js.map +1 -1
  48. package/build/src/modeling/DataDomain.d.ts +601 -0
  49. package/build/src/modeling/DataDomain.d.ts.map +1 -0
  50. package/build/src/modeling/DataDomain.js +1142 -0
  51. package/build/src/modeling/DataDomain.js.map +1 -0
  52. package/build/src/modeling/DataFormat.d.ts +42 -41
  53. package/build/src/modeling/DataFormat.d.ts.map +1 -1
  54. package/build/src/modeling/DataFormat.js +30 -131
  55. package/build/src/modeling/DataFormat.js.map +1 -1
  56. package/build/src/modeling/DomainAssociation.d.ts +281 -0
  57. package/build/src/modeling/DomainAssociation.d.ts.map +1 -0
  58. package/build/src/modeling/DomainAssociation.js +440 -0
  59. package/build/src/modeling/DomainAssociation.js.map +1 -0
  60. package/build/src/modeling/DomainElement.d.ts +33 -0
  61. package/build/src/modeling/DomainElement.d.ts.map +1 -0
  62. package/build/src/modeling/DomainElement.js +32 -0
  63. package/build/src/modeling/DomainElement.js.map +1 -0
  64. package/build/src/modeling/DomainEntity.d.ts +383 -0
  65. package/build/src/modeling/DomainEntity.d.ts.map +1 -0
  66. package/build/src/modeling/DomainEntity.js +718 -0
  67. package/build/src/modeling/DomainEntity.js.map +1 -0
  68. package/build/src/modeling/DomainFile.d.ts +25 -0
  69. package/build/src/modeling/DomainFile.d.ts.map +1 -0
  70. package/build/src/modeling/DomainFile.js +86 -0
  71. package/build/src/modeling/DomainFile.js.map +1 -0
  72. package/build/src/modeling/DomainImpactAnalysis.d.ts +60 -47
  73. package/build/src/modeling/DomainImpactAnalysis.d.ts.map +1 -1
  74. package/build/src/modeling/DomainImpactAnalysis.js +201 -132
  75. package/build/src/modeling/DomainImpactAnalysis.js.map +1 -1
  76. package/build/src/modeling/DomainModel.d.ts +226 -0
  77. package/build/src/modeling/DomainModel.d.ts.map +1 -0
  78. package/build/src/modeling/DomainModel.js +401 -0
  79. package/build/src/modeling/DomainModel.js.map +1 -0
  80. package/build/src/modeling/DomainNamespace.d.ts +268 -0
  81. package/build/src/modeling/DomainNamespace.d.ts.map +1 -0
  82. package/build/src/modeling/DomainNamespace.js +512 -0
  83. package/build/src/modeling/DomainNamespace.js.map +1 -0
  84. package/build/src/modeling/DomainProperty.d.ts +281 -0
  85. package/build/src/modeling/DomainProperty.d.ts.map +1 -0
  86. package/build/src/modeling/DomainProperty.js +560 -0
  87. package/build/src/modeling/DomainProperty.js.map +1 -0
  88. package/build/src/modeling/DomainSerialization.d.ts +40 -0
  89. package/build/src/modeling/DomainSerialization.d.ts.map +1 -0
  90. package/build/src/modeling/DomainSerialization.js +288 -0
  91. package/build/src/modeling/DomainSerialization.js.map +1 -0
  92. package/build/src/modeling/DomainVersioning.d.ts +17 -0
  93. package/build/src/modeling/DomainVersioning.d.ts.map +1 -0
  94. package/build/src/modeling/DomainVersioning.js +124 -0
  95. package/build/src/modeling/DomainVersioning.js.map +1 -0
  96. package/build/src/modeling/GraphUtils.d.ts +8 -0
  97. package/build/src/modeling/GraphUtils.d.ts.map +1 -0
  98. package/build/src/modeling/GraphUtils.js +26 -0
  99. package/build/src/modeling/GraphUtils.js.map +1 -0
  100. package/build/src/modeling/amf/ShapeGenerator.d.ts +164 -0
  101. package/build/src/modeling/amf/ShapeGenerator.d.ts.map +1 -0
  102. package/build/src/modeling/amf/ShapeGenerator.js +492 -0
  103. package/build/src/modeling/amf/ShapeGenerator.js.map +1 -0
  104. package/build/src/modeling/{DataAssociation.d.ts → legacy/DataAssociation.d.ts} +10 -5
  105. package/build/src/modeling/legacy/DataAssociation.d.ts.map +1 -0
  106. package/build/src/modeling/{DataAssociation.js → legacy/DataAssociation.js} +9 -6
  107. package/build/src/modeling/legacy/DataAssociation.js.map +1 -0
  108. package/build/src/modeling/{DataEntity.d.ts → legacy/DataEntity.d.ts} +12 -7
  109. package/build/src/modeling/legacy/DataEntity.d.ts.map +1 -0
  110. package/build/src/modeling/{DataEntity.js → legacy/DataEntity.js} +19 -18
  111. package/build/src/modeling/legacy/DataEntity.js.map +1 -0
  112. package/build/src/modeling/{DataEntityBuilder.d.ts → legacy/DataEntityBuilder.d.ts} +3 -2
  113. package/build/src/modeling/legacy/DataEntityBuilder.d.ts.map +1 -0
  114. package/build/src/modeling/{DataEntityBuilder.js → legacy/DataEntityBuilder.js} +3 -2
  115. package/build/src/modeling/legacy/DataEntityBuilder.js.map +1 -0
  116. package/build/src/modeling/legacy/DataImpactAnalysis.d.ts +298 -0
  117. package/build/src/modeling/legacy/DataImpactAnalysis.d.ts.map +1 -0
  118. package/build/src/modeling/legacy/DataImpactAnalysis.js +441 -0
  119. package/build/src/modeling/legacy/DataImpactAnalysis.js.map +1 -0
  120. package/build/src/modeling/{DataModel.d.ts → legacy/DataModel.d.ts} +6 -4
  121. package/build/src/modeling/legacy/DataModel.d.ts.map +1 -0
  122. package/build/src/modeling/{DataModel.js → legacy/DataModel.js} +7 -6
  123. package/build/src/modeling/legacy/DataModel.js.map +1 -0
  124. package/build/src/modeling/{DataNamespace.d.ts → legacy/DataNamespace.d.ts} +22 -3
  125. package/build/src/modeling/legacy/DataNamespace.d.ts.map +1 -0
  126. package/build/src/modeling/{DataNamespace.js → legacy/DataNamespace.js} +7 -3
  127. package/build/src/modeling/legacy/DataNamespace.js.map +1 -0
  128. package/build/src/modeling/{DataProperty.d.ts → legacy/DataProperty.d.ts} +13 -5
  129. package/build/src/modeling/legacy/DataProperty.d.ts.map +1 -0
  130. package/build/src/modeling/{DataProperty.js → legacy/DataProperty.js} +8 -5
  131. package/build/src/modeling/legacy/DataProperty.js.map +1 -0
  132. package/build/src/modeling/observed.d.ts +67 -0
  133. package/build/src/modeling/observed.d.ts.map +1 -0
  134. package/build/src/modeling/observed.js +230 -0
  135. package/build/src/modeling/observed.js.map +1 -0
  136. package/build/src/modeling/types.d.ts +165 -1
  137. package/build/src/modeling/types.d.ts.map +1 -1
  138. package/build/src/modeling/types.js.map +1 -1
  139. package/build/src/models/Thing.d.ts +26 -5
  140. package/build/src/models/Thing.d.ts.map +1 -1
  141. package/build/src/models/Thing.js +193 -91
  142. package/build/src/models/Thing.js.map +1 -1
  143. package/build/src/models/kinds.d.ts +31 -6
  144. package/build/src/models/kinds.d.ts.map +1 -1
  145. package/build/src/models/kinds.js +31 -6
  146. package/build/src/models/kinds.js.map +1 -1
  147. package/build/src/models/store/DataFile.d.ts +3 -1
  148. package/build/src/models/store/DataFile.d.ts.map +1 -1
  149. package/build/src/models/store/DataFile.js +2 -0
  150. package/build/src/models/store/DataFile.js.map +1 -1
  151. package/build/src/models/types.d.ts +12 -0
  152. package/build/src/models/types.d.ts.map +1 -0
  153. package/build/src/models/types.js +2 -0
  154. package/build/src/models/types.js.map +1 -0
  155. package/build/src/runtime/store/FilesSdk.d.ts +2 -2
  156. package/build/src/runtime/store/FilesSdk.d.ts.map +1 -1
  157. package/build/src/runtime/store/FilesSdk.js.map +1 -1
  158. package/data/models/example-generator-api.json +16 -16
  159. package/package.json +20 -6
  160. package/readme.md +1 -1
  161. package/src/amf/AmfShapeGenerator.ts +7 -4
  162. package/src/amf/AmfTypes.ts +2 -2
  163. package/src/amf/DataValueGenerator.ts +21 -21
  164. package/src/exceptions/attach_exception.ts +11 -0
  165. package/src/exceptions/detach_exception.ts +11 -0
  166. package/src/exceptions/remove_model_exception.ts +8 -0
  167. package/src/exceptions/remove_namespace_exception.ts +8 -0
  168. package/src/modeling/Bindings.ts +2 -2
  169. package/src/modeling/DataDomain.ts +1221 -0
  170. package/src/modeling/DataFormat.ts +54 -163
  171. package/src/modeling/DomainAssociation.ts +476 -0
  172. package/src/modeling/DomainElement.ts +50 -0
  173. package/src/modeling/DomainEntity.ts +769 -0
  174. package/src/modeling/DomainFile.ts +94 -0
  175. package/src/modeling/DomainImpactAnalysis.ts +218 -144
  176. package/src/modeling/DomainModel.ts +421 -0
  177. package/src/modeling/DomainNamespace.ts +537 -0
  178. package/src/modeling/DomainProperty.ts +548 -0
  179. package/src/modeling/DomainSerialization.ts +312 -0
  180. package/src/modeling/DomainVersioning.ts +144 -0
  181. package/src/modeling/GraphUtils.ts +28 -0
  182. package/src/modeling/amf/ShapeGenerator.ts +552 -0
  183. package/src/modeling/graph.md +115 -0
  184. package/src/modeling/{DataAssociation.ts → legacy/DataAssociation.ts} +13 -8
  185. package/src/modeling/{DataEntity.ts → legacy/DataEntity.ts} +28 -23
  186. package/src/modeling/{DataEntityBuilder.ts → legacy/DataEntityBuilder.ts} +4 -3
  187. package/src/modeling/legacy/DataImpactAnalysis.ts +530 -0
  188. package/src/modeling/{DataModel.ts → legacy/DataModel.ts} +10 -8
  189. package/src/modeling/{DataNamespace.ts → legacy/DataNamespace.ts} +23 -5
  190. package/src/modeling/{DataProperty.ts → legacy/DataProperty.ts} +15 -7
  191. package/src/modeling/observed.ts +267 -0
  192. package/src/modeling/types.ts +174 -1
  193. package/src/models/Thing.ts +70 -5
  194. package/src/models/kinds.ts +32 -6
  195. package/src/models/store/DataFile.ts +3 -1
  196. package/src/models/types.ts +11 -0
  197. package/src/runtime/store/FilesSdk.ts +2 -2
  198. package/tests/unit/amf/data_value_generator.spec.ts +15 -15
  199. package/tests/unit/legacy-transformers/ARC-legacy-import.spec.ts +1 -1
  200. package/tests/unit/modeling/amf/shape_generator.spec.ts +1174 -0
  201. package/tests/unit/modeling/data_domain.spec.ts +444 -0
  202. package/tests/unit/modeling/data_domain_associations.spec.ts +279 -0
  203. package/tests/unit/modeling/data_domain_change_observers.spec.ts +681 -0
  204. package/tests/unit/modeling/data_domain_entities.spec.ts +449 -0
  205. package/tests/unit/modeling/data_domain_foreign.spec.ts +355 -0
  206. package/tests/unit/modeling/data_domain_models.spec.ts +658 -0
  207. package/tests/unit/modeling/data_domain_namespaces.spec.ts +668 -0
  208. package/tests/unit/modeling/data_domain_property.spec.ts +264 -0
  209. package/tests/unit/modeling/data_domain_serialization.spec.ts +294 -0
  210. package/tests/unit/modeling/domain.property.spec.ts +822 -0
  211. package/tests/unit/modeling/domain_asociation.spec.ts +643 -0
  212. package/tests/unit/modeling/domain_asociation_targets.spec.ts +350 -0
  213. package/tests/unit/modeling/domain_entity.spec.ts +730 -0
  214. package/tests/unit/modeling/domain_entity_associations.spec.ts +330 -0
  215. package/tests/unit/modeling/domain_entity_example_generator_json.spec.ts +988 -0
  216. package/tests/unit/modeling/domain_entity_example_generator_xml.spec.ts +1451 -0
  217. package/tests/unit/modeling/domain_entity_fields.spec.ts +113 -0
  218. package/tests/unit/modeling/domain_entity_generators.spec.ts +20 -0
  219. package/tests/unit/modeling/domain_entity_parents.spec.ts +291 -0
  220. package/tests/unit/modeling/domain_entity_properties.spec.ts +305 -0
  221. package/tests/unit/modeling/{data_file.spec.ts → domain_file.spec.ts} +29 -85
  222. package/tests/unit/modeling/domain_impact_analysis.spec.ts +452 -0
  223. package/tests/unit/modeling/domain_model.spec.ts +568 -0
  224. package/tests/unit/modeling/domain_model_entities.spec.ts +408 -0
  225. package/tests/unit/modeling/domain_namespace.spec.ts +514 -0
  226. package/tests/unit/modeling/domain_namespace_models.spec.ts +324 -0
  227. package/tests/unit/modeling/domain_namespace_namespaces.spec.ts +404 -0
  228. package/tests/unit/modeling/domain_versioning.spec.ts +140 -0
  229. package/tests/unit/{amf → modeling/legacy}/amf_shape_generator.spec.ts +11 -11
  230. package/tests/unit/modeling/{data_association.spec.ts → legacy/data_association.spec.ts} +3 -11
  231. package/tests/unit/modeling/{data_entity.spec.ts → legacy/data_entity.spec.ts} +10 -8
  232. package/tests/unit/modeling/{data_entity_generator_json.spec.ts → legacy/data_entity_generator_json.spec.ts} +1 -1
  233. package/tests/unit/modeling/{data_entity_generator_xml.spec.ts → legacy/data_entity_generator_xml.spec.ts} +1 -1
  234. package/tests/unit/modeling/{data_model.spec.ts → legacy/data_model.spec.ts} +3 -3
  235. package/tests/unit/modeling/{data_namespace.spec.ts → legacy/data_namespace.spec.ts} +3 -10
  236. package/tests/unit/modeling/{data_property.spec.ts → legacy/data_property.spec.ts} +3 -6
  237. package/tests/unit/modeling/{impact_analysis.spec.ts → legacy/impact_analysis.spec.ts} +9 -9
  238. package/tests/unit/models/File/new.spec.ts +1 -1
  239. package/tests/unit/models/HttpProject.spec.ts +3 -3
  240. package/tsconfig.node.json +35 -0
  241. package/build/src/modeling/DataAssociation.d.ts.map +0 -1
  242. package/build/src/modeling/DataAssociation.js.map +0 -1
  243. package/build/src/modeling/DataEntity.d.ts.map +0 -1
  244. package/build/src/modeling/DataEntity.js.map +0 -1
  245. package/build/src/modeling/DataEntityBuilder.d.ts.map +0 -1
  246. package/build/src/modeling/DataEntityBuilder.js.map +0 -1
  247. package/build/src/modeling/DataModel.d.ts.map +0 -1
  248. package/build/src/modeling/DataModel.js.map +0 -1
  249. package/build/src/modeling/DataNamespace.d.ts.map +0 -1
  250. package/build/src/modeling/DataNamespace.js.map +0 -1
  251. package/build/src/modeling/DataProperty.d.ts.map +0 -1
  252. package/build/src/modeling/DataProperty.js.map +0 -1
@@ -0,0 +1,279 @@
1
+ import { test } from '@japa/runner'
2
+ import { DataDomain } from '../../../src/modeling/DataDomain.js'
3
+ import { DomainAssociation } from '../../../src/modeling/DomainAssociation.js'
4
+
5
+ test.group('DataDomain.addAssociation()', () => {
6
+ test('addAssociation adds an association to an entity', ({ assert }) => {
7
+ const dataDomain = new DataDomain()
8
+ const model = dataDomain.addModel({ key: 'test-model' })
9
+ const entity = dataDomain.addEntity(model.key, { key: 'test-entity' })
10
+ const association = dataDomain.addAssociation(entity.key)
11
+ assert.instanceOf(association, DomainAssociation)
12
+ assert.isTrue(dataDomain.graph.hasNode(association.key))
13
+ })
14
+
15
+ test('addAssociation adds an association to an entity with a target', ({ assert }) => {
16
+ const dataDomain = new DataDomain()
17
+ const model = dataDomain.addModel({ key: 'test-model' })
18
+ const entity1 = dataDomain.addEntity(model.key, { key: 'entity1' })
19
+ const entity2 = dataDomain.addEntity(model.key, { key: 'entity2' })
20
+ const association = dataDomain.addAssociation(entity1.key, { key: entity2.key })
21
+ assert.instanceOf(association, DomainAssociation)
22
+ assert.isTrue(dataDomain.graph.hasNode(association.key))
23
+ })
24
+
25
+ test('addAssociation throws an error if source entity does not exist', ({ assert }) => {
26
+ const dataDomain = new DataDomain()
27
+ assert.throws(() => {
28
+ dataDomain.addAssociation('non-existent-entity')
29
+ }, 'Source entity non-existent-entity not found')
30
+ })
31
+
32
+ test('addAssociation adds an association with default values', ({ assert }) => {
33
+ const dataDomain = new DataDomain()
34
+ const model = dataDomain.addModel({ key: 'test-model' })
35
+ const entity = dataDomain.addEntity(model.key, { key: 'test-entity' })
36
+ const association = dataDomain.addAssociation(entity.key)
37
+ assert.instanceOf(association, DomainAssociation)
38
+ assert.isTrue(dataDomain.graph.hasNode(association.key))
39
+ assert.typeOf(association.key, 'string')
40
+ assert.equal(association.info.name, 'New association')
41
+ })
42
+
43
+ test('addAssociation notifies change', async ({ assert }) => {
44
+ const dataDomain = new DataDomain()
45
+ const model = dataDomain.addModel({ key: 'test-model' })
46
+ const entity = dataDomain.addEntity(model.key, { key: 'test-entity' })
47
+ dataDomain.addAssociation(entity.key)
48
+ await assert.dispatches(dataDomain, 'change', { timeout: 20 })
49
+ })
50
+
51
+ test('addAssociation adds an association to an entity - checks parent-child relationship', ({ assert }) => {
52
+ const dataDomain = new DataDomain()
53
+ const model = dataDomain.addModel({ key: 'test-model' })
54
+ const entity = dataDomain.addEntity(model.key, { key: 'test-entity' })
55
+ const association = dataDomain.addAssociation(entity.key)
56
+ assert.isTrue(dataDomain.graph.hasEdge(entity.key, association.key))
57
+ })
58
+
59
+ test('addAssociation adds an association to an entity - checks items list', ({ assert }) => {
60
+ const dataDomain = new DataDomain()
61
+ const model = dataDomain.addModel({ key: 'test-model' })
62
+ const entity = dataDomain.addEntity(model.key, { key: 'test-entity' })
63
+ const association = dataDomain.addAssociation(entity.key)
64
+ assert.deepInclude([...entity.listAssociations()], association)
65
+ })
66
+
67
+ test('addAssociation throws an error if no source is provided', ({ assert }) => {
68
+ const dataDomain = new DataDomain()
69
+ assert.throws(() => {
70
+ // @ts-expect-error For testing purposes, we are passing undefined
71
+ dataDomain.addAssociation(undefined)
72
+ }, 'Source entity undefined not found')
73
+ })
74
+
75
+ test('addAssociation adds an association to a foreign entity', ({ assert }) => {
76
+ const domain1 = new DataDomain()
77
+ const m1 = domain1.addModel({ key: 'model1' })
78
+ const e1 = domain1.addEntity(m1.key, { key: 'entity1' })
79
+
80
+ const domain2 = new DataDomain()
81
+ const m2 = domain2.addModel({ key: 'model2' })
82
+ domain2.addEntity(m2.key, { key: 'entity2' })
83
+ domain2.info.version = '1.0.0'
84
+
85
+ domain1.registerForeignDomain(domain2)
86
+
87
+ const association = domain1.addAssociation(e1.key, { key: 'entity2', domain: domain2.key })
88
+ assert.instanceOf(association, DomainAssociation)
89
+ assert.isTrue(domain1.graph.hasNode(association.key))
90
+ })
91
+
92
+ test('addAssociation throws an error if foreign entity does not exist', ({ assert }) => {
93
+ const domain1 = new DataDomain()
94
+ const m1 = domain1.addModel({ key: 'model1' })
95
+ const e1 = domain1.addEntity(m1.key, { key: 'entity1' })
96
+
97
+ const domain2 = new DataDomain()
98
+ domain2.info.version = '1.0.0'
99
+ domain1.registerForeignDomain(domain2)
100
+
101
+ assert.throws(() => {
102
+ domain1.addAssociation(e1.key, { key: 'non-existent-entity', domain: 'domain2' })
103
+ }, 'Foreign entity domain2:non-existent-entity not found')
104
+ })
105
+ })
106
+
107
+ test.group('DataDomain.removeAssociation()', () => {
108
+ test('removes an association from the graph', ({ assert }) => {
109
+ const dataDomain = new DataDomain()
110
+ const model = dataDomain.addModel({ key: 'test-model' })
111
+ const entity = dataDomain.addEntity(model.key, { key: 'test-entity' })
112
+ const association = dataDomain.addAssociation(entity.key)
113
+ dataDomain.removeAssociation(association.key)
114
+ assert.isFalse(dataDomain.graph.hasNode(association.key))
115
+ })
116
+
117
+ test('throws an error if the association does not exist', ({ assert }) => {
118
+ const dataDomain = new DataDomain()
119
+ assert.throws(() => {
120
+ dataDomain.removeAssociation('non-existent-association')
121
+ }, 'Association non-existent-association does not exist')
122
+ })
123
+
124
+ test('removes the association from the parent entity', ({ assert }) => {
125
+ const dataDomain = new DataDomain()
126
+ const model = dataDomain.addModel({ key: 'test-model' })
127
+ const entity = dataDomain.addEntity(model.key, { key: 'test-entity' })
128
+ const association = dataDomain.addAssociation(entity.key)
129
+ dataDomain.removeAssociation(association.key)
130
+ assert.isFalse(entity.hasAssociations())
131
+ })
132
+
133
+ test('throws an error when the parent entity is not found', ({ assert }) => {
134
+ const dataDomain = new DataDomain()
135
+ const association = new DomainAssociation(dataDomain, 'non-existent-entity')
136
+ dataDomain.graph.setNode(association.key, association)
137
+ assert.throws(() => {
138
+ dataDomain.removeAssociation(association.key)
139
+ }, `Parent entity not found for association ${association.key}`)
140
+ })
141
+
142
+ test('notifies change', async ({ assert }) => {
143
+ const dataDomain = new DataDomain()
144
+ const model = dataDomain.addModel({ key: 'test-model' })
145
+ const entity = dataDomain.addEntity(model.key, { key: 'test-entity' })
146
+ const association = dataDomain.addAssociation(entity.key)
147
+ dataDomain.removeAssociation(association.key)
148
+ await assert.dispatches(dataDomain, 'change', { timeout: 20 })
149
+ })
150
+
151
+ test('removes an association to a foreign entity', ({ assert }) => {
152
+ const domain1 = new DataDomain()
153
+ const m1 = domain1.addModel({ key: 'model1' })
154
+ const e1 = domain1.addEntity(m1.key, { key: 'entity1' })
155
+
156
+ const domain2 = new DataDomain()
157
+ const m2 = domain2.addModel({ key: 'model2' })
158
+ const e2 = domain2.addEntity(m2.key, { key: 'entity2' })
159
+ domain2.info.version = '1.0.0'
160
+ domain1.registerForeignDomain(domain2)
161
+
162
+ const association = domain1.addAssociation(e1.key, { key: e2.key, domain: domain2.key })
163
+ domain1.removeAssociation(association.key)
164
+ assert.isFalse(domain1.graph.hasNode(association.key))
165
+ })
166
+
167
+ test('throws an error if the association is not of type DomainAssociation', ({ assert }) => {
168
+ const dataDomain = new DataDomain()
169
+ const model = dataDomain.addModel({ key: 'test-model' })
170
+ dataDomain.graph.setNode(model.key, model)
171
+ assert.throws(() => {
172
+ dataDomain.removeAssociation(model.key)
173
+ }, 'Association test-model not found')
174
+ })
175
+
176
+ test('removes the association from the fields list', ({ assert }) => {
177
+ const dataDomain = new DataDomain()
178
+ const model = dataDomain.addModel({ key: 'test-model' })
179
+ const entity = dataDomain.addEntity(model.key, { key: 'test-entity' })
180
+ const association = dataDomain.addAssociation(entity.key)
181
+ dataDomain.removeAssociation(association.key)
182
+ assert.deepEqual([...entity.listFields()], [])
183
+ })
184
+ })
185
+
186
+ test.group('DataDomain.findAssociation()', () => {
187
+ test('finds an association by its key', ({ assert }) => {
188
+ const dataDomain = new DataDomain()
189
+ const model = dataDomain.addModel({ key: 'test-model' })
190
+ const entity = dataDomain.addEntity(model.key, { key: 'test-entity' })
191
+ const association = dataDomain.addAssociation(entity.key)
192
+ const foundAssociation = dataDomain.findAssociation(association.key)
193
+ assert.deepEqual(foundAssociation, association)
194
+ })
195
+
196
+ test('returns undefined if association does not exist', ({ assert }) => {
197
+ const dataDomain = new DataDomain()
198
+ const foundAssociation = dataDomain.findAssociation('non-existent-association')
199
+ assert.isUndefined(foundAssociation)
200
+ })
201
+
202
+ test('returns undefined if key is not an association', ({ assert }) => {
203
+ const dataDomain = new DataDomain()
204
+ const model = dataDomain.addModel({ key: 'test-model' })
205
+ const foundAssociation = dataDomain.findAssociation(model.key)
206
+ assert.isUndefined(foundAssociation)
207
+ })
208
+
209
+ test('returns undefined if key is undefined', ({ assert }) => {
210
+ const dataDomain = new DataDomain()
211
+ // @ts-expect-error For testing purposes
212
+ const foundAssociation = dataDomain.findAssociation(undefined)
213
+ assert.isUndefined(foundAssociation)
214
+ })
215
+
216
+ test('returns undefined if key is null', ({ assert }) => {
217
+ const dataDomain = new DataDomain()
218
+ // @ts-expect-error For testing purposes
219
+ const foundAssociation = dataDomain.findAssociation(null)
220
+ assert.isUndefined(foundAssociation)
221
+ })
222
+
223
+ test('returns undefined if key is an empty string', ({ assert }) => {
224
+ const dataDomain = new DataDomain()
225
+ const foundAssociation = dataDomain.findAssociation('')
226
+ assert.isUndefined(foundAssociation)
227
+ })
228
+
229
+ test('returns undefined if key is a number', ({ assert }) => {
230
+ const dataDomain = new DataDomain()
231
+ // @ts-expect-error For testing purposes
232
+ const foundAssociation = dataDomain.findAssociation(123)
233
+ assert.isUndefined(foundAssociation)
234
+ })
235
+
236
+ test('returns undefined if key is a boolean', ({ assert }) => {
237
+ const dataDomain = new DataDomain()
238
+ // @ts-expect-error For testing purposes
239
+ const foundAssociation = dataDomain.findAssociation(true)
240
+ assert.isUndefined(foundAssociation)
241
+ })
242
+
243
+ test('returns undefined if key is an object', ({ assert }) => {
244
+ const dataDomain = new DataDomain()
245
+ // @ts-expect-error For testing purposes
246
+ const foundAssociation = dataDomain.findAssociation({})
247
+ assert.isUndefined(foundAssociation)
248
+ })
249
+
250
+ test('returns undefined if key is an array', ({ assert }) => {
251
+ const dataDomain = new DataDomain()
252
+ // @ts-expect-error For testing purposes
253
+ const foundAssociation = dataDomain.findAssociation([])
254
+ assert.isUndefined(foundAssociation)
255
+ })
256
+
257
+ test('returns undefined if key is a function', ({ assert }) => {
258
+ const dataDomain = new DataDomain()
259
+ // @ts-expect-error For testing purposes
260
+ const foundAssociation = dataDomain.findAssociation(() => {})
261
+ assert.isUndefined(foundAssociation)
262
+ })
263
+
264
+ test('finds an association to a foreign domain', ({ assert }) => {
265
+ const domain1 = new DataDomain()
266
+ const m1 = domain1.addModel({ key: 'model1' })
267
+ const e1 = domain1.addEntity(m1.key, { key: 'entity1' })
268
+
269
+ const domain2 = new DataDomain()
270
+ const m2 = domain2.addModel({ key: 'model2' })
271
+ const e2 = domain2.addEntity(m2.key, { key: 'entity2' })
272
+ domain2.info.version = '1.0.0'
273
+ domain1.registerForeignDomain(domain2)
274
+ const association = domain1.addAssociation(e1.key, { key: e2.key, domain: domain2.key })
275
+
276
+ const foundAssociation = domain1.findAssociation(association.key)
277
+ assert.deepEqual(foundAssociation, association)
278
+ })
279
+ })