@api-client/core 0.11.10 → 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 +26 -26
  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 -6
  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,444 @@
1
+ import { test } from '@japa/runner'
2
+ import {
3
+ DomainNamespaceKind,
4
+ DomainModelKind,
5
+ DomainEntityKind,
6
+ DataDomainKind,
7
+ DomainPropertyKind,
8
+ DomainAssociationKind,
9
+ } from '../../../src/models/kinds.js'
10
+ import { Thing, DataDomain, DomainNamespace, DomainModel } from '../../../src/index.js'
11
+
12
+ test.group('DataDomain', () => {
13
+ test('constructor sets default values', ({ assert }) => {
14
+ const dataDomain = new DataDomain()
15
+ assert.equal(dataDomain.kind, DataDomainKind)
16
+ assert.typeOf(dataDomain.key, 'string')
17
+ assert.isNotEmpty(dataDomain.key)
18
+ assert.isDefined(dataDomain.graph)
19
+ assert.deepEqual(dataDomain.fields, [])
20
+ })
21
+
22
+ test('notifyChange dispatches a change event', async ({ assert }) => {
23
+ const dataDomain = new DataDomain()
24
+ dataDomain.notifyChange()
25
+ await assert.dispatches(dataDomain, 'change', { timeout: 20 })
26
+ })
27
+ })
28
+
29
+ test.group('DataDomain.removeDomainElement()', () => {
30
+ test('removes a namespace', ({ assert }) => {
31
+ const dataDomain = new DataDomain()
32
+ const namespace = dataDomain.addNamespace()
33
+ dataDomain.removeDomainElement(namespace.key, DomainNamespaceKind)
34
+ assert.isUndefined(dataDomain.findNamespace(namespace.key))
35
+ assert.isFalse(dataDomain.graph.hasNode(namespace.key))
36
+ })
37
+
38
+ test('removes a data model', ({ assert }) => {
39
+ const dataDomain = new DataDomain()
40
+ const model = dataDomain.addModel()
41
+ dataDomain.removeDomainElement(model.key, DomainModelKind)
42
+ assert.isUndefined(dataDomain.findModel(model.key))
43
+ assert.isFalse(dataDomain.graph.hasNode(model.key))
44
+ })
45
+
46
+ test('removes an entity', ({ assert }) => {
47
+ const dataDomain = new DataDomain()
48
+ const model = dataDomain.addModel()
49
+ const entity = dataDomain.addEntity(model.key)
50
+ dataDomain.removeDomainElement(entity.key, DomainEntityKind)
51
+ assert.isUndefined(dataDomain.findEntity(entity.key))
52
+ assert.isFalse(dataDomain.graph.hasNode(entity.key))
53
+ })
54
+
55
+ test('removes a property', ({ assert }) => {
56
+ const dataDomain = new DataDomain()
57
+ const model = dataDomain.addModel()
58
+ const entity = dataDomain.addEntity(model.key)
59
+ const property = dataDomain.addProperty(entity.key)
60
+ dataDomain.removeDomainElement(property.key, DomainPropertyKind)
61
+ assert.isUndefined(dataDomain.findProperty(property.key))
62
+ assert.isFalse(dataDomain.graph.hasNode(property.key))
63
+ })
64
+
65
+ test('removes an association', ({ assert }) => {
66
+ const dataDomain = new DataDomain()
67
+ const model = dataDomain.addModel()
68
+ const entity = dataDomain.addEntity(model.key)
69
+ const association = dataDomain.addAssociation(entity.key)
70
+ dataDomain.removeDomainElement(association.key, DomainAssociationKind)
71
+ assert.isUndefined(dataDomain.findAssociation(association.key))
72
+ assert.isFalse(dataDomain.graph.hasNode(association.key))
73
+ })
74
+
75
+ test('throws an error for an unknown kind', ({ assert }) => {
76
+ const dataDomain = new DataDomain()
77
+ assert.throws(() => {
78
+ dataDomain.removeDomainElement('test-unknown', 'unknown-kind')
79
+ }, 'Unknown kind unknown-kind for the object test-unknown')
80
+ })
81
+
82
+ test('throws an error when removing a non-existing namespace', ({ assert }) => {
83
+ const dataDomain = new DataDomain()
84
+ assert.throws(() => {
85
+ dataDomain.removeDomainElement('non-existent-namespace', DomainNamespaceKind)
86
+ }, `Namespace non-existent-namespace does not exist`)
87
+ })
88
+
89
+ test('throws an error when removing a non-existing model', ({ assert }) => {
90
+ const dataDomain = new DataDomain()
91
+ assert.throws(() => {
92
+ dataDomain.removeDomainElement('non-existent-model', DomainModelKind)
93
+ }, `Data model non-existent-model does not exist`)
94
+ })
95
+
96
+ test('throws an error when removing a non-existing entity', ({ assert }) => {
97
+ const dataDomain = new DataDomain()
98
+ assert.throws(() => {
99
+ dataDomain.removeDomainElement('non-existent-entity', DomainEntityKind)
100
+ }, `Entity non-existent-entity does not exist`)
101
+ })
102
+
103
+ test('throws an error when removing a non-existing property', ({ assert }) => {
104
+ const dataDomain = new DataDomain()
105
+ assert.throws(() => {
106
+ dataDomain.removeDomainElement('non-existent-property', DomainPropertyKind)
107
+ }, `Property non-existent-property does not exist`)
108
+ })
109
+
110
+ test('throws an error when removing a non-existing association', ({ assert }) => {
111
+ const dataDomain = new DataDomain()
112
+ assert.throws(() => {
113
+ dataDomain.removeDomainElement('non-existent-association', DomainAssociationKind)
114
+ }, `Association non-existent-association does not exist`)
115
+ })
116
+
117
+ test('removes a namespace with children', ({ assert }) => {
118
+ const dataDomain = new DataDomain()
119
+ const namespace = dataDomain.addNamespace()
120
+ const childNamespace = dataDomain.addNamespace({}, namespace.key)
121
+ const model = dataDomain.addModel({}, namespace.key)
122
+ const entity = dataDomain.addEntity(model.key)
123
+ const property = dataDomain.addProperty(entity.key)
124
+ const association = dataDomain.addAssociation(entity.key)
125
+
126
+ dataDomain.removeDomainElement(namespace.key, DomainNamespaceKind)
127
+
128
+ assert.isUndefined(dataDomain.findNamespace(namespace.key))
129
+ assert.isUndefined(dataDomain.findNamespace(childNamespace.key))
130
+ assert.isUndefined(dataDomain.findModel(model.key))
131
+ assert.isUndefined(dataDomain.findEntity(entity.key))
132
+ assert.isUndefined(dataDomain.findProperty(property.key))
133
+ assert.isUndefined(dataDomain.findAssociation(association.key))
134
+
135
+ assert.isFalse(dataDomain.graph.hasNode(namespace.key))
136
+ assert.isFalse(dataDomain.graph.hasNode(childNamespace.key))
137
+ assert.isFalse(dataDomain.graph.hasNode(model.key))
138
+ assert.isFalse(dataDomain.graph.hasNode(entity.key))
139
+ assert.isFalse(dataDomain.graph.hasNode(property.key))
140
+ assert.isFalse(dataDomain.graph.hasNode(association.key))
141
+ })
142
+ })
143
+
144
+ test.group('DataDomain.createSchema()', () => {
145
+ test('creates a schema with default values', ({ assert }) => {
146
+ const schema = DataDomain.createSchema()
147
+ assert.equal(schema.kind, DataDomainKind)
148
+ assert.typeOf(schema.key, 'string')
149
+ assert.isNotEmpty(schema.key)
150
+ assert.deepInclude(schema.info, { name: 'Unnamed domain' })
151
+ assert.isUndefined(schema.graph)
152
+ assert.isUndefined(schema.dependencyList)
153
+ assert.isUndefined(schema.fields)
154
+ })
155
+
156
+ test('creates a schema with provided values', ({ assert }) => {
157
+ const schema = DataDomain.createSchema({
158
+ key: 'test-domain',
159
+ info: { name: 'Test Domain', description: 'A test domain' },
160
+ graph: { nodes: [], edges: [], options: {} },
161
+ dependencyList: [{ key: 'dep1', version: '1.0.0' }],
162
+ fields: [{ key: 'field1', type: 'namespace' }],
163
+ })
164
+ assert.equal(schema.kind, DataDomainKind)
165
+ assert.equal(schema.key, 'test-domain')
166
+ assert.deepInclude(schema.info, { name: 'Test Domain', description: 'A test domain' })
167
+ assert.deepEqual(schema.graph, { nodes: [], edges: [], options: {} })
168
+ assert.deepEqual(schema.dependencyList, [{ key: 'dep1', version: '1.0.0' }])
169
+ assert.deepEqual(schema.fields, [{ key: 'field1', type: 'namespace' }])
170
+ })
171
+
172
+ test('creates a schema with partial info', ({ assert }) => {
173
+ const schema = DataDomain.createSchema({
174
+ info: { name: 'Test Domain' },
175
+ })
176
+ assert.equal(schema.kind, DataDomainKind)
177
+ assert.typeOf(schema.key, 'string')
178
+ assert.isNotEmpty(schema.key)
179
+ assert.deepInclude(schema.info, { name: 'Test Domain' })
180
+ })
181
+
182
+ test('creates a schema with empty info', ({ assert }) => {
183
+ const schema = DataDomain.createSchema({
184
+ info: {},
185
+ })
186
+ assert.equal(schema.kind, DataDomainKind)
187
+ assert.typeOf(schema.key, 'string')
188
+ assert.isNotEmpty(schema.key)
189
+ assert.deepInclude(schema.info, { name: 'Unnamed domain' })
190
+ })
191
+
192
+ test('creates a schema with dependencyList', ({ assert }) => {
193
+ const schema = DataDomain.createSchema({
194
+ dependencyList: [{ key: 'dep1', version: '1.0.0' }],
195
+ })
196
+ assert.equal(schema.kind, DataDomainKind)
197
+ assert.typeOf(schema.key, 'string')
198
+ assert.isNotEmpty(schema.key)
199
+ assert.deepInclude(schema.info, { name: 'Unnamed domain' })
200
+ assert.deepEqual(schema.dependencyList, [{ key: 'dep1', version: '1.0.0' }])
201
+ })
202
+
203
+ test('creates a schema with graph', ({ assert }) => {
204
+ const schema = DataDomain.createSchema({
205
+ graph: { nodes: [], edges: [], options: {} },
206
+ })
207
+ assert.equal(schema.kind, DataDomainKind)
208
+ assert.typeOf(schema.key, 'string')
209
+ assert.isNotEmpty(schema.key)
210
+ assert.deepInclude(schema.info, { name: 'Unnamed domain' })
211
+ assert.deepEqual(schema.graph, { nodes: [], edges: [], options: {} })
212
+ })
213
+
214
+ test('creates a schema with fields', ({ assert }) => {
215
+ const schema = DataDomain.createSchema({
216
+ fields: [{ key: 'field1', type: 'namespace' }],
217
+ })
218
+ assert.equal(schema.kind, DataDomainKind)
219
+ assert.typeOf(schema.key, 'string')
220
+ assert.isNotEmpty(schema.key)
221
+ assert.deepInclude(schema.info, { name: 'Unnamed domain' })
222
+ assert.deepEqual(schema.fields, [{ key: 'field1', type: 'namespace' }])
223
+ })
224
+ })
225
+
226
+ test.group('DataDomain.constructor()', () => {
227
+ test('creates a new DataDomain with default values', ({ assert }) => {
228
+ const dataDomain = new DataDomain()
229
+ assert.equal(dataDomain.kind, DataDomainKind)
230
+ assert.typeOf(dataDomain.key, 'string')
231
+ assert.isNotEmpty(dataDomain.key)
232
+ assert.instanceOf(dataDomain.info, Thing)
233
+ assert.deepInclude(dataDomain.info.toJSON(), { name: 'Unnamed domain' })
234
+ assert.isDefined(dataDomain.graph)
235
+ assert.deepEqual(dataDomain.dependencyList, [])
236
+ })
237
+
238
+ test('creates a new DataDomain with provided values', ({ assert }) => {
239
+ const dataDomain = new DataDomain({
240
+ key: 'test-domain',
241
+ info: { name: 'Test Domain', description: 'A test domain' },
242
+ dependencyList: [{ key: 'dep1', version: '1.0.0' }],
243
+ })
244
+ assert.equal(dataDomain.kind, DataDomainKind)
245
+ assert.equal(dataDomain.key, 'test-domain')
246
+ assert.instanceOf(dataDomain.info, Thing)
247
+ assert.deepInclude(dataDomain.info.toJSON(), { name: 'Test Domain', description: 'A test domain' })
248
+ assert.isDefined(dataDomain.graph)
249
+ assert.deepEqual(dataDomain.dependencyList, [{ key: 'dep1', version: '1.0.0' }])
250
+ })
251
+
252
+ test('creates a new DataDomain with partial info', ({ assert }) => {
253
+ const dataDomain = new DataDomain({
254
+ info: { name: 'Test Domain' },
255
+ })
256
+ assert.equal(dataDomain.kind, DataDomainKind)
257
+ assert.typeOf(dataDomain.key, 'string')
258
+ assert.isNotEmpty(dataDomain.key)
259
+ assert.instanceOf(dataDomain.info, Thing)
260
+ assert.deepInclude(dataDomain.info.toJSON(), { name: 'Test Domain' })
261
+ })
262
+
263
+ test('creates a new DataDomain with empty info', ({ assert }) => {
264
+ const dataDomain = new DataDomain({
265
+ info: {},
266
+ })
267
+ assert.equal(dataDomain.kind, DataDomainKind)
268
+ assert.typeOf(dataDomain.key, 'string')
269
+ assert.isNotEmpty(dataDomain.key)
270
+ assert.instanceOf(dataDomain.info, Thing)
271
+ assert.deepInclude(dataDomain.info.toJSON(), { name: 'Unnamed domain' })
272
+ })
273
+
274
+ test('creates a new DataDomain with dependencyList', ({ assert }) => {
275
+ const dataDomain = new DataDomain({
276
+ dependencyList: [{ key: 'dep1', version: '1.0.0' }],
277
+ })
278
+ assert.equal(dataDomain.kind, DataDomainKind)
279
+ assert.typeOf(dataDomain.key, 'string')
280
+ assert.isNotEmpty(dataDomain.key)
281
+ assert.instanceOf(dataDomain.info, Thing)
282
+ assert.deepInclude(dataDomain.info.toJSON(), { name: 'Unnamed domain' })
283
+ assert.deepEqual(dataDomain.dependencyList, [{ key: 'dep1', version: '1.0.0' }])
284
+ })
285
+
286
+ test('creates a new DataDomain with a custom key', ({ assert }) => {
287
+ const dataDomain = new DataDomain({ key: 'custom-key' })
288
+ assert.equal(dataDomain.key, 'custom-key')
289
+ })
290
+
291
+ test('creates a new DataDomain with custom info', ({ assert }) => {
292
+ const customInfo = { name: 'Custom Name', description: 'Custom Description' }
293
+ const dataDomain = new DataDomain({ info: customInfo })
294
+ assert.deepInclude(dataDomain.info.toJSON(), customInfo)
295
+ })
296
+
297
+ test('initializes the graph', ({ assert }) => {
298
+ const dataDomain = new DataDomain()
299
+ assert.isDefined(dataDomain.graph)
300
+ })
301
+
302
+ test('initializes the dependencies map', ({ assert }) => {
303
+ const dataDomain = new DataDomain()
304
+ assert.instanceOf(dataDomain.dependencies, Map)
305
+ assert.equal(dataDomain.dependencies.size, 0)
306
+ })
307
+
308
+ test('initializes the dependencyList array', ({ assert }) => {
309
+ const dataDomain = new DataDomain()
310
+ assert.isArray(dataDomain.dependencyList)
311
+ assert.equal(dataDomain.dependencyList.length, 0)
312
+ })
313
+
314
+ test('does not notify change during initialization', async ({ assert }) => {
315
+ const dataDomain = new DataDomain()
316
+ await assert.notDispatches(dataDomain, 'change', { timeout: 20 })
317
+ })
318
+
319
+ test('restores the graph from a serialized state', ({ assert }) => {
320
+ const dataDomain1 = new DataDomain()
321
+ const model = dataDomain1.addModel()
322
+ const entity = dataDomain1.addEntity(model.key)
323
+ const serialized = dataDomain1.toJSON()
324
+
325
+ const dataDomain2 = new DataDomain(serialized)
326
+ const restoredEntity = dataDomain2.findEntity(entity.key)
327
+ assert.isDefined(restoredEntity)
328
+ assert.equal(restoredEntity!.key, entity.key)
329
+ })
330
+
331
+ test('restores the graph with dependencies', ({ assert }) => {
332
+ const dataDomain1 = new DataDomain()
333
+ const model = dataDomain1.addModel()
334
+ const entity = dataDomain1.addEntity(model.key)
335
+ dataDomain1.info.version = '1.0.0'
336
+ const serialized = dataDomain1.toJSON()
337
+
338
+ const dataDomain2 = new DataDomain(serialized, [dataDomain1])
339
+ const restoredEntity = dataDomain2.findForeignEntity(entity.key, dataDomain1.key)
340
+ assert.ok(restoredEntity)
341
+ })
342
+ })
343
+
344
+ test.group('DataDomain.hasFields()', () => {
345
+ test('returns true if there are child namespaces', ({ assert }) => {
346
+ const dataDomain = new DataDomain()
347
+ dataDomain.addNamespace()
348
+ assert.isTrue(dataDomain.hasFields())
349
+ })
350
+
351
+ test('returns true if there are child models', ({ assert }) => {
352
+ const dataDomain = new DataDomain()
353
+ dataDomain.addModel()
354
+ assert.isTrue(dataDomain.hasFields())
355
+ })
356
+
357
+ test('returns true if there are both namespaces and models', ({ assert }) => {
358
+ const dataDomain = new DataDomain()
359
+ dataDomain.addNamespace()
360
+ dataDomain.addModel()
361
+ assert.isTrue(dataDomain.hasFields())
362
+ })
363
+
364
+ test('returns false if there are no child namespaces or models', ({ assert }) => {
365
+ const dataDomain = new DataDomain()
366
+ assert.isFalse(dataDomain.hasFields())
367
+ })
368
+
369
+ test('returns false if the data domain has no fields', ({ assert }) => {
370
+ const dataDomain = new DataDomain()
371
+ dataDomain.fields = []
372
+ assert.isFalse(dataDomain.hasFields())
373
+ })
374
+
375
+ test('returns true if there are only foreign namespaces or models', ({ assert }) => {
376
+ const dataDomain = new DataDomain()
377
+ const foreignDomain = new DataDomain()
378
+ foreignDomain.info.version = '1.0.0'
379
+ dataDomain.registerForeignDomain(foreignDomain)
380
+ foreignDomain.addNamespace()
381
+ assert.isFalse(dataDomain.hasFields())
382
+ })
383
+ })
384
+
385
+ test.group('DataDomain.listFields()', () => {
386
+ test('lists all child namespaces and models', ({ assert }) => {
387
+ const dataDomain = new DataDomain()
388
+ const namespace = dataDomain.addNamespace()
389
+ const model = dataDomain.addModel()
390
+ const fields = [...dataDomain.listFields()]
391
+ assert.lengthOf(fields, 2)
392
+ assert.deepInclude(fields, namespace)
393
+ assert.deepInclude(fields, model)
394
+ })
395
+
396
+ test('returns an empty array if there are no child namespaces or models', ({ assert }) => {
397
+ const dataDomain = new DataDomain()
398
+ const fields = [...dataDomain.listFields()]
399
+ assert.lengthOf(fields, 0)
400
+ })
401
+
402
+ test('returns only namespaces and models', ({ assert }) => {
403
+ const dataDomain = new DataDomain()
404
+ const namespace = dataDomain.addNamespace()
405
+ const model = dataDomain.addModel()
406
+ dataDomain.addEntity(model.key) // Add an entity to make sure it's not included
407
+ const fields = [...dataDomain.listFields()]
408
+ assert.lengthOf(fields, 2)
409
+ assert.deepInclude(fields, namespace)
410
+ assert.deepInclude(fields, model)
411
+ })
412
+
413
+ test('namespaces and models in the list are of type DomainNamespace and DomainModel', ({ assert }) => {
414
+ const dataDomain = new DataDomain()
415
+ dataDomain.addNamespace()
416
+ dataDomain.addModel()
417
+ const fields = [...dataDomain.listFields()]
418
+ assert.instanceOf(fields[0], DomainNamespace)
419
+ assert.instanceOf(fields[1], DomainModel)
420
+ })
421
+
422
+ test('lists namespaces and models in the order they were added', ({ assert }) => {
423
+ const dataDomain = new DataDomain()
424
+ const namespace = dataDomain.addNamespace()
425
+ const model = dataDomain.addModel()
426
+ const fields = [...dataDomain.listFields()]
427
+ assert.deepEqual(fields, [namespace, model])
428
+ })
429
+
430
+ test('lists namespaces and models when there are no namespaces or models', ({ assert }) => {
431
+ const dataDomain = new DataDomain()
432
+ const fields = [...dataDomain.listFields()]
433
+ assert.deepEqual(fields, [])
434
+ })
435
+
436
+ test('lists namespaces and models when there are other domain elements', ({ assert }) => {
437
+ const dataDomain = new DataDomain()
438
+ const namespace = dataDomain.addNamespace()
439
+ const model = dataDomain.addModel()
440
+ dataDomain.addEntity(model.key) // Add an entity to make sure it's not included
441
+ const fields = [...dataDomain.listFields()]
442
+ assert.deepEqual(fields, [namespace, model])
443
+ })
444
+ })