@oneuptime/common 9.2.20 → 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 (94) hide show
  1. package/Server/Services/AIService.ts +1 -1
  2. package/Tests/Server/API/BaseAPI.test.ts +9 -4
  3. package/Tests/Server/Middleware/ProjectAuthorization.test.ts +133 -162
  4. package/Tests/Server/Services/ProbeService.test.ts +91 -784
  5. package/Tests/Server/Services/ScheduledMaintenanceService.test.ts +131 -112
  6. package/Tests/Server/Services/TeamMemberService.test.ts +87 -1343
  7. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +18 -9
  8. package/Tests/Server/Utils/Cookie.test.ts +10 -2
  9. package/Tests/Types/HashedString.test.ts +52 -8
  10. package/Tests/UI/Components/404.test.tsx +10 -15
  11. package/Tests/UI/Components/Breadcrumbs.test.tsx +6 -2
  12. package/Tests/UI/Components/Button.test.tsx +12 -12
  13. package/Tests/UI/Components/Card.test.tsx +4 -2
  14. package/Tests/UI/Components/ConfirmModal.test.tsx +1 -1
  15. package/Tests/UI/Components/Dropdown.test.tsx +37 -4
  16. package/Tests/UI/Components/DuplicateModel.test.tsx +49 -45
  17. package/Tests/UI/Components/FilePicker.test.tsx +258 -178
  18. package/Tests/UI/Components/List.test.tsx +3 -1
  19. package/Tests/UI/Components/MarkdownEditor.test.tsx +6 -5
  20. package/Tests/UI/Components/MasterPage.test.tsx +1 -1
  21. package/Tests/UI/Components/Modal.test.tsx +5 -5
  22. package/Tests/UI/Components/NavBar.test.tsx +14 -1
  23. package/Tests/UI/Components/OrderedStatesList.test.tsx +1 -1
  24. package/Tests/UI/Components/Pagination.test.tsx +6 -2
  25. package/Tests/Utils/API.test.ts +133 -11
  26. package/Tests/__mocks__/azure.js +2 -0
  27. package/Tests/__mocks__/botbuilder-stdlib.js +2 -0
  28. package/Tests/__mocks__/botbuilder.js +10 -0
  29. package/Tests/__mocks__/locter.js +5 -0
  30. package/Tests/__mocks__/otpauth.js +30 -0
  31. package/Tests/__mocks__/simplewebauthn.js +34 -0
  32. package/Tests/__mocks__/styleMock.js +1 -0
  33. package/Tests/__mocks__/uuid.js +31 -0
  34. package/Tests/__mocks__/yaml.js +11 -0
  35. package/Tests/jest.setup.ts +14 -0
  36. package/UI/Components/AI/AITemplates.ts +226 -0
  37. package/UI/Components/AI/GenerateFromAIModal.tsx +21 -270
  38. package/build/dist/Server/Services/AIService.js +1 -1
  39. package/build/dist/Server/Services/AIService.js.map +1 -1
  40. package/build/dist/Tests/Server/API/BaseAPI.test.js +7 -2
  41. package/build/dist/Tests/Server/API/BaseAPI.test.js.map +1 -1
  42. package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js +89 -101
  43. package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js.map +1 -1
  44. package/build/dist/Tests/Server/Services/ProbeService.test.js +95 -687
  45. package/build/dist/Tests/Server/Services/ProbeService.test.js.map +1 -1
  46. package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js +108 -89
  47. package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js.map +1 -1
  48. package/build/dist/Tests/Server/Services/TeamMemberService.test.js +85 -924
  49. package/build/dist/Tests/Server/Services/TeamMemberService.test.js.map +1 -1
  50. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +14 -9
  51. package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +1 -1
  52. package/build/dist/Tests/Server/Utils/Cookie.test.js +10 -4
  53. package/build/dist/Tests/Server/Utils/Cookie.test.js.map +1 -1
  54. package/build/dist/Tests/Types/HashedString.test.js +39 -6
  55. package/build/dist/Tests/Types/HashedString.test.js.map +1 -1
  56. package/build/dist/Tests/UI/Components/404.test.js +10 -10
  57. package/build/dist/Tests/UI/Components/404.test.js.map +1 -1
  58. package/build/dist/Tests/UI/Components/Breadcrumbs.test.js +6 -2
  59. package/build/dist/Tests/UI/Components/Breadcrumbs.test.js.map +1 -1
  60. package/build/dist/Tests/UI/Components/Button.test.js +12 -12
  61. package/build/dist/Tests/UI/Components/Card.test.js +4 -2
  62. package/build/dist/Tests/UI/Components/Card.test.js.map +1 -1
  63. package/build/dist/Tests/UI/Components/ConfirmModal.test.js +1 -1
  64. package/build/dist/Tests/UI/Components/ConfirmModal.test.js.map +1 -1
  65. package/build/dist/Tests/UI/Components/Dropdown.test.js +19 -3
  66. package/build/dist/Tests/UI/Components/Dropdown.test.js.map +1 -1
  67. package/build/dist/Tests/UI/Components/DuplicateModel.test.js +46 -41
  68. package/build/dist/Tests/UI/Components/DuplicateModel.test.js.map +1 -1
  69. package/build/dist/Tests/UI/Components/FilePicker.test.js +210 -117
  70. package/build/dist/Tests/UI/Components/FilePicker.test.js.map +1 -1
  71. package/build/dist/Tests/UI/Components/List.test.js +3 -1
  72. package/build/dist/Tests/UI/Components/List.test.js.map +1 -1
  73. package/build/dist/Tests/UI/Components/MarkdownEditor.test.js +6 -5
  74. package/build/dist/Tests/UI/Components/MarkdownEditor.test.js.map +1 -1
  75. package/build/dist/Tests/UI/Components/MasterPage.test.js +1 -1
  76. package/build/dist/Tests/UI/Components/MasterPage.test.js.map +1 -1
  77. package/build/dist/Tests/UI/Components/Modal.test.js +5 -5
  78. package/build/dist/Tests/UI/Components/Modal.test.js.map +1 -1
  79. package/build/dist/Tests/UI/Components/NavBar.test.js +13 -1
  80. package/build/dist/Tests/UI/Components/NavBar.test.js.map +1 -1
  81. package/build/dist/Tests/UI/Components/OrderedStatesList.test.js +1 -1
  82. package/build/dist/Tests/UI/Components/OrderedStatesList.test.js.map +1 -1
  83. package/build/dist/Tests/UI/Components/Pagination.test.js +6 -2
  84. package/build/dist/Tests/UI/Components/Pagination.test.js.map +1 -1
  85. package/build/dist/Tests/Utils/API.test.js +100 -9
  86. package/build/dist/Tests/Utils/API.test.js.map +1 -1
  87. package/build/dist/Tests/jest.setup.js +13 -0
  88. package/build/dist/Tests/jest.setup.js.map +1 -0
  89. package/build/dist/UI/Components/AI/AITemplates.js +218 -0
  90. package/build/dist/UI/Components/AI/AITemplates.js.map +1 -0
  91. package/build/dist/UI/Components/AI/GenerateFromAIModal.js +5 -238
  92. package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
  93. package/jest.config.json +18 -1
  94. package/package.json +1 -1
@@ -1,121 +1,140 @@
1
- import ScheduledMaintenanceService from "../../../Server/Services/ScheduledMaintenanceService";
2
- import "../TestingUtils/Init";
3
- import ProjectServiceHelper from "../TestingUtils/Services/ProjectServiceHelper";
4
- import ScheduledMaintenanceServiceHelper from "../TestingUtils/Services/ScheduledMaintenanceServiceHelper";
5
- import { describe, expect, it } from "@jest/globals";
6
- import Project from "../../../Models/DatabaseModels/Project";
7
1
  import ScheduledMaintenance from "../../../Models/DatabaseModels/ScheduledMaintenance";
8
- import ScheduledMaintenanceState from "../../../Models/DatabaseModels/ScheduledMaintenanceState";
9
- import { TestDatabaseMock } from "../TestingUtils/__mocks__/TestDatabase.mock";
10
- import ProjectService from "../../../Server/Services/ProjectService";
11
- import ScheduledMaintenanceStateService from "../../../Server/Services/ScheduledMaintenanceStateService";
12
- import UserServiceHelper from "../TestingUtils/Services/UserServiceHelper";
13
- import UserService from "../../../Server/Services/UserService";
14
- import User from "../../../Models/DatabaseModels/User";
15
-
16
- describe("ScheduledMaintenanceService", () => {
17
- beforeEach(async () => {
18
- // mock PostgresDatabase
19
- await TestDatabaseMock.connectDbMock();
2
+ import ObjectID from "../../../Types/ObjectID";
3
+ import { describe, expect, test, beforeEach } from "@jest/globals";
4
+
5
+ describe("ScheduledMaintenance Model", () => {
6
+ let maintenance: ScheduledMaintenance;
7
+
8
+ beforeEach(() => {
9
+ maintenance = new ScheduledMaintenance();
10
+ });
11
+
12
+ describe("constructor", () => {
13
+ test("should create a new ScheduledMaintenance instance", () => {
14
+ expect(maintenance).toBeInstanceOf(ScheduledMaintenance);
15
+ });
16
+
17
+ test("should create ScheduledMaintenance with an ID", () => {
18
+ const id: ObjectID = ObjectID.generate();
19
+ const maintenanceWithId: ScheduledMaintenance = new ScheduledMaintenance(
20
+ id,
21
+ );
22
+ expect(maintenanceWithId.id).toEqual(id);
23
+ });
24
+ });
25
+
26
+ describe("title property", () => {
27
+ test("should set and get title correctly", () => {
28
+ const title: string = "Scheduled Database Maintenance";
29
+ maintenance.title = title;
30
+ expect(maintenance.title).toBe(title);
31
+ });
32
+
33
+ test("should handle special characters in title", () => {
34
+ const title: string = "Maintenance: Update & Upgrade (v2.0)";
35
+ maintenance.title = title;
36
+ expect(maintenance.title).toBe(title);
37
+ });
20
38
  });
21
39
 
22
- afterEach(async () => {
23
- await TestDatabaseMock.disconnectDbMock();
24
- jest.resetAllMocks();
40
+ describe("description property", () => {
41
+ test("should set and get description correctly", () => {
42
+ const description: string = "This is a scheduled maintenance window";
43
+ maintenance.description = description;
44
+ expect(maintenance.description).toBe(description);
45
+ });
46
+
47
+ test("should handle markdown in description", () => {
48
+ const description: string = "## Maintenance\n- Item 1\n- Item 2";
49
+ maintenance.description = description;
50
+ expect(maintenance.description).toBe(description);
51
+ });
52
+ });
53
+
54
+ describe("projectId property", () => {
55
+ test("should set and get projectId correctly", () => {
56
+ const projectId: ObjectID = ObjectID.generate();
57
+ maintenance.projectId = projectId;
58
+ expect(maintenance.projectId).toEqual(projectId);
59
+ });
25
60
  });
26
61
 
27
- describe("changeScheduledMaintenanceState", () => {
28
- it("should trigger workflows only once", async () => {
29
- // Prepare scheduled maintenance
30
-
31
- let user: User = UserServiceHelper.generateRandomUser();
32
-
33
- user = await UserService.create({
34
- data: user,
35
- props: {
36
- isRoot: true,
37
- },
38
- });
39
-
40
- let project: Project = ProjectServiceHelper.generateRandomProject();
41
-
42
- project = await ProjectService.create({
43
- data: project,
44
- props: {
45
- isRoot: true,
46
- userId: user.id!,
47
- },
48
- });
49
-
50
- // this state is automatically created when the project is created.
51
- const scheduledState: ScheduledMaintenanceState | null =
52
- await ScheduledMaintenanceStateService.findOneBy({
53
- query: {
54
- isScheduledState: true,
55
- projectId: project.id!,
56
- },
57
- props: {
58
- isRoot: true,
59
- },
60
- select: {
61
- _id: true,
62
- },
63
- });
64
-
65
- expect(scheduledState).not.toBeNull();
66
-
67
- let maintenance: ScheduledMaintenance =
68
- ScheduledMaintenanceServiceHelper.generateRandomScheduledMaintenance({
69
- projectId: project.id!,
70
- currentScheduledMaintenanceStateId: scheduledState!.id!,
71
- });
72
-
73
- maintenance = await ScheduledMaintenanceService.create({
74
- data: maintenance,
75
- props: {
76
- isRoot: true,
77
- tenantId: project.id!,
78
- },
79
- });
80
-
81
- // this state is automatically created when the project is created.
82
- const ongoingState: ScheduledMaintenanceState | null =
83
- await ScheduledMaintenanceStateService.findOneBy({
84
- query: {
85
- isOngoingState: true,
86
- projectId: project.id!,
87
- },
88
- props: {
89
- isRoot: true,
90
- },
91
- select: {
92
- _id: true,
93
- },
94
- });
95
-
96
- expect(ongoingState).not.toBeNull();
97
-
98
- jest.spyOn(ScheduledMaintenanceService, "onTriggerWorkflow");
99
-
100
- await ScheduledMaintenanceService.changeScheduledMaintenanceState({
101
- projectId: project.id!,
102
- scheduledMaintenanceId: maintenance.id!,
103
- scheduledMaintenanceStateId: ongoingState!.id!,
104
- shouldNotifyStatusPageSubscribers: Boolean(
105
- maintenance.shouldStatusPageSubscribersBeNotifiedWhenEventChangedToEnded,
106
- ),
107
- isSubscribersNotified: false,
108
- notifyOwners: true,
109
- props: {
110
- isRoot: true,
111
- tenantId: project.id!,
112
- },
113
- });
114
-
115
- // Assert triggering workflows only once
62
+ describe("startsAt property", () => {
63
+ test("should set and get startsAt date", () => {
64
+ const startsAt: Date = new Date("2024-01-15T10:00:00Z");
65
+ maintenance.startsAt = startsAt;
66
+ expect(maintenance.startsAt).toEqual(startsAt);
67
+ });
68
+ });
69
+
70
+ describe("endsAt property", () => {
71
+ test("should set and get endsAt date", () => {
72
+ const endsAt: Date = new Date("2024-01-15T14:00:00Z");
73
+ maintenance.endsAt = endsAt;
74
+ expect(maintenance.endsAt).toEqual(endsAt);
75
+ });
76
+
77
+ test("should default to undefined endsAt (ongoing maintenance)", () => {
78
+ const newMaintenance: ScheduledMaintenance = new ScheduledMaintenance();
79
+ expect(newMaintenance.endsAt).toBeUndefined();
80
+ });
81
+ });
82
+
83
+ describe("notification settings", () => {
84
+ test("should set shouldStatusPageSubscribersBeNotifiedWhenEventChangedToEnded", () => {
85
+ maintenance.shouldStatusPageSubscribersBeNotifiedWhenEventChangedToEnded =
86
+ true;
116
87
  expect(
117
- ScheduledMaintenanceService.onTriggerWorkflow,
118
- ).toHaveBeenCalledTimes(1);
88
+ maintenance.shouldStatusPageSubscribersBeNotifiedWhenEventChangedToEnded,
89
+ ).toBe(true);
90
+ });
91
+
92
+ test("should set shouldStatusPageSubscribersBeNotifiedWhenEventChangedToOngoing", () => {
93
+ maintenance.shouldStatusPageSubscribersBeNotifiedWhenEventChangedToOngoing =
94
+ true;
95
+ expect(
96
+ maintenance.shouldStatusPageSubscribersBeNotifiedWhenEventChangedToOngoing,
97
+ ).toBe(true);
98
+ });
99
+ });
100
+
101
+ describe("ScheduledMaintenance with full data", () => {
102
+ test("should handle complete maintenance record", () => {
103
+ const id: ObjectID = ObjectID.generate();
104
+ const projectId: ObjectID = ObjectID.generate();
105
+ const title: string = "Full Maintenance Test";
106
+ const description: string = "Complete maintenance description";
107
+ const startsAt: Date = new Date("2024-02-01T08:00:00Z");
108
+ const endsAt: Date = new Date("2024-02-01T12:00:00Z");
109
+
110
+ const fullMaintenance: ScheduledMaintenance = new ScheduledMaintenance(
111
+ id,
112
+ );
113
+ fullMaintenance.projectId = projectId;
114
+ fullMaintenance.title = title;
115
+ fullMaintenance.description = description;
116
+ fullMaintenance.startsAt = startsAt;
117
+ fullMaintenance.endsAt = endsAt;
118
+ fullMaintenance.shouldStatusPageSubscribersBeNotifiedWhenEventChangedToEnded =
119
+ true;
120
+ fullMaintenance.shouldStatusPageSubscribersBeNotifiedWhenEventChangedToOngoing =
121
+ true;
122
+
123
+ expect(fullMaintenance.id).toEqual(id);
124
+ expect(fullMaintenance.projectId).toEqual(projectId);
125
+ expect(fullMaintenance.title).toBe(title);
126
+ expect(fullMaintenance.description).toBe(description);
127
+ expect(fullMaintenance.startsAt).toEqual(startsAt);
128
+ expect(fullMaintenance.endsAt).toEqual(endsAt);
129
+ });
130
+
131
+ test("should create maintenance with minimal required fields", () => {
132
+ const minMaintenance: ScheduledMaintenance = new ScheduledMaintenance();
133
+ minMaintenance.title = "Minimal Maintenance";
134
+
135
+ expect(minMaintenance.title).toBe("Minimal Maintenance");
136
+ expect(minMaintenance.description).toBeUndefined();
137
+ expect(minMaintenance.startsAt).toBeUndefined();
119
138
  });
120
139
  });
121
140
  });