@webex/webex-core 2.59.2 → 2.59.3-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/.eslintrc.js +6 -6
  2. package/README.md +79 -79
  3. package/babel.config.js +3 -3
  4. package/dist/config.js +24 -24
  5. package/dist/config.js.map +1 -1
  6. package/dist/credentials-config.js +56 -56
  7. package/dist/credentials-config.js.map +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/interceptors/auth.js +28 -28
  10. package/dist/interceptors/auth.js.map +1 -1
  11. package/dist/interceptors/default-options.js +24 -24
  12. package/dist/interceptors/default-options.js.map +1 -1
  13. package/dist/interceptors/embargo.js +9 -9
  14. package/dist/interceptors/embargo.js.map +1 -1
  15. package/dist/interceptors/network-timing.js +19 -19
  16. package/dist/interceptors/network-timing.js.map +1 -1
  17. package/dist/interceptors/payload-transformer.js +19 -19
  18. package/dist/interceptors/payload-transformer.js.map +1 -1
  19. package/dist/interceptors/rate-limit.js +40 -40
  20. package/dist/interceptors/rate-limit.js.map +1 -1
  21. package/dist/interceptors/redirect.js +13 -13
  22. package/dist/interceptors/redirect.js.map +1 -1
  23. package/dist/interceptors/request-event.js +23 -23
  24. package/dist/interceptors/request-event.js.map +1 -1
  25. package/dist/interceptors/request-logger.js +13 -13
  26. package/dist/interceptors/request-logger.js.map +1 -1
  27. package/dist/interceptors/request-timing.js +23 -23
  28. package/dist/interceptors/request-timing.js.map +1 -1
  29. package/dist/interceptors/response-logger.js +19 -19
  30. package/dist/interceptors/response-logger.js.map +1 -1
  31. package/dist/interceptors/user-agent.js +29 -29
  32. package/dist/interceptors/user-agent.js.map +1 -1
  33. package/dist/interceptors/webex-tracking-id.js +15 -15
  34. package/dist/interceptors/webex-tracking-id.js.map +1 -1
  35. package/dist/interceptors/webex-user-agent.js +13 -13
  36. package/dist/interceptors/webex-user-agent.js.map +1 -1
  37. package/dist/lib/batcher.js +83 -83
  38. package/dist/lib/batcher.js.map +1 -1
  39. package/dist/lib/credentials/credentials.js +103 -103
  40. package/dist/lib/credentials/credentials.js.map +1 -1
  41. package/dist/lib/credentials/grant-errors.js +17 -17
  42. package/dist/lib/credentials/grant-errors.js.map +1 -1
  43. package/dist/lib/credentials/index.js +2 -2
  44. package/dist/lib/credentials/index.js.map +1 -1
  45. package/dist/lib/credentials/scope.js +11 -11
  46. package/dist/lib/credentials/scope.js.map +1 -1
  47. package/dist/lib/credentials/token-collection.js +2 -2
  48. package/dist/lib/credentials/token-collection.js.map +1 -1
  49. package/dist/lib/credentials/token.js +145 -145
  50. package/dist/lib/credentials/token.js.map +1 -1
  51. package/dist/lib/page.js +49 -49
  52. package/dist/lib/page.js.map +1 -1
  53. package/dist/lib/services/constants.js.map +1 -1
  54. package/dist/lib/services/index.js +2 -2
  55. package/dist/lib/services/index.js.map +1 -1
  56. package/dist/lib/services/interceptors/server-error.js +9 -9
  57. package/dist/lib/services/interceptors/server-error.js.map +1 -1
  58. package/dist/lib/services/interceptors/service.js +24 -24
  59. package/dist/lib/services/interceptors/service.js.map +1 -1
  60. package/dist/lib/services/metrics.js.map +1 -1
  61. package/dist/lib/services/service-catalog.js +104 -104
  62. package/dist/lib/services/service-catalog.js.map +1 -1
  63. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  64. package/dist/lib/services/service-host.js +134 -134
  65. package/dist/lib/services/service-host.js.map +1 -1
  66. package/dist/lib/services/service-registry.js +175 -175
  67. package/dist/lib/services/service-registry.js.map +1 -1
  68. package/dist/lib/services/service-state.js +38 -38
  69. package/dist/lib/services/service-state.js.map +1 -1
  70. package/dist/lib/services/service-url.js +31 -31
  71. package/dist/lib/services/service-url.js.map +1 -1
  72. package/dist/lib/services/services.js +245 -245
  73. package/dist/lib/services/services.js.map +1 -1
  74. package/dist/lib/stateless-webex-plugin.js +28 -28
  75. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  76. package/dist/lib/storage/decorators.js +27 -27
  77. package/dist/lib/storage/decorators.js.map +1 -1
  78. package/dist/lib/storage/errors.js +4 -4
  79. package/dist/lib/storage/errors.js.map +1 -1
  80. package/dist/lib/storage/index.js.map +1 -1
  81. package/dist/lib/storage/make-webex-plugin-store.js +44 -44
  82. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  83. package/dist/lib/storage/make-webex-store.js +40 -40
  84. package/dist/lib/storage/make-webex-store.js.map +1 -1
  85. package/dist/lib/storage/memory-store-adapter.js +9 -9
  86. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  87. package/dist/lib/webex-core-plugin-mixin.js +13 -13
  88. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  89. package/dist/lib/webex-http-error.js +9 -9
  90. package/dist/lib/webex-http-error.js.map +1 -1
  91. package/dist/lib/webex-internal-core-plugin-mixin.js +13 -13
  92. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  93. package/dist/lib/webex-plugin.js +36 -36
  94. package/dist/lib/webex-plugin.js.map +1 -1
  95. package/dist/plugins/logger.js +9 -9
  96. package/dist/plugins/logger.js.map +1 -1
  97. package/dist/webex-core.js +104 -104
  98. package/dist/webex-core.js.map +1 -1
  99. package/dist/webex-internal-core.js +12 -12
  100. package/dist/webex-internal-core.js.map +1 -1
  101. package/jest.config.js +3 -3
  102. package/package.json +20 -19
  103. package/process +1 -1
  104. package/src/config.js +90 -90
  105. package/src/credentials-config.js +212 -212
  106. package/src/index.js +62 -62
  107. package/src/interceptors/auth.js +186 -186
  108. package/src/interceptors/default-options.js +55 -55
  109. package/src/interceptors/embargo.js +43 -43
  110. package/src/interceptors/network-timing.js +54 -54
  111. package/src/interceptors/payload-transformer.js +55 -55
  112. package/src/interceptors/rate-limit.js +169 -169
  113. package/src/interceptors/redirect.js +106 -106
  114. package/src/interceptors/request-event.js +93 -93
  115. package/src/interceptors/request-logger.js +78 -78
  116. package/src/interceptors/request-timing.js +65 -65
  117. package/src/interceptors/response-logger.js +98 -98
  118. package/src/interceptors/user-agent.js +77 -77
  119. package/src/interceptors/webex-tracking-id.js +73 -73
  120. package/src/interceptors/webex-user-agent.js +79 -79
  121. package/src/lib/batcher.js +307 -307
  122. package/src/lib/credentials/credentials.js +552 -552
  123. package/src/lib/credentials/grant-errors.js +92 -92
  124. package/src/lib/credentials/index.js +16 -16
  125. package/src/lib/credentials/scope.js +34 -34
  126. package/src/lib/credentials/token-collection.js +17 -17
  127. package/src/lib/credentials/token.js +559 -559
  128. package/src/lib/page.js +159 -159
  129. package/src/lib/services/constants.js +9 -9
  130. package/src/lib/services/index.js +26 -26
  131. package/src/lib/services/interceptors/server-error.js +48 -48
  132. package/src/lib/services/interceptors/service.js +101 -101
  133. package/src/lib/services/metrics.js +4 -4
  134. package/src/lib/services/service-catalog.js +435 -435
  135. package/src/lib/services/service-fed-ramp.js +4 -4
  136. package/src/lib/services/service-host.js +267 -267
  137. package/src/lib/services/service-registry.js +465 -465
  138. package/src/lib/services/service-state.js +78 -78
  139. package/src/lib/services/service-url.js +124 -124
  140. package/src/lib/services/services.js +1018 -1018
  141. package/src/lib/stateless-webex-plugin.js +98 -98
  142. package/src/lib/storage/decorators.js +220 -220
  143. package/src/lib/storage/errors.js +15 -15
  144. package/src/lib/storage/index.js +10 -10
  145. package/src/lib/storage/make-webex-plugin-store.js +211 -211
  146. package/src/lib/storage/make-webex-store.js +140 -140
  147. package/src/lib/storage/memory-store-adapter.js +79 -79
  148. package/src/lib/webex-core-plugin-mixin.js +114 -114
  149. package/src/lib/webex-http-error.js +61 -61
  150. package/src/lib/webex-internal-core-plugin-mixin.js +107 -107
  151. package/src/lib/webex-plugin.js +222 -222
  152. package/src/plugins/logger.js +60 -60
  153. package/src/webex-core.js +745 -745
  154. package/src/webex-internal-core.js +46 -46
  155. package/test/integration/spec/credentials/credentials.js +139 -139
  156. package/test/integration/spec/credentials/token.js +102 -102
  157. package/test/integration/spec/services/service-catalog.js +838 -838
  158. package/test/integration/spec/services/services.js +1221 -1221
  159. package/test/integration/spec/webex-core.js +178 -178
  160. package/test/unit/spec/_setup.js +44 -44
  161. package/test/unit/spec/credentials/credentials.js +1017 -1017
  162. package/test/unit/spec/credentials/token.js +441 -441
  163. package/test/unit/spec/interceptors/auth.js +521 -521
  164. package/test/unit/spec/interceptors/default-options.js +84 -84
  165. package/test/unit/spec/interceptors/embargo.js +144 -144
  166. package/test/unit/spec/interceptors/network-timing.js +49 -49
  167. package/test/unit/spec/interceptors/payload-transformer.js +155 -155
  168. package/test/unit/spec/interceptors/rate-limit.js +302 -302
  169. package/test/unit/spec/interceptors/redirect.js +102 -102
  170. package/test/unit/spec/interceptors/request-timing.js +92 -92
  171. package/test/unit/spec/interceptors/user-agent.js +76 -76
  172. package/test/unit/spec/interceptors/webex-tracking-id.js +76 -76
  173. package/test/unit/spec/interceptors/webex-user-agent.js +159 -159
  174. package/test/unit/spec/lib/batcher.js +330 -330
  175. package/test/unit/spec/lib/page.js +148 -148
  176. package/test/unit/spec/lib/webex-plugin.js +48 -48
  177. package/test/unit/spec/services/interceptors/server-error.js +204 -204
  178. package/test/unit/spec/services/interceptors/service.js +188 -188
  179. package/test/unit/spec/services/service-catalog.js +194 -194
  180. package/test/unit/spec/services/service-host.js +260 -260
  181. package/test/unit/spec/services/service-registry.js +747 -747
  182. package/test/unit/spec/services/service-state.js +60 -60
  183. package/test/unit/spec/services/service-url.js +258 -258
  184. package/test/unit/spec/services/services.js +348 -348
  185. package/test/unit/spec/storage/persist.js +50 -50
  186. package/test/unit/spec/storage/storage-adapter.js +12 -12
  187. package/test/unit/spec/storage/wait-for-value.js +81 -81
  188. package/test/unit/spec/webex-core.js +253 -253
  189. package/test/unit/spec/webex-internal-core.js +91 -91
@@ -1,260 +1,260 @@
1
- import {assert} from '@webex/test-helper-chai';
2
- import sinon from 'sinon';
3
- import {ServiceHost} from '@webex/webex-core';
4
-
5
- describe('webex-core', () => {
6
- describe('ServiceHost', () => {
7
- let defaultHostGroup;
8
- let fixture;
9
- let serviceHost;
10
-
11
- beforeAll(() => {
12
- fixture = {
13
- catalog: 'discovery',
14
- defaultUri: 'https://example-default.com/',
15
- hostGroup: 'example-host-group.com',
16
- id: 'example-head:example-group:example-cluster:example-name',
17
- priority: 1,
18
- uri: 'example-uri.com',
19
- };
20
-
21
- defaultHostGroup = 'example-default.com';
22
- });
23
-
24
- describe('#constructor()', () => {
25
- it('should attempt to validate services', () => {
26
- sinon.spy(ServiceHost, 'validate');
27
-
28
- serviceHost = new ServiceHost(fixture);
29
-
30
- assert.called(ServiceHost.validate);
31
- });
32
- });
33
-
34
- describe('class members', () => {
35
- beforeEach(() => {
36
- serviceHost = new ServiceHost(fixture);
37
- });
38
-
39
- describe('#active', () => {
40
- it('should return false when the host has failed', () => {
41
- serviceHost.failed = true;
42
- assert.isFalse(serviceHost.active);
43
- });
44
-
45
- it('should return false when the host has been replaced', () => {
46
- serviceHost.replaced = true;
47
- assert.isFalse(serviceHost.active);
48
- });
49
-
50
- it('should return true when the host is active', () => {
51
- serviceHost.replaced = false;
52
- serviceHost.replaced = false;
53
- assert.isTrue(serviceHost.active);
54
- });
55
- });
56
-
57
- describe('#catalog', () => {
58
- it('should match the parameter value', () => {
59
- assert.equal(serviceHost.catalog, fixture.catalog);
60
- });
61
- });
62
-
63
- describe('#defaultUri', () => {
64
- it('should match the parameter value', () => {
65
- assert.equal(serviceHost.default, fixture.defaultUri);
66
- });
67
- });
68
-
69
- describe('#failed', () => {
70
- it('should automatically set the value to false', () => {
71
- assert.isFalse(serviceHost.failed);
72
- });
73
- });
74
-
75
- describe('#hostGroup', () => {
76
- it('should match the parameter value', () => {
77
- assert.equal(serviceHost.hostGroup, fixture.hostGroup);
78
- });
79
- });
80
-
81
- describe('#id', () => {
82
- it('should match the parameter value', () => {
83
- assert.equal(serviceHost.id, fixture.id);
84
- });
85
- });
86
-
87
- describe('#local', () => {
88
- it('should return true when the uri includes the host group', () => {
89
- serviceHost.hostGroup = defaultHostGroup;
90
- assert.isTrue(serviceHost.local);
91
- });
92
-
93
- it('should return true when the uri excludes the host group', () => {
94
- serviceHost.hostGroup = fixture.hostGroup;
95
- assert.isFalse(serviceHost.local);
96
- });
97
- });
98
-
99
- describe('#priority', () => {
100
- it('should match the parameter value', () => {
101
- assert.equal(serviceHost.priority, fixture.priority);
102
- });
103
- });
104
-
105
- describe('#replaced', () => {
106
- it('should automatically set the value to false', () => {
107
- assert.isFalse(serviceHost.replaced);
108
- });
109
- });
110
-
111
- describe('#service', () => {
112
- it('should return the service', () => {
113
- assert.equal(serviceHost.service, fixture.id.split(':')[3]);
114
- });
115
- });
116
-
117
- describe('#uri', () => {
118
- it('should match the parameter value', () => {
119
- assert.equal(serviceHost.uri, fixture.uri);
120
- });
121
- });
122
-
123
- describe('#url', () => {
124
- it('should return a host-mapped url', () => {
125
- assert.isTrue(serviceHost.url.includes(serviceHost.uri));
126
- });
127
- });
128
- });
129
-
130
- describe('#setStatus()', () => {
131
- it('should set the property failed to true', () => {
132
- assert.isTrue(serviceHost.setStatus({failed: true}).failed);
133
- });
134
-
135
- it('should set the property failed to false', () => {
136
- assert.isFalse(serviceHost.setStatus({failed: false}).failed);
137
- });
138
-
139
- it('should set the property replaced to true', () => {
140
- assert.isTrue(serviceHost.setStatus({replaced: true}).replaced);
141
- });
142
-
143
- it('should set the property replaced to false', () => {
144
- assert.isFalse(serviceHost.setStatus({replaced: false}).replaced);
145
- });
146
-
147
- it('should set the property replaced and failed to true', () => {
148
- assert.isTrue(
149
- serviceHost.setStatus({
150
- failed: true,
151
- replaced: true,
152
- }).failed
153
- );
154
-
155
- assert.isTrue(
156
- serviceHost.setStatus({
157
- failed: true,
158
- replaced: true,
159
- }).replaced
160
- );
161
- });
162
-
163
- it('should set the property replaced and failed to false', () => {
164
- assert.isFalse(
165
- serviceHost.setStatus({
166
- failed: false,
167
- replaced: false,
168
- }).failed
169
- );
170
-
171
- assert.isFalse(
172
- serviceHost.setStatus({
173
- failed: false,
174
- replaced: false,
175
- }).replaced
176
- );
177
- });
178
-
179
- describe('static methods', () => {
180
- describe('#polyGenerate()', () => {
181
- let polyFixture;
182
-
183
- beforeEach(() => {
184
- polyFixture = {
185
- catalog: fixture.catalog,
186
- name: fixture.id.split(':')[3],
187
- url: fixture.defaultUri,
188
- };
189
- });
190
-
191
- it('should generate a new ServiceHost', () => {
192
- assert.instanceOf(ServiceHost.polyGenerate(polyFixture), ServiceHost);
193
- });
194
- });
195
-
196
- describe('#validate()', () => {
197
- it('should throw an error when catalog is missing', () => {
198
- delete fixture.catalog;
199
- assert.throws(() => ServiceHost.validate(fixture));
200
- });
201
-
202
- it('should throw an error when defaultUri is missing', () => {
203
- delete fixture.defaultUri;
204
- assert.throws(() => ServiceHost.validate(fixture));
205
- });
206
-
207
- it('should throw an error when hostGroup is missing', () => {
208
- delete fixture.hostGroup;
209
- assert.throws(() => ServiceHost.validate(fixture));
210
- });
211
-
212
- it('should throw an error when id is missing', () => {
213
- delete fixture.id;
214
- assert.throws(() => ServiceHost.validate(fixture));
215
- });
216
-
217
- it('should throw an error when priority is missing', () => {
218
- delete fixture.priority;
219
- assert.throws(() => ServiceHost.validate(fixture));
220
- });
221
-
222
- it('should throw an error when uri is missing', () => {
223
- delete fixture.uri;
224
- assert.throws(() => ServiceHost.validate(fixture));
225
- });
226
-
227
- it('should throw an error when catalog is invalid', () => {
228
- fixture.catalog = 1234;
229
- assert.throws(() => ServiceHost.validate(fixture));
230
- });
231
-
232
- it('should throw an error when defaultUri is invalid', () => {
233
- fixture.defaultUri = 1234;
234
- assert.throws(() => ServiceHost.validate(fixture));
235
- });
236
-
237
- it('should throw an error when hostGroup is invalid', () => {
238
- fixture.hostGroup = 1234;
239
- assert.throws(() => ServiceHost.validate(fixture));
240
- });
241
-
242
- it('should throw an error when id is invalid', () => {
243
- fixture.id = 1234;
244
- assert.throws(() => ServiceHost.validate(fixture));
245
- });
246
-
247
- it('should throw an error when priority is invalid', () => {
248
- fixture.priority = 'test-string';
249
- assert.throws(() => ServiceHost.validate(fixture));
250
- });
251
-
252
- it('should throw an error when uri is invalid', () => {
253
- fixture.uri = 1234;
254
- assert.throws(() => ServiceHost.validate(fixture));
255
- });
256
- });
257
- });
258
- });
259
- });
260
- });
1
+ import {assert} from '@webex/test-helper-chai';
2
+ import sinon from 'sinon';
3
+ import {ServiceHost} from '@webex/webex-core';
4
+
5
+ describe('webex-core', () => {
6
+ describe('ServiceHost', () => {
7
+ let defaultHostGroup;
8
+ let fixture;
9
+ let serviceHost;
10
+
11
+ beforeAll(() => {
12
+ fixture = {
13
+ catalog: 'discovery',
14
+ defaultUri: 'https://example-default.com/',
15
+ hostGroup: 'example-host-group.com',
16
+ id: 'example-head:example-group:example-cluster:example-name',
17
+ priority: 1,
18
+ uri: 'example-uri.com',
19
+ };
20
+
21
+ defaultHostGroup = 'example-default.com';
22
+ });
23
+
24
+ describe('#constructor()', () => {
25
+ it('should attempt to validate services', () => {
26
+ sinon.spy(ServiceHost, 'validate');
27
+
28
+ serviceHost = new ServiceHost(fixture);
29
+
30
+ assert.called(ServiceHost.validate);
31
+ });
32
+ });
33
+
34
+ describe('class members', () => {
35
+ beforeEach(() => {
36
+ serviceHost = new ServiceHost(fixture);
37
+ });
38
+
39
+ describe('#active', () => {
40
+ it('should return false when the host has failed', () => {
41
+ serviceHost.failed = true;
42
+ assert.isFalse(serviceHost.active);
43
+ });
44
+
45
+ it('should return false when the host has been replaced', () => {
46
+ serviceHost.replaced = true;
47
+ assert.isFalse(serviceHost.active);
48
+ });
49
+
50
+ it('should return true when the host is active', () => {
51
+ serviceHost.replaced = false;
52
+ serviceHost.replaced = false;
53
+ assert.isTrue(serviceHost.active);
54
+ });
55
+ });
56
+
57
+ describe('#catalog', () => {
58
+ it('should match the parameter value', () => {
59
+ assert.equal(serviceHost.catalog, fixture.catalog);
60
+ });
61
+ });
62
+
63
+ describe('#defaultUri', () => {
64
+ it('should match the parameter value', () => {
65
+ assert.equal(serviceHost.default, fixture.defaultUri);
66
+ });
67
+ });
68
+
69
+ describe('#failed', () => {
70
+ it('should automatically set the value to false', () => {
71
+ assert.isFalse(serviceHost.failed);
72
+ });
73
+ });
74
+
75
+ describe('#hostGroup', () => {
76
+ it('should match the parameter value', () => {
77
+ assert.equal(serviceHost.hostGroup, fixture.hostGroup);
78
+ });
79
+ });
80
+
81
+ describe('#id', () => {
82
+ it('should match the parameter value', () => {
83
+ assert.equal(serviceHost.id, fixture.id);
84
+ });
85
+ });
86
+
87
+ describe('#local', () => {
88
+ it('should return true when the uri includes the host group', () => {
89
+ serviceHost.hostGroup = defaultHostGroup;
90
+ assert.isTrue(serviceHost.local);
91
+ });
92
+
93
+ it('should return true when the uri excludes the host group', () => {
94
+ serviceHost.hostGroup = fixture.hostGroup;
95
+ assert.isFalse(serviceHost.local);
96
+ });
97
+ });
98
+
99
+ describe('#priority', () => {
100
+ it('should match the parameter value', () => {
101
+ assert.equal(serviceHost.priority, fixture.priority);
102
+ });
103
+ });
104
+
105
+ describe('#replaced', () => {
106
+ it('should automatically set the value to false', () => {
107
+ assert.isFalse(serviceHost.replaced);
108
+ });
109
+ });
110
+
111
+ describe('#service', () => {
112
+ it('should return the service', () => {
113
+ assert.equal(serviceHost.service, fixture.id.split(':')[3]);
114
+ });
115
+ });
116
+
117
+ describe('#uri', () => {
118
+ it('should match the parameter value', () => {
119
+ assert.equal(serviceHost.uri, fixture.uri);
120
+ });
121
+ });
122
+
123
+ describe('#url', () => {
124
+ it('should return a host-mapped url', () => {
125
+ assert.isTrue(serviceHost.url.includes(serviceHost.uri));
126
+ });
127
+ });
128
+ });
129
+
130
+ describe('#setStatus()', () => {
131
+ it('should set the property failed to true', () => {
132
+ assert.isTrue(serviceHost.setStatus({failed: true}).failed);
133
+ });
134
+
135
+ it('should set the property failed to false', () => {
136
+ assert.isFalse(serviceHost.setStatus({failed: false}).failed);
137
+ });
138
+
139
+ it('should set the property replaced to true', () => {
140
+ assert.isTrue(serviceHost.setStatus({replaced: true}).replaced);
141
+ });
142
+
143
+ it('should set the property replaced to false', () => {
144
+ assert.isFalse(serviceHost.setStatus({replaced: false}).replaced);
145
+ });
146
+
147
+ it('should set the property replaced and failed to true', () => {
148
+ assert.isTrue(
149
+ serviceHost.setStatus({
150
+ failed: true,
151
+ replaced: true,
152
+ }).failed
153
+ );
154
+
155
+ assert.isTrue(
156
+ serviceHost.setStatus({
157
+ failed: true,
158
+ replaced: true,
159
+ }).replaced
160
+ );
161
+ });
162
+
163
+ it('should set the property replaced and failed to false', () => {
164
+ assert.isFalse(
165
+ serviceHost.setStatus({
166
+ failed: false,
167
+ replaced: false,
168
+ }).failed
169
+ );
170
+
171
+ assert.isFalse(
172
+ serviceHost.setStatus({
173
+ failed: false,
174
+ replaced: false,
175
+ }).replaced
176
+ );
177
+ });
178
+
179
+ describe('static methods', () => {
180
+ describe('#polyGenerate()', () => {
181
+ let polyFixture;
182
+
183
+ beforeEach(() => {
184
+ polyFixture = {
185
+ catalog: fixture.catalog,
186
+ name: fixture.id.split(':')[3],
187
+ url: fixture.defaultUri,
188
+ };
189
+ });
190
+
191
+ it('should generate a new ServiceHost', () => {
192
+ assert.instanceOf(ServiceHost.polyGenerate(polyFixture), ServiceHost);
193
+ });
194
+ });
195
+
196
+ describe('#validate()', () => {
197
+ it('should throw an error when catalog is missing', () => {
198
+ delete fixture.catalog;
199
+ assert.throws(() => ServiceHost.validate(fixture));
200
+ });
201
+
202
+ it('should throw an error when defaultUri is missing', () => {
203
+ delete fixture.defaultUri;
204
+ assert.throws(() => ServiceHost.validate(fixture));
205
+ });
206
+
207
+ it('should throw an error when hostGroup is missing', () => {
208
+ delete fixture.hostGroup;
209
+ assert.throws(() => ServiceHost.validate(fixture));
210
+ });
211
+
212
+ it('should throw an error when id is missing', () => {
213
+ delete fixture.id;
214
+ assert.throws(() => ServiceHost.validate(fixture));
215
+ });
216
+
217
+ it('should throw an error when priority is missing', () => {
218
+ delete fixture.priority;
219
+ assert.throws(() => ServiceHost.validate(fixture));
220
+ });
221
+
222
+ it('should throw an error when uri is missing', () => {
223
+ delete fixture.uri;
224
+ assert.throws(() => ServiceHost.validate(fixture));
225
+ });
226
+
227
+ it('should throw an error when catalog is invalid', () => {
228
+ fixture.catalog = 1234;
229
+ assert.throws(() => ServiceHost.validate(fixture));
230
+ });
231
+
232
+ it('should throw an error when defaultUri is invalid', () => {
233
+ fixture.defaultUri = 1234;
234
+ assert.throws(() => ServiceHost.validate(fixture));
235
+ });
236
+
237
+ it('should throw an error when hostGroup is invalid', () => {
238
+ fixture.hostGroup = 1234;
239
+ assert.throws(() => ServiceHost.validate(fixture));
240
+ });
241
+
242
+ it('should throw an error when id is invalid', () => {
243
+ fixture.id = 1234;
244
+ assert.throws(() => ServiceHost.validate(fixture));
245
+ });
246
+
247
+ it('should throw an error when priority is invalid', () => {
248
+ fixture.priority = 'test-string';
249
+ assert.throws(() => ServiceHost.validate(fixture));
250
+ });
251
+
252
+ it('should throw an error when uri is invalid', () => {
253
+ fixture.uri = 1234;
254
+ assert.throws(() => ServiceHost.validate(fixture));
255
+ });
256
+ });
257
+ });
258
+ });
259
+ });
260
+ });