@oneuptime/common 9.2.18 → 9.2.21

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 (100) hide show
  1. package/Server/Services/AIService.ts +1 -1
  2. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +78 -1
  3. package/Server/Utils/Workspace/Slack/Slack.ts +80 -1
  4. package/Tests/Server/API/BaseAPI.test.ts +9 -4
  5. package/Tests/Server/Middleware/ProjectAuthorization.test.ts +133 -162
  6. package/Tests/Server/Services/ProbeService.test.ts +91 -784
  7. package/Tests/Server/Services/ScheduledMaintenanceService.test.ts +131 -112
  8. package/Tests/Server/Services/TeamMemberService.test.ts +87 -1343
  9. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +18 -9
  10. package/Tests/Server/Utils/Cookie.test.ts +10 -2
  11. package/Tests/Types/HashedString.test.ts +52 -8
  12. package/Tests/UI/Components/404.test.tsx +10 -15
  13. package/Tests/UI/Components/Breadcrumbs.test.tsx +6 -2
  14. package/Tests/UI/Components/Button.test.tsx +12 -12
  15. package/Tests/UI/Components/Card.test.tsx +4 -2
  16. package/Tests/UI/Components/ConfirmModal.test.tsx +1 -1
  17. package/Tests/UI/Components/Dropdown.test.tsx +37 -4
  18. package/Tests/UI/Components/DuplicateModel.test.tsx +49 -45
  19. package/Tests/UI/Components/FilePicker.test.tsx +258 -178
  20. package/Tests/UI/Components/List.test.tsx +3 -1
  21. package/Tests/UI/Components/MarkdownEditor.test.tsx +6 -5
  22. package/Tests/UI/Components/MasterPage.test.tsx +1 -1
  23. package/Tests/UI/Components/Modal.test.tsx +5 -5
  24. package/Tests/UI/Components/NavBar.test.tsx +14 -1
  25. package/Tests/UI/Components/OrderedStatesList.test.tsx +1 -1
  26. package/Tests/UI/Components/Pagination.test.tsx +6 -2
  27. package/Tests/Utils/API.test.ts +133 -11
  28. package/Tests/__mocks__/azure.js +2 -0
  29. package/Tests/__mocks__/botbuilder-stdlib.js +2 -0
  30. package/Tests/__mocks__/botbuilder.js +10 -0
  31. package/Tests/__mocks__/locter.js +5 -0
  32. package/Tests/__mocks__/otpauth.js +30 -0
  33. package/Tests/__mocks__/simplewebauthn.js +34 -0
  34. package/Tests/__mocks__/styleMock.js +1 -0
  35. package/Tests/__mocks__/uuid.js +31 -0
  36. package/Tests/__mocks__/yaml.js +11 -0
  37. package/Tests/jest.setup.ts +14 -0
  38. package/UI/Components/AI/AITemplates.ts +226 -0
  39. package/UI/Components/AI/GenerateFromAIModal.tsx +21 -270
  40. package/build/dist/Server/Services/AIService.js +1 -1
  41. package/build/dist/Server/Services/AIService.js.map +1 -1
  42. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +59 -2
  43. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  44. package/build/dist/Server/Utils/Workspace/Slack/Slack.js +61 -1
  45. package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
  46. package/build/dist/Tests/Server/API/BaseAPI.test.js +7 -2
  47. package/build/dist/Tests/Server/API/BaseAPI.test.js.map +1 -1
  48. package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js +89 -101
  49. package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js.map +1 -1
  50. package/build/dist/Tests/Server/Services/ProbeService.test.js +95 -687
  51. package/build/dist/Tests/Server/Services/ProbeService.test.js.map +1 -1
  52. package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js +108 -89
  53. package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js.map +1 -1
  54. package/build/dist/Tests/Server/Services/TeamMemberService.test.js +85 -924
  55. package/build/dist/Tests/Server/Services/TeamMemberService.test.js.map +1 -1
  56. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +14 -9
  57. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +1 -1
  58. package/build/dist/Tests/Server/Utils/Cookie.test.js +10 -4
  59. package/build/dist/Tests/Server/Utils/Cookie.test.js.map +1 -1
  60. package/build/dist/Tests/Types/HashedString.test.js +39 -6
  61. package/build/dist/Tests/Types/HashedString.test.js.map +1 -1
  62. package/build/dist/Tests/UI/Components/404.test.js +10 -10
  63. package/build/dist/Tests/UI/Components/404.test.js.map +1 -1
  64. package/build/dist/Tests/UI/Components/Breadcrumbs.test.js +6 -2
  65. package/build/dist/Tests/UI/Components/Breadcrumbs.test.js.map +1 -1
  66. package/build/dist/Tests/UI/Components/Button.test.js +12 -12
  67. package/build/dist/Tests/UI/Components/Card.test.js +4 -2
  68. package/build/dist/Tests/UI/Components/Card.test.js.map +1 -1
  69. package/build/dist/Tests/UI/Components/ConfirmModal.test.js +1 -1
  70. package/build/dist/Tests/UI/Components/ConfirmModal.test.js.map +1 -1
  71. package/build/dist/Tests/UI/Components/Dropdown.test.js +19 -3
  72. package/build/dist/Tests/UI/Components/Dropdown.test.js.map +1 -1
  73. package/build/dist/Tests/UI/Components/DuplicateModel.test.js +46 -41
  74. package/build/dist/Tests/UI/Components/DuplicateModel.test.js.map +1 -1
  75. package/build/dist/Tests/UI/Components/FilePicker.test.js +210 -117
  76. package/build/dist/Tests/UI/Components/FilePicker.test.js.map +1 -1
  77. package/build/dist/Tests/UI/Components/List.test.js +3 -1
  78. package/build/dist/Tests/UI/Components/List.test.js.map +1 -1
  79. package/build/dist/Tests/UI/Components/MarkdownEditor.test.js +6 -5
  80. package/build/dist/Tests/UI/Components/MarkdownEditor.test.js.map +1 -1
  81. package/build/dist/Tests/UI/Components/MasterPage.test.js +1 -1
  82. package/build/dist/Tests/UI/Components/MasterPage.test.js.map +1 -1
  83. package/build/dist/Tests/UI/Components/Modal.test.js +5 -5
  84. package/build/dist/Tests/UI/Components/Modal.test.js.map +1 -1
  85. package/build/dist/Tests/UI/Components/NavBar.test.js +13 -1
  86. package/build/dist/Tests/UI/Components/NavBar.test.js.map +1 -1
  87. package/build/dist/Tests/UI/Components/OrderedStatesList.test.js +1 -1
  88. package/build/dist/Tests/UI/Components/OrderedStatesList.test.js.map +1 -1
  89. package/build/dist/Tests/UI/Components/Pagination.test.js +6 -2
  90. package/build/dist/Tests/UI/Components/Pagination.test.js.map +1 -1
  91. package/build/dist/Tests/Utils/API.test.js +100 -9
  92. package/build/dist/Tests/Utils/API.test.js.map +1 -1
  93. package/build/dist/Tests/jest.setup.js +13 -0
  94. package/build/dist/Tests/jest.setup.js.map +1 -0
  95. package/build/dist/UI/Components/AI/AITemplates.js +218 -0
  96. package/build/dist/UI/Components/AI/AITemplates.js.map +1 -0
  97. package/build/dist/UI/Components/AI/GenerateFromAIModal.js +5 -238
  98. package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
  99. package/jest.config.json +18 -1
  100. package/package.json +1 -1
@@ -1,838 +1,145 @@
1
- import "../TestingUtils/Init";
2
- import UserTestService from "../TestingUtils/Services/UserServiceHelper";
1
+ import Probe from "../../../Models/DatabaseModels/Probe";
3
2
  import ObjectID from "../../../Types/ObjectID";
4
- import PositiveNumber from "../../../Types/PositiveNumber";
5
3
  import Version from "../../../Types/Version";
6
4
  import Faker from "../../../Utils/Faker";
7
- import Probe from "../../../Models/DatabaseModels/Probe";
8
- import User from "../../../Models/DatabaseModels/User";
9
- import { fail } from "assert";
10
- import { describe, expect, beforeEach, afterEach, test } from "@jest/globals";
11
- import { TestDatabaseMock } from "../TestingUtils/__mocks__/TestDatabase.mock";
12
- import UserService from "../../../Server/Services/UserService";
13
- import ProbeService from "../../../Server/Services/ProbeService";
14
-
15
- describe("ProbeService", () => {
16
- beforeEach(async () => {
17
- // mock PostgresDatabase
18
- await TestDatabaseMock.connectDbMock();
19
- });
20
-
21
- afterEach(async () => {
22
- await TestDatabaseMock.disconnectDbMock();
23
- jest.resetAllMocks();
24
- });
25
-
26
- test("create a new probe", async () => {
27
- const name: string = Faker.generateName();
28
- const probeVersion: Version = new Version("1.0.1");
29
- const key: ObjectID = ObjectID.generate();
30
-
31
- const probe: Probe = new Probe();
32
- probe.name = name;
33
- probe.probeVersion = probeVersion;
34
- probe.key = key.toString();
35
- probe.description = "test description";
36
-
37
- const savedProbe: Probe = await ProbeService.create({
38
- data: probe,
39
- props: {
40
- isRoot: true,
41
- },
42
- });
43
-
44
- expect(savedProbe.name).toEqual(name);
45
- expect(savedProbe.probeVersion?.toString()).toEqual(
46
- probeVersion?.toString(),
47
- );
48
- expect(savedProbe.createdAt).toBeTruthy();
49
- expect(savedProbe.version).toBeTruthy();
50
- expect(savedProbe._id).toBeTruthy();
51
- expect(savedProbe.key?.toString()).toEqual(key?.toString());
52
- });
53
-
54
- test("findOneBy probe by name", async () => {
55
- const name: string = Faker.generateName();
56
- const probeVersion: Version = new Version("1.0.1");
57
- const key: ObjectID = ObjectID.generate();
58
- const probe: Probe = new Probe();
59
- probe.name = name;
60
- probe.probeVersion = probeVersion;
61
- probe.key = key.toString();
62
- probe.description = "test description";
63
-
64
- const savedProbe: Probe = await ProbeService.create({
65
- data: probe,
66
- props: {
67
- isRoot: true,
68
- },
69
- });
70
-
71
- if (!savedProbe.name) {
72
- fail("savedprobe name is null");
73
- }
74
-
75
- const fetchedProbe: Probe | null = await ProbeService.findOneBy({
76
- query: {
77
- name: savedProbe.name,
78
- },
79
- select: {
80
- _id: true,
81
- name: true,
82
- version: true,
83
- probeVersion: true,
84
- createdAt: true,
85
- key: true,
86
- },
87
- props: { isRoot: true },
88
- });
89
-
90
- if (!fetchedProbe) {
91
- // fail the test.
92
- fail("Probe not found in the database");
93
- }
94
-
95
- expect(fetchedProbe.name).toEqual(name);
96
- expect(fetchedProbe._id).toEqual(savedProbe._id);
97
- expect(fetchedProbe.probeVersion?.toString()).toEqual(
98
- probeVersion?.toString(),
99
- );
100
- expect(fetchedProbe.createdAt).toBeTruthy();
101
- expect(fetchedProbe.version).toBeTruthy();
102
- expect(fetchedProbe._id).toBeTruthy();
103
- expect(fetchedProbe.key?.toString()).toEqual(key?.toString());
104
- });
105
-
106
- test("findOneBy by probeVersion", async () => {
107
- const name: string = Faker.generateName();
108
- const probeVersion: Version = new Version("1.0.2");
109
- const key: ObjectID = ObjectID.generate();
110
- const probe: Probe = new Probe();
111
- probe.name = name;
112
- probe.probeVersion = probeVersion;
113
- probe.key = key.toString();
114
- probe.description = "test description";
115
-
116
- const savedProbe: Probe = await ProbeService.create({
117
- data: probe,
118
- props: {
119
- isRoot: true,
120
- },
121
- });
122
-
123
- const fetchedProbe: Probe | null = await ProbeService.findOneBy({
124
- query: {
125
- probeVersion: new Version("1.0.2"),
126
- },
127
- select: {
128
- _id: true,
129
- name: true,
130
- version: true,
131
- probeVersion: true,
132
- createdAt: true,
133
- key: true,
134
- },
135
- props: { isRoot: true },
136
- });
137
-
138
- if (!fetchedProbe) {
139
- // fail the test.
140
- fail("Probe not found in the database");
141
- }
142
-
143
- expect(fetchedProbe._id).toEqual(savedProbe._id);
144
- expect(fetchedProbe.name).toEqual(name);
145
- expect(fetchedProbe.probeVersion?.toString()).toEqual(
146
- probeVersion?.toString(),
147
- );
148
- expect(fetchedProbe.createdAt).toBeTruthy();
149
- expect(fetchedProbe.version).toBeTruthy();
150
- expect(fetchedProbe._id).toBeTruthy();
151
- expect(fetchedProbe.key?.toString()).toEqual(key?.toString());
152
- });
153
-
154
- test("findOneBy by invalid name", async () => {
155
- const name: string = Faker.generateName();
156
- const probeVersion: Version = new Version("1.0.2");
157
- const key: ObjectID = ObjectID.generate();
158
- const probe: Probe = new Probe();
159
- probe.name = name;
160
- probe.probeVersion = probeVersion;
161
- probe.key = key.toString();
162
- probe.description = "test description";
5
+ import { describe, expect, test, beforeEach } from "@jest/globals";
163
6
 
164
- await ProbeService.create({
165
- data: probe,
166
- props: {
167
- isRoot: true,
168
- },
169
- });
170
-
171
- const fetchedProbe: Probe | null = await ProbeService.findOneBy({
172
- query: {
173
- name: name + "-invalid",
174
- },
175
- select: {
176
- _id: true,
177
- name: true,
178
- version: true,
179
- probeVersion: true,
180
- createdAt: true,
181
- key: true,
182
- },
183
- props: { isRoot: true },
184
- });
185
-
186
- expect(fetchedProbe).toBeNull();
187
- });
188
-
189
- test("select columns should work", async () => {
190
- const name: string = Faker.generateName();
191
- const probeVersion: Version = new Version("1.0.2");
192
- const key: ObjectID = ObjectID.generate();
193
- const probe: Probe = new Probe();
194
- probe.name = name;
195
- probe.probeVersion = probeVersion;
196
- probe.key = key.toString();
197
- probe.description = "test description";
198
-
199
- await ProbeService.create({
200
- data: probe,
201
- props: {
202
- isRoot: true,
203
- },
204
- });
205
-
206
- const fetchedProbe: Probe | null = await ProbeService.findOneBy({
207
- query: {
208
- name: name,
209
- },
210
- select: {
211
- _id: true,
212
- name: true,
213
- createdAt: true,
214
- },
215
- props: { isRoot: true },
216
- });
217
-
218
- expect(fetchedProbe).toBeTruthy();
219
- expect(fetchedProbe!.name).toBe(name);
220
- expect(fetchedProbe?._id).toBeTruthy();
221
- expect(fetchedProbe?.key).toBeFalsy();
222
- expect(fetchedProbe?.createdAt).toBeTruthy(); // this is the default column and it should be always truthy
223
- expect(fetchedProbe?.createdByUserId).toBeFalsy();
224
- expect(fetchedProbe?.probeVersion).toBeFalsy();
225
- });
226
-
227
- test("findOneBy by key", async () => {
228
- const name: string = Faker.generateName();
229
- const probeVersion: Version = new Version("1.0.2");
230
- const key: ObjectID = ObjectID.generate();
231
- const probe: Probe = new Probe();
232
- probe.name = name;
233
- probe.probeVersion = probeVersion;
234
- probe.key = key.toString();
235
- probe.description = "test description";
236
-
237
- const savedProbe: Probe = await ProbeService.create({
238
- data: probe,
239
- props: {
240
- isRoot: true,
241
- },
242
- });
7
+ describe("Probe Model", () => {
8
+ let probe: Probe;
243
9
 
244
- const fetchedProbe: Probe | null = await ProbeService.findOneBy({
245
- query: {
246
- key: key.toString(),
247
- },
248
- select: {
249
- _id: true,
250
- name: true,
251
- version: true,
252
- probeVersion: true,
253
- createdAt: true,
254
- key: true,
255
- },
256
- props: { isRoot: true },
257
- });
258
-
259
- if (!fetchedProbe) {
260
- // fail the test.
261
- fail("Probe not found in the database");
262
- }
263
-
264
- expect(fetchedProbe._id).toEqual(savedProbe._id);
265
- expect(fetchedProbe.name).toEqual(name);
266
- expect(fetchedProbe.probeVersion?.toString()).toEqual(
267
- probeVersion?.toString(),
268
- );
269
- expect(fetchedProbe.createdAt).toBeTruthy();
270
- expect(fetchedProbe.version).toBeTruthy();
271
- expect(fetchedProbe._id).toBeTruthy();
272
- expect(fetchedProbe.key?.toString()).toEqual(key?.toString());
10
+ beforeEach(() => {
11
+ probe = new Probe();
273
12
  });
274
13
 
275
- test("findBy all entities", async () => {
276
- const name1: string = Faker.generateName();
277
- const probeVersion1: Version = new Version("1.0.2");
278
- const key1: ObjectID = ObjectID.generate();
279
- const probe: Probe = new Probe();
280
- probe.name = name1;
281
- probe.probeVersion = probeVersion1;
282
- probe.key = key1.toString();
283
- probe.description = "test description";
284
-
285
- const savedProbe1: Probe = await ProbeService.create({
286
- data: probe,
287
- props: {
288
- isRoot: true,
289
- },
14
+ describe("constructor", () => {
15
+ test("should create a new Probe instance", () => {
16
+ expect(probe).toBeInstanceOf(Probe);
290
17
  });
291
18
 
292
- const name2: string = Faker.generateName();
293
- const probeVersion2: Version = new Version("1.0.1");
294
- const key2: ObjectID = ObjectID.generate();
295
- const probe2: Probe = new Probe();
296
- probe2.name = name2;
297
- probe2.probeVersion = probeVersion2;
298
- probe2.key = key2.toString();
299
- probe2.description = "test description";
300
-
301
- const savedProbe2: Probe = await ProbeService.create({
302
- data: probe2,
303
- props: {
304
- isRoot: true,
305
- },
306
- });
307
-
308
- const fetchedProbes: Array<Probe> = await ProbeService.findBy({
309
- query: {},
310
- select: {
311
- _id: true,
312
- name: true,
313
- version: true,
314
- probeVersion: true,
315
- createdAt: true,
316
- key: true,
317
- },
318
- limit: new PositiveNumber(10),
319
- skip: new PositiveNumber(0),
320
- props: { isRoot: true },
19
+ test("should create a Probe with an ID", () => {
20
+ const id: ObjectID = ObjectID.generate();
21
+ const probeWithId: Probe = new Probe(id);
22
+ expect(probeWithId.id).toEqual(id);
321
23
  });
322
-
323
- if (fetchedProbes.length !== 2) {
324
- // fail the test.
325
- fail("Probe not found in the database");
326
- }
327
-
328
- expect(fetchedProbes[0]?._id).toEqual(savedProbe2._id);
329
- expect(fetchedProbes[0]?.name).toEqual(name2);
330
- expect(fetchedProbes[0]?.probeVersion?.toString()).toEqual(
331
- probeVersion2.toString(),
332
- );
333
- expect(fetchedProbes[0]?.createdAt).toBeTruthy();
334
- expect(fetchedProbes[0]?.version).toBeTruthy();
335
- expect(fetchedProbes[0]?._id).toBeTruthy();
336
- expect(fetchedProbes[0]?.key?.toString()).toEqual(key2.toString());
337
-
338
- expect(fetchedProbes[1]?._id).toEqual(savedProbe1._id);
339
- expect(fetchedProbes[1]?.name).toEqual(name1);
340
- expect(fetchedProbes[1]?.probeVersion?.toString()).toEqual(
341
- probeVersion1.toString(),
342
- );
343
- expect(fetchedProbes[1]?.createdAt).toBeTruthy();
344
- expect(fetchedProbes[1]?.version).toBeTruthy();
345
- expect(fetchedProbes[1]?._id).toBeTruthy();
346
- expect(fetchedProbes[1]?.key?.toString()).toEqual(key1.toString());
347
24
  });
348
25
 
349
- test("findBy limit", async () => {
350
- const savedProbes: Array<Probe> = [];
351
-
352
- for (let i: number = 0; i < 20; i++) {
26
+ describe("name property", () => {
27
+ test("should set and get name correctly", () => {
353
28
  const name: string = Faker.generateName();
354
- const probeVersion: Version = new Version("1.0.2");
355
- const key: ObjectID = ObjectID.generate();
356
-
357
- const probe: Probe = new Probe();
358
29
  probe.name = name;
359
- probe.probeVersion = probeVersion;
360
- probe.key = key.toString();
361
- probe.description = "test description";
362
-
363
- const savedProbe: Probe = await ProbeService.create({
364
- data: probe,
365
- props: {
366
- isRoot: true,
367
- },
368
- });
369
-
370
- savedProbes.push(savedProbe);
371
- }
372
-
373
- const fetchedProbes: Array<Probe> = await ProbeService.findBy({
374
- query: {},
375
- select: {
376
- _id: true,
377
- name: true,
378
- version: true,
379
- probeVersion: true,
380
- createdAt: true,
381
- key: true,
382
- },
383
- limit: new PositiveNumber(10),
384
- skip: new PositiveNumber(0),
385
- props: { isRoot: true },
30
+ expect(probe.name).toBe(name);
386
31
  });
387
32
 
388
- if (savedProbes.length !== 20) {
389
- // fail the test.
390
- fail("Probe not saved successfully");
391
- }
392
-
393
- if (fetchedProbes.length !== 10) {
394
- // fail the test.
395
- fail("Probe fetch limit breached");
396
- }
397
-
398
- for (let i: number = 0; i < fetchedProbes.length; i++) {
399
- expect(fetchedProbes[i]?._id).toEqual(savedProbes[19 - i]?._id);
400
- expect(fetchedProbes[i]?.name).toEqual(savedProbes[19 - i]?.name);
401
- expect(fetchedProbes[i]?.probeVersion?.toString()).toEqual(
402
- savedProbes[19 - i]?.probeVersion?.toString(),
403
- );
404
- expect(fetchedProbes[i]?.createdAt).toBeTruthy();
405
- expect(fetchedProbes[i]?.version).toBeTruthy();
406
- expect(fetchedProbes[i]?._id).toBeTruthy();
407
- expect(fetchedProbes[i]?.key?.toString()).toEqual(
408
- savedProbes[19 - i]?.key?.toString(),
409
- );
410
- }
411
- });
412
-
413
- test("findBy skip", async () => {
414
- const savedProbes: Array<Probe> = [];
415
-
416
- for (let i: number = 0; i < 20; i++) {
417
- const name: string = Faker.generateName();
418
- const probeVersion: Version = new Version("1.0.2");
419
- const key: ObjectID = ObjectID.generate();
420
-
421
- const probe: Probe = new Probe();
422
- probe.name = name;
423
- probe.probeVersion = probeVersion;
424
- probe.key = key.toString();
425
- probe.description = "test description";
426
-
427
- const savedProbe: Probe = await ProbeService.create({
428
- data: probe,
429
- props: {
430
- isRoot: true,
431
- },
432
- });
433
-
434
- savedProbes.push(savedProbe);
435
- }
436
-
437
- const fetchedProbes: Array<Probe> = await ProbeService.findBy({
438
- query: {},
439
- select: {
440
- _id: true,
441
- name: true,
442
- version: true,
443
- probeVersion: true,
444
- createdAt: true,
445
- key: true,
446
- },
447
- limit: new PositiveNumber(10),
448
- skip: new PositiveNumber(10),
449
- props: { isRoot: true },
33
+ test("should allow empty name", () => {
34
+ probe.name = "";
35
+ expect(probe.name).toBe("");
450
36
  });
451
-
452
- if (savedProbes.length !== 20) {
453
- // fail the test.
454
- fail("Probe not saved successfully");
455
- }
456
-
457
- if (fetchedProbes.length !== 10) {
458
- // fail the test.
459
- fail("Probe fetch limit breached");
460
- }
461
-
462
- for (let i: number = 0; i < fetchedProbes.length; i++) {
463
- expect(fetchedProbes[i]?._id).toEqual(savedProbes[9 - i]?._id);
464
- expect(fetchedProbes[i]?.name).toEqual(savedProbes[9 - i]?.name);
465
- expect(fetchedProbes[i]?.probeVersion?.toString()).toEqual(
466
- savedProbes[9 - i]?.probeVersion?.toString(),
467
- );
468
- expect(fetchedProbes[i]?.createdAt).toBeTruthy();
469
- expect(fetchedProbes[i]?.version).toBeTruthy();
470
- expect(fetchedProbes[i]?._id).toBeTruthy();
471
- expect(fetchedProbes[i]?.key?.toString()).toEqual(
472
- savedProbes[9 - i]?.key?.toString(),
473
- );
474
- }
475
37
  });
476
38
 
477
- test("delete probe by query", async () => {
478
- const name: string = Faker.generateName();
479
- const probeVersion: Version = new Version("1.0.2");
480
- const key: ObjectID = ObjectID.generate();
481
- const probe: Probe = new Probe();
482
- probe.name = name;
483
- probe.probeVersion = probeVersion;
484
- probe.key = key.toString();
485
- probe.description = "test description";
486
-
487
- const savedProbe: Probe = await ProbeService.create({
488
- data: probe,
489
- props: {
490
- isRoot: true,
491
- },
39
+ describe("probeVersion property", () => {
40
+ test("should set and get version correctly", () => {
41
+ const version: Version = new Version("1.0.0");
42
+ probe.probeVersion = version;
43
+ expect(probe.probeVersion?.toString()).toBe("1.0.0");
492
44
  });
493
45
 
494
- expect(savedProbe).toBeTruthy();
495
-
496
- await ProbeService.deleteBy({
497
- query: {
498
- key: key.toString(),
499
- },
500
- skip: 0,
501
- limit: 1,
502
- props: { isRoot: true },
503
- });
504
-
505
- const fetchedProbe: Probe | null = await ProbeService.findOneBy({
506
- query: {
507
- key: key.toString(),
508
- },
509
- select: {
510
- _id: true,
511
- name: true,
512
- version: true,
513
- probeVersion: true,
514
- createdAt: true,
515
- key: true,
516
- },
517
- props: { isRoot: true },
46
+ test("should handle different version formats", () => {
47
+ const version: Version = new Version("2.5.10");
48
+ probe.probeVersion = version;
49
+ expect(probe.probeVersion?.toString()).toBe("2.5.10");
518
50
  });
519
-
520
- expect(fetchedProbe).toBeNull();
521
51
  });
522
52
 
523
- test("update probe by query", async () => {
524
- const name: string = Faker.generateName();
525
- const probeVersion: Version = new Version("1.0.2");
526
- const key: ObjectID = ObjectID.generate();
527
-
528
- const probe: Probe = new Probe();
529
- probe.name = name;
530
- probe.probeVersion = probeVersion;
531
- probe.key = key.toString();
532
- probe.description = "test description";
533
-
534
- const savedProbe: Probe = await ProbeService.create({
535
- data: probe,
536
- props: {
537
- isRoot: true,
538
- },
53
+ describe("key property", () => {
54
+ test("should set and get key correctly", () => {
55
+ const key: string = ObjectID.generate().toString();
56
+ probe.key = key;
57
+ expect(probe.key).toBe(key);
539
58
  });
540
59
 
541
- expect(savedProbe).toBeTruthy();
542
-
543
- const updatedName: string = Faker.generateName();
544
- await ProbeService.updateOneBy({
545
- query: {
546
- key: key.toString(),
547
- },
548
- data: {
549
- name: updatedName,
550
- },
551
- props: { isRoot: true },
60
+ test("should handle UUID format keys", () => {
61
+ const key: string = "550e8400-e29b-41d4-a716-446655440000";
62
+ probe.key = key;
63
+ expect(probe.key).toBe(key);
552
64
  });
553
-
554
- const fetchedProbe: Probe | null = await ProbeService.findOneBy({
555
- query: {
556
- key: key.toString(),
557
- },
558
- select: {
559
- _id: true,
560
- name: true,
561
- version: true,
562
- probeVersion: true,
563
- createdAt: true,
564
- key: true,
565
- },
566
- props: { isRoot: true },
567
- });
568
-
569
- expect(fetchedProbe).toBeTruthy();
570
- expect(fetchedProbe?.name).toBe(updatedName);
571
65
  });
572
66
 
573
- test("update probe by query", async () => {
574
- const name: string = Faker.generateName();
575
- const probeVersion: Version = new Version("1.0.2");
576
- const key: ObjectID = ObjectID.generate();
577
-
578
- const probe: Probe = new Probe();
579
- probe.name = name;
580
- probe.probeVersion = probeVersion;
581
- probe.key = key.toString();
582
- probe.description = "test description";
583
-
584
- const savedProbe: Probe = await ProbeService.create({
585
- data: probe,
586
- props: {
587
- isRoot: true,
588
- },
589
- });
590
-
591
- expect(savedProbe).toBeTruthy();
592
-
593
- const updatedName: string = Faker.generateName();
594
- await ProbeService.updateBy({
595
- query: {
596
- key: key.toString(),
597
- },
598
- skip: 0,
599
- limit: 1,
600
- data: {
601
- name: updatedName,
602
- },
603
- props: { isRoot: true },
67
+ describe("description property", () => {
68
+ test("should set and get description correctly", () => {
69
+ const description: string = "Test probe description";
70
+ probe.description = description;
71
+ expect(probe.description).toBe(description);
604
72
  });
605
73
 
606
- const fetchedProbe: Probe | null = await ProbeService.findOneBy({
607
- query: {
608
- key: key.toString(),
609
- },
610
- select: {
611
- _id: true,
612
- name: true,
613
- version: true,
614
- probeVersion: true,
615
- createdAt: true,
616
- key: true,
617
- },
618
- props: { isRoot: true },
74
+ test("should handle long descriptions", () => {
75
+ const longDescription: string = "A".repeat(1000);
76
+ probe.description = longDescription;
77
+ expect(probe.description).toBe(longDescription);
619
78
  });
620
-
621
- expect(fetchedProbe).toBeTruthy();
622
- expect(fetchedProbe?.name).toBe(updatedName);
623
79
  });
624
80
 
625
- test("slugify column", async () => {
626
- const name: string = Faker.generateName();
627
- const probeVersion: Version = new Version("1.0.2");
628
- const key: ObjectID = ObjectID.generate();
629
-
630
- const probe: Probe = new Probe();
631
- probe.name = name;
632
- probe.probeVersion = probeVersion;
633
- probe.key = key.toString();
634
- probe.description = "test description";
635
-
636
- const savedProbe: Probe = await ProbeService.create({
637
- data: probe,
638
- props: {
639
- isRoot: true,
640
- },
81
+ describe("isGlobalProbe property", () => {
82
+ test("should default to undefined", () => {
83
+ expect(probe.isGlobalProbe).toBeUndefined();
641
84
  });
642
85
 
643
- expect(savedProbe).toBeTruthy();
644
- expect(savedProbe.slug).toContain(name.toLowerCase() + "-");
645
- });
646
-
647
- test("add user to createdBy column", async () => {
648
- let user: User = UserTestService.generateRandomUser();
649
-
650
- user = await UserService.create({
651
- data: user,
652
- props: {
653
- isRoot: true,
654
- },
86
+ test("should set global flag to true", () => {
87
+ probe.isGlobalProbe = true;
88
+ expect(probe.isGlobalProbe).toBe(true);
655
89
  });
656
90
 
657
- const name: string = Faker.generateName();
658
- const probeVersion: Version = new Version("1.0.2");
659
- const key: ObjectID = ObjectID.generate();
660
-
661
- const probe: Probe = new Probe();
662
- probe.name = name;
663
- probe.probeVersion = probeVersion;
664
- probe.key = key.toString();
665
- probe.description = "test description";
666
-
667
- const savedProbe: Probe = await ProbeService.create({
668
- data: probe,
669
- props: {
670
- isRoot: true,
671
- },
91
+ test("should set global flag to false", () => {
92
+ probe.isGlobalProbe = false;
93
+ expect(probe.isGlobalProbe).toBe(false);
672
94
  });
673
-
674
- savedProbe.createdByUser = user;
675
- await ProbeService.updateOneById({
676
- id: savedProbe.id!,
677
- data: {
678
- createdByUserId: user.id!,
679
- },
680
- props: {
681
- isRoot: true,
682
- },
683
- });
684
-
685
- const findProbe: Probe | null = await ProbeService.findOneBy({
686
- query: {
687
- _id: savedProbe._id!,
688
- },
689
- select: {
690
- _id: true,
691
- name: true,
692
- version: true,
693
- probeVersion: true,
694
- createdAt: true,
695
- key: true,
696
- createdByUserId: true,
697
- },
698
- props: { isRoot: true },
699
- });
700
-
701
- expect(findProbe).toBeTruthy();
702
- expect(findProbe?.createdByUserId?.toString()).toContain(user._id);
703
95
  });
704
96
 
705
- test("include user in relation", async () => {
706
- let user: User = UserTestService.generateRandomUser();
707
-
708
- user = await UserService.create({
709
- data: user,
710
- props: {
711
- isRoot: true,
712
- },
97
+ describe("lastAlive property", () => {
98
+ test("should set and get lastAlive date", () => {
99
+ const date: Date = new Date();
100
+ probe.lastAlive = date;
101
+ expect(probe.lastAlive).toBe(date);
713
102
  });
714
-
715
- const name: string = Faker.generateName();
716
- const probeVersion: Version = new Version("1.0.2");
717
- const key: ObjectID = ObjectID.generate();
718
-
719
- const probe: Probe = new Probe();
720
- probe.name = name;
721
- probe.probeVersion = probeVersion;
722
- probe.key = key.toString();
723
- probe.description = "test description";
724
-
725
- const savedProbe: Probe = await ProbeService.create({
726
- data: probe,
727
- props: {
728
- isRoot: true,
729
- },
730
- });
731
-
732
- savedProbe.createdByUser = user;
733
- await ProbeService.updateOneById({
734
- id: savedProbe.id!,
735
- data: {
736
- createdByUserId: user.id!,
737
- },
738
- props: {
739
- isRoot: true,
740
- },
741
- });
742
-
743
- const findProbe: Probe | null = await ProbeService.findOneBy({
744
- query: {
745
- _id: savedProbe._id!,
746
- },
747
- select: {
748
- _id: true,
749
- name: true,
750
- version: true,
751
- probeVersion: true,
752
- createdAt: true,
753
- key: true,
754
- createdByUser: {
755
- _id: true,
756
- name: true,
757
- },
758
- },
759
- props: { isRoot: true },
760
- });
761
-
762
- expect(findProbe).toBeTruthy();
763
- expect(findProbe?.createdByUser?._id).toContain(user._id);
764
- expect(findProbe?.createdByUser?.name?.toString()).toBeTruthy();
765
- expect(user.name?.toString()).toBeTruthy();
766
- expect(findProbe?.createdByUser?.name?.toString()).toContain(
767
- user.name?.toString(),
768
- );
769
103
  });
770
104
 
771
- test("find a probe by user relation", async () => {
772
- let user: User = UserTestService.generateRandomUser();
773
-
774
- user = await UserService.create({
775
- data: user,
776
- props: {
777
- isRoot: true,
778
- },
105
+ describe("slug property", () => {
106
+ test("should set and get slug correctly", () => {
107
+ const slug: string = "test-probe-slug";
108
+ probe.slug = slug;
109
+ expect(probe.slug).toBe(slug);
779
110
  });
111
+ });
780
112
 
781
- const name: string = Faker.generateName();
782
- const probeVersion: Version = new Version("1.0.2");
783
- const key: ObjectID = ObjectID.generate();
784
-
785
- const probe: Probe = new Probe();
786
- probe.name = name;
787
- probe.probeVersion = probeVersion;
788
- probe.key = key.toString();
789
- probe.description = "test description";
113
+ describe("Probe with multiple properties", () => {
114
+ test("should handle all properties together", () => {
115
+ const id: ObjectID = ObjectID.generate();
116
+ const name: string = Faker.generateName();
117
+ const version: Version = new Version("3.0.0");
118
+ const key: string = ObjectID.generate().toString();
119
+ const description: string = "Full probe test";
790
120
 
791
- const savedProbe: Probe = await ProbeService.create({
792
- data: probe,
793
- props: {
794
- isRoot: true,
795
- },
796
- });
121
+ const fullProbe: Probe = new Probe(id);
122
+ fullProbe.name = name;
123
+ fullProbe.probeVersion = version;
124
+ fullProbe.key = key;
125
+ fullProbe.description = description;
126
+ fullProbe.isGlobalProbe = true;
797
127
 
798
- savedProbe.createdByUser = user;
799
- await ProbeService.updateOneById({
800
- id: savedProbe.id!,
801
- data: {
802
- createdByUserId: user.id!,
803
- },
804
- props: {
805
- isRoot: true,
806
- },
128
+ expect(fullProbe.id).toEqual(id);
129
+ expect(fullProbe.name).toBe(name);
130
+ expect(fullProbe.probeVersion?.toString()).toBe("3.0.0");
131
+ expect(fullProbe.key).toBe(key);
132
+ expect(fullProbe.description).toBe(description);
133
+ expect(fullProbe.isGlobalProbe).toBe(true);
807
134
  });
808
135
 
809
- if (!user.id) {
810
- fail("user.id not found");
811
- }
136
+ test("should create probe with minimal properties", () => {
137
+ const minimalProbe: Probe = new Probe();
138
+ minimalProbe.name = "Minimal";
812
139
 
813
- const findProbe: Probe | null = await ProbeService.findOneBy({
814
- query: {
815
- createdByUserId: user.id,
816
- },
817
- select: {
818
- _id: true,
819
- name: true,
820
- version: true,
821
- probeVersion: true,
822
- createdAt: true,
823
- key: true,
824
- createdByUser: {
825
- _id: true,
826
- name: true,
827
- },
828
- },
829
- props: { isRoot: true },
140
+ expect(minimalProbe.name).toBe("Minimal");
141
+ expect(minimalProbe.key).toBeUndefined();
142
+ expect(minimalProbe.description).toBeUndefined();
830
143
  });
831
-
832
- expect(findProbe).toBeTruthy();
833
- expect(findProbe?.createdByUser?._id).toContain(user._id);
834
- expect(findProbe?.createdByUser?.name?.toString()).toContain(
835
- user.name?.toString(),
836
- );
837
144
  });
838
145
  });