coh-content-db 1.4.1 → 2.0.0-rc.10

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 (101) hide show
  1. package/.editorconfig +24 -0
  2. package/.github/workflows/build.yml +38 -0
  3. package/.github/workflows/pull-request.yml +32 -0
  4. package/.github/workflows/release.yml +52 -0
  5. package/CHANGELOG.md +42 -0
  6. package/LICENSE +24 -674
  7. package/README.md +101 -16
  8. package/dist/coh-content-db.d.ts +988 -22
  9. package/dist/coh-content-db.js +1044 -2
  10. package/dist/coh-content-db.js.map +1 -0
  11. package/dist/coh-content-db.mjs +1009 -0
  12. package/dist/coh-content-db.mjs.map +1 -0
  13. package/eslint.config.mjs +31 -0
  14. package/jest.config.mjs +7 -0
  15. package/package.json +31 -23
  16. package/rollup.config.mjs +27 -0
  17. package/src/main/api/alignment.ts +19 -0
  18. package/src/main/api/alternate-data.ts +22 -0
  19. package/src/main/api/archetype-data.ts +5 -0
  20. package/src/main/api/badge-data.ts +81 -0
  21. package/src/main/api/badge-requirement-data.ts +64 -0
  22. package/src/main/api/badge-requirement-type.ts +32 -0
  23. package/src/main/api/badge-type.ts +19 -0
  24. package/src/main/api/bundle-data.ts +47 -0
  25. package/src/main/api/bundle-header-data.ts +37 -0
  26. package/src/main/api/contact-data.ts +48 -0
  27. package/src/main/api/enhancement-category.ts +30 -0
  28. package/src/main/api/link.ts +4 -0
  29. package/src/main/api/location-data.ts +28 -0
  30. package/src/main/api/markdown-string.ts +4 -0
  31. package/src/main/api/mission-data.ts +83 -0
  32. package/src/main/api/mission-type.ts +2 -0
  33. package/src/main/api/morality.ts +31 -0
  34. package/src/main/api/sex.ts +10 -0
  35. package/src/main/api/zone-data.ts +20 -0
  36. package/src/main/db/abstract-index.ts +37 -0
  37. package/src/main/db/alignment-list.ts +54 -0
  38. package/src/main/db/alternates.ts +67 -0
  39. package/src/main/db/archetype.ts +14 -0
  40. package/src/main/db/badge-index.ts +57 -0
  41. package/src/main/db/badge-requirement.ts +81 -0
  42. package/src/main/db/badge-search-options.ts +51 -0
  43. package/src/main/db/badge.ts +147 -0
  44. package/src/main/db/bundle-header.ts +44 -0
  45. package/src/main/db/coh-content-database.ts +138 -0
  46. package/src/main/db/contact.ts +62 -0
  47. package/src/main/db/key.ts +18 -0
  48. package/src/main/db/location.ts +30 -0
  49. package/src/main/db/mission.ts +107 -0
  50. package/src/main/db/morality-list.ts +99 -0
  51. package/src/main/db/paged.ts +7 -0
  52. package/src/main/db/zone.ts +28 -0
  53. package/src/main/index.ts +41 -0
  54. package/src/main/util.ts +118 -0
  55. package/src/test/api/alignment.test.ts +65 -0
  56. package/src/test/api/archetype-data.fixture.ts +8 -0
  57. package/src/test/api/badge-data.fixture.ts +8 -0
  58. package/src/test/api/badge-data.test.ts +15 -0
  59. package/src/test/api/badge-requirement-data.fixture.ts +7 -0
  60. package/src/test/api/badge-requirement-type.test.ts +31 -0
  61. package/src/test/api/badge-type.test.ts +35 -0
  62. package/src/test/api/bundle-data.fixture.ts +6 -0
  63. package/src/test/api/bundle-header-data.fixture.ts +6 -0
  64. package/src/test/api/contact-data.fixture.ts +7 -0
  65. package/src/test/api/enhancement-category.test.ts +35 -0
  66. package/src/test/api/mission-data.fixture.ts +12 -0
  67. package/src/test/api/sex.test.ts +63 -0
  68. package/src/test/api/zone-data.fixture.ts +8 -0
  69. package/src/test/db/abstract-index.test.ts +55 -0
  70. package/src/test/db/alignment-list.test.ts +200 -0
  71. package/src/test/db/alternates.test.ts +188 -0
  72. package/src/test/db/archetype.test.ts +38 -0
  73. package/src/test/db/badge-index.test.ts +519 -0
  74. package/src/test/db/badge-requirement.test.ts +145 -0
  75. package/src/test/db/badge.test.ts +337 -0
  76. package/src/test/db/bundle-header.test.ts +76 -0
  77. package/src/test/db/coh-content-database.test.ts +282 -0
  78. package/src/test/db/contact.test.ts +97 -0
  79. package/src/test/db/key.test.ts +22 -0
  80. package/src/test/db/location.test.ts +51 -0
  81. package/src/test/db/mission.test.ts +171 -0
  82. package/src/test/db/morality-list.test.ts +457 -0
  83. package/src/test/db/zone.test.ts +36 -0
  84. package/src/test/integration.test.ts +16 -0
  85. package/src/test/util.test.ts +165 -0
  86. package/tsconfig.json +117 -0
  87. package/dist/_changelog.d.ts +0 -3
  88. package/dist/coh-content-db.nomin.js +0 -635
  89. package/dist/content-refence-utils.d.ts +0 -4
  90. package/dist/index.d.ts +0 -8
  91. package/dist/internal/_common.d.ts +0 -4
  92. package/dist/internal/archetype.d.ts +0 -10
  93. package/dist/internal/badge.d.ts +0 -44
  94. package/dist/internal/game-map.d.ts +0 -33
  95. package/dist/internal/server-group.d.ts +0 -24
  96. package/dist/types/archetype.d.ts +0 -9
  97. package/dist/types/badge.d.ts +0 -192
  98. package/dist/types/enhancement.d.ts +0 -28
  99. package/dist/types/game-map.d.ts +0 -47
  100. package/dist/types/link.d.ts +0 -4
  101. package/dist/types/server-group.d.ts +0 -75
@@ -0,0 +1,200 @@
1
+ import { AlignmentList } from '../../main'
2
+
3
+ describe(AlignmentList.name, () => {
4
+ describe('items', () => {
5
+ test('should return the basic set', () => {
6
+ expect(new AlignmentList(['hero', 'villain']).items).toStrictEqual(['hero', 'villain'])
7
+ })
8
+
9
+ test('should collapse extended values', () => {
10
+ expect(new AlignmentList(['primal']).items).toStrictEqual(['hero', 'villain'])
11
+ })
12
+
13
+ test('should not duplicate overlaps', () => {
14
+ expect(new AlignmentList(['primal', 'all', 'hero']).items).toStrictEqual(['hero', 'villain', 'praetorian'])
15
+ })
16
+
17
+ test('should have deterministic order', () => {
18
+ expect(new AlignmentList(['hero', 'villain']).items).toStrictEqual(['hero', 'villain'])
19
+ expect(new AlignmentList(['villain', 'hero']).items).toStrictEqual(['hero', 'villain'])
20
+ expect(new AlignmentList(['primal', 'all', 'hero']).items).toStrictEqual(['hero', 'villain', 'praetorian'])
21
+ expect(new AlignmentList(['hero', 'primal', 'all']).items).toStrictEqual(['hero', 'villain', 'praetorian'])
22
+ expect(new AlignmentList(['all', 'hero', 'primal']).items).toStrictEqual(['hero', 'villain', 'praetorian'])
23
+ })
24
+
25
+ test('should treat undefined as all values', () => {
26
+ expect(new AlignmentList().items).toStrictEqual(['hero', 'villain', 'praetorian'])
27
+ })
28
+
29
+ test('should treat empty as no values', () => {
30
+ expect(new AlignmentList([]).items).toStrictEqual([])
31
+ })
32
+ })
33
+
34
+ describe('values', () => {
35
+ test('should all be true when undefined', () => {
36
+ const alignments = new AlignmentList()
37
+ expect(alignments.hero).toBeTruthy()
38
+ expect(alignments.villain).toBeTruthy()
39
+ expect(alignments.praetorian).toBeTruthy()
40
+ expect(alignments.primal).toBeTruthy()
41
+ expect(alignments.all).toBeTruthy()
42
+ })
43
+
44
+ test('should all be false when empty', () => {
45
+ const alignments = new AlignmentList([])
46
+ expect(alignments.hero).toBeFalsy()
47
+ expect(alignments.villain).toBeFalsy()
48
+ expect(alignments.praetorian).toBeFalsy()
49
+ expect(alignments.primal).toBeFalsy()
50
+ expect(alignments.all).toBeFalsy()
51
+ })
52
+ })
53
+
54
+ describe('hero', () => {
55
+ test('should detect a hero', () => {
56
+ expect(new AlignmentList(['hero', 'villain']).hero).toBeTruthy()
57
+ })
58
+
59
+ test('should detect primal', () => {
60
+ expect(new AlignmentList(['primal']).hero).toBeTruthy()
61
+ })
62
+
63
+ test('should detect all', () => {
64
+ expect(new AlignmentList(['all']).hero).toBeTruthy()
65
+ })
66
+
67
+ test('should not falsely detect a hero', () => {
68
+ expect(new AlignmentList(['villain']).hero).toBeFalsy()
69
+ })
70
+ })
71
+
72
+ describe('villain', () => {
73
+ test('should detect a villain', () => {
74
+ expect(new AlignmentList(['hero', 'villain']).villain).toBeTruthy()
75
+ })
76
+
77
+ test('should detect primal', () => {
78
+ expect(new AlignmentList(['primal']).villain).toBeTruthy()
79
+ })
80
+
81
+ test('should detect all', () => {
82
+ expect(new AlignmentList(['all']).villain).toBeTruthy()
83
+ })
84
+
85
+ test('should not falsely detect a villain', () => {
86
+ expect(new AlignmentList(['hero']).villain).toBeFalsy()
87
+ })
88
+ })
89
+
90
+ describe('praetorian', () => {
91
+ test('should detect a praetorian', () => {
92
+ expect(new AlignmentList(['hero', 'praetorian']).praetorian).toBeTruthy()
93
+ })
94
+
95
+ test('should not detect primal', () => {
96
+ expect(new AlignmentList(['primal']).praetorian).toBeFalsy()
97
+ })
98
+
99
+ test('should detect all', () => {
100
+ expect(new AlignmentList(['all']).praetorian).toBeTruthy()
101
+ })
102
+
103
+ test('should not falsely detect a praetorian', () => {
104
+ expect(new AlignmentList(['villain']).praetorian).toBeFalsy()
105
+ })
106
+ })
107
+
108
+ describe('primal', () => {
109
+ test('should detect hero and villain', () => {
110
+ expect(new AlignmentList(['hero', 'villain']).primal).toBeTruthy()
111
+ })
112
+
113
+ test('should detect primal', () => {
114
+ expect(new AlignmentList(['primal']).primal).toBeTruthy()
115
+ })
116
+
117
+ test('should detect all', () => {
118
+ expect(new AlignmentList(['all']).primal).toBeTruthy()
119
+ })
120
+
121
+ test('should not falsely detect a primal', () => {
122
+ expect(new AlignmentList(['villain']).primal).toBeFalsy()
123
+ expect(new AlignmentList(['praetorian']).primal).toBeFalsy()
124
+ })
125
+ })
126
+
127
+ describe('all', () => {
128
+ test('should detect when all are present', () => {
129
+ expect(new AlignmentList(['hero', 'villain', 'praetorian']).all).toBeTruthy()
130
+ })
131
+
132
+ test('should detect primal and praetorian', () => {
133
+ expect(new AlignmentList(['primal', 'praetorian']).all).toBeTruthy()
134
+ })
135
+
136
+ test('should detect all', () => {
137
+ expect(new AlignmentList(['all']).all).toBeTruthy()
138
+ })
139
+
140
+ test('should not falsely detect all', () => {
141
+ expect(new AlignmentList(['villain']).all).toBeFalsy()
142
+ expect(new AlignmentList(['praetorian']).all).toBeFalsy()
143
+ expect(new AlignmentList(['primal']).all).toBeFalsy()
144
+ })
145
+ })
146
+
147
+ describe('has', () => {
148
+ test('should return true if present', () => {
149
+ expect(new AlignmentList(['villain']).has('villain')).toBeTruthy()
150
+ })
151
+
152
+ test('should return false if absent', () => {
153
+ expect(new AlignmentList(['hero']).has('villain')).toBeFalsy()
154
+ expect(new AlignmentList(['hero', 'praetorian']).has('primal')).toBeFalsy()
155
+ })
156
+
157
+ test('should return false if undefined', () => {
158
+ expect(new AlignmentList(['hero']).has()).toBeFalsy()
159
+ })
160
+
161
+ test('should test hero correctly', () => {
162
+ expect(new AlignmentList(['hero']).has('hero')).toBeTruthy()
163
+ expect(new AlignmentList(['primal']).has('hero')).toBeTruthy()
164
+ expect(new AlignmentList(['all']).has('hero')).toBeTruthy()
165
+
166
+ expect(new AlignmentList(['villain']).has('hero')).toBeFalsy()
167
+ })
168
+
169
+ test('should test villain correctly', () => {
170
+ expect(new AlignmentList(['villain']).has('villain')).toBeTruthy()
171
+ expect(new AlignmentList(['primal']).has('villain')).toBeTruthy()
172
+ expect(new AlignmentList(['all']).has('villain')).toBeTruthy()
173
+
174
+ expect(new AlignmentList(['hero']).has('villain')).toBeFalsy()
175
+ })
176
+
177
+ test('should test praetorian correctly', () => {
178
+ expect(new AlignmentList(['praetorian']).has('praetorian')).toBeTruthy()
179
+ expect(new AlignmentList(['all']).has('praetorian')).toBeTruthy()
180
+
181
+ expect(new AlignmentList(['villain']).has('praetorian')).toBeFalsy()
182
+ })
183
+
184
+ test('should test primal correctly', () => {
185
+ expect(new AlignmentList(['hero', 'villain']).has('primal')).toBeTruthy()
186
+ expect(new AlignmentList(['primal']).has('primal')).toBeTruthy()
187
+ expect(new AlignmentList(['all']).has('primal')).toBeTruthy()
188
+
189
+ expect(new AlignmentList(['praetorian']).has('primal')).toBeFalsy()
190
+ })
191
+
192
+ test('should test all correctly', () => {
193
+ expect(new AlignmentList(['hero', 'villain', 'praetorian']).has('all')).toBeTruthy()
194
+ expect(new AlignmentList(['primal', 'praetorian']).has('all')).toBeTruthy()
195
+ expect(new AlignmentList(['all']).has('all')).toBeTruthy()
196
+
197
+ expect(new AlignmentList([]).has('all')).toBeFalsy()
198
+ })
199
+ })
200
+ })
@@ -0,0 +1,188 @@
1
+ import { Alternates } from '../../main'
2
+
3
+ describe(Alternates.name, () => {
4
+ describe('Constructor', () => {
5
+ test('should accept a list of alternate values', () => {
6
+ new Alternates([
7
+ { value: 'Default' },
8
+ { sex: 'M', value: 'Male' },
9
+ { alignment: 'hero', value: 'Hero' },
10
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
11
+ { alignment: 'praetorian', sex: 'F', value: 'Praetorian Female' },
12
+ ])
13
+ })
14
+
15
+ test('should accept a single value', () => {
16
+ expect(new Alternates('foo').default?.value).toBe('foo')
17
+ })
18
+ })
19
+
20
+ describe('getValue', () => {
21
+ test('should return undefined if there are no values', () => {
22
+ expect(new Alternates([]).getValue()).toBeUndefined()
23
+ })
24
+
25
+ test('should return the least-specific value when no classifiers are provided', () => {
26
+ expect(new Alternates([
27
+ { value: 'Default' },
28
+ { sex: 'M', value: 'Male' },
29
+ { alignment: 'hero', value: 'Hero' },
30
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
31
+ { alignment: 'praetorian', sex: 'F', value: 'Praetorian Female' },
32
+ ]).getValue()).toBe('Default')
33
+ })
34
+
35
+ test('should return the least-specific value when no classifiers are provided, regardless of insert order', () => {
36
+ expect(new Alternates([
37
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
38
+ { alignment: 'hero', value: 'Hero' },
39
+ { value: 'Default' },
40
+ { sex: 'M', value: 'Male' },
41
+ { alignment: 'praetorian', sex: 'F', value: 'Praetorian Female' },
42
+ ]).getValue()).toBe('Default')
43
+ })
44
+
45
+ test('should return the most specific match', () => {
46
+ expect(new Alternates([
47
+ { value: 'Default' },
48
+ { sex: 'M', value: 'Male' },
49
+ { alignment: 'hero', value: 'Hero' },
50
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
51
+ { alignment: 'praetorian', sex: 'F', value: 'Praetorian Female' },
52
+ ]).getValue('villain', 'M')).toBe('Male Villain')
53
+ })
54
+
55
+ test('should return the most specific match, regardless of insert order', () => {
56
+ expect(new Alternates([
57
+ { alignment: 'praetorian', sex: 'F', value: 'Praetorian Female' },
58
+ { sex: 'M', value: 'Male' },
59
+ { alignment: 'hero', value: 'Hero' },
60
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
61
+ { value: 'Default' },
62
+ ]).getValue('villain', 'M')).toBe('Male Villain')
63
+ })
64
+
65
+ test('should return the lowest canonical value if there is no default', () => {
66
+ expect(new Alternates([
67
+ { alignment: 'hero', value: 'Hero' },
68
+ { sex: 'M', value: 'Male' },
69
+ { alignment: 'praetorian', sex: 'F', value: 'Praetorian Female' },
70
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
71
+ ]).getValue()).toBe('Male')
72
+ })
73
+
74
+ test('should return the lowest canonical value if a specific is requested that does not exist', () => {
75
+ expect(new Alternates([
76
+ { alignment: 'hero', value: 'Hero' },
77
+ { alignment: 'villain', value: 'Villain' },
78
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
79
+ { alignment: 'praetorian', sex: 'F', value: 'Praetorian Female' },
80
+ ]).getValue(undefined, 'F')).toBe('Hero')
81
+ })
82
+ })
83
+
84
+ describe('default', () => {
85
+ test('should return undefined if there are no values', () => {
86
+ expect(new Alternates([]).default).toBeUndefined()
87
+ })
88
+
89
+ test('should return the lowest priority value', () => {
90
+ expect(new Alternates([
91
+ { value: 'Default' },
92
+ { sex: 'M', value: 'Male' },
93
+ { alignment: 'hero', value: 'Hero' },
94
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
95
+ { alignment: 'praetorian', sex: 'F', value: 'Praetorian Female' },
96
+ ]).default?.value).toBe('Default')
97
+
98
+ expect(new Alternates([
99
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
100
+ { alignment: 'praetorian', sex: 'F', value: 'Praetorian Female' },
101
+ { sex: 'M', value: 'Male' },
102
+ { value: 'Default' },
103
+ { alignment: 'hero', value: 'Hero' },
104
+ ]).default?.value).toBe('Default')
105
+
106
+ expect(new Alternates([
107
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
108
+ { alignment: 'praetorian', sex: 'F', value: 'Praetorian Female' },
109
+ { sex: 'M', value: 'Male' },
110
+ { alignment: 'hero', value: 'Hero' },
111
+ ]).default?.value).toBe('Male')
112
+ })
113
+ })
114
+
115
+ describe('canonical', () => {
116
+ test('should be empty if there are no values', () => {
117
+ expect(new Alternates([]).canonical).toHaveLength(0)
118
+ })
119
+
120
+ test('should return values sorted in canonical order', () => {
121
+ const result = new Alternates([
122
+ { alignment: 'hero', sex: 'F', value: 'Female Hero' },
123
+ { alignment: 'praetorian', value: 'Praetorian' },
124
+ { sex: 'F', value: 'Female' },
125
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
126
+ { alignment: 'praetorian', sex: 'M', value: 'Male Praetorian' },
127
+ { alignment: 'hero', value: 'Hero' },
128
+ { alignment: 'hero', sex: 'M', value: 'Male Hero' },
129
+ { sex: 'M', value: 'Male' },
130
+ { alignment: 'villain', value: 'Villain' },
131
+ { alignment: 'villain', sex: 'F', value: 'Female Villain' },
132
+ { alignment: 'praetorian', sex: 'F', value: 'Female Praetorian' },
133
+ { value: 'Default' },
134
+ ]).canonical
135
+
136
+ expect(result).toStrictEqual([
137
+ { value: 'Default' },
138
+ { sex: 'M', value: 'Male' },
139
+ { sex: 'F', value: 'Female' },
140
+ { alignment: 'hero', value: 'Hero' },
141
+ { alignment: 'villain', value: 'Villain' },
142
+ { alignment: 'praetorian', value: 'Praetorian' },
143
+ { alignment: 'hero', sex: 'M', value: 'Male Hero' },
144
+ { alignment: 'hero', sex: 'F', value: 'Female Hero' },
145
+ { alignment: 'villain', sex: 'M', value: 'Male Villain' },
146
+ { alignment: 'villain', sex: 'F', value: 'Female Villain' },
147
+ { alignment: 'praetorian', sex: 'M', value: 'Male Praetorian' },
148
+ { alignment: 'praetorian', sex: 'F', value: 'Female Praetorian' },
149
+ ])
150
+ })
151
+
152
+ test('should sort unspecified values by alpha', () => {
153
+ expect(new Alternates([
154
+ { value: 'A' },
155
+ { value: 'C' },
156
+ { value: 'B' },
157
+ ]).canonical).toStrictEqual([
158
+ { value: 'A' },
159
+ { value: 'B' },
160
+ { value: 'C' },
161
+ ])
162
+ })
163
+
164
+ test('should sort identical values by value alpha', () => {
165
+ expect(new Alternates([
166
+ { alignment: 'villain', value: 'B' },
167
+ { sex: 'M', value: 'D' },
168
+ { alignment: 'villain', value: 'A' },
169
+ { sex: 'M', value: 'C' },
170
+ ]).canonical).toStrictEqual([
171
+ { sex: 'M', value: 'C' },
172
+ { sex: 'M', value: 'D' },
173
+ { alignment: 'villain', value: 'A' },
174
+ { alignment: 'villain', value: 'B' },
175
+ ])
176
+ })
177
+ })
178
+
179
+ describe('toString', () => {
180
+ test('should create a string separated by the separator', () => {
181
+ expect(new Alternates([
182
+ { sex: 'M', value: 'A' },
183
+ { sex: 'F', value: 'B' },
184
+ { alignment: 'hero', value: 'C' },
185
+ ]).toString(', ')).toBe('A, B, C')
186
+ })
187
+ })
188
+ })
@@ -0,0 +1,38 @@
1
+ import { Archetype } from '../../main'
2
+ import { archetypeDataFixture } from '../api/archetype-data.fixture'
3
+
4
+ describe(Archetype.name, () => {
5
+ describe('Constructor', () => {
6
+ test('should accept the test fixture', () => {
7
+ new Archetype(archetypeDataFixture.create())
8
+ })
9
+ })
10
+
11
+ describe('key', () => {
12
+ test('should be set from data', () => {
13
+ const data = archetypeDataFixture.create({ key: 'foo' })
14
+ expect(new Archetype(data).key).toBe('foo')
15
+ })
16
+ })
17
+
18
+ describe('name', () => {
19
+ test('should be set from data', () => {
20
+ const data = archetypeDataFixture.create({ name: 'foo' })
21
+ expect(new Archetype(data).name).toBe('foo')
22
+ })
23
+ })
24
+
25
+ describe('description', () => {
26
+ test('should be set from data', () => {
27
+ const data = archetypeDataFixture.create({ description: 'foo' })
28
+ expect(new Archetype(data).description).toBe('foo')
29
+ })
30
+
31
+ test('should be undefined if missing in data', () => {
32
+ const data = archetypeDataFixture
33
+ .omit('description')
34
+ .create()
35
+ expect(new Archetype(data).description).toBeUndefined()
36
+ })
37
+ })
38
+ })