@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.
- package/Server/Services/AIService.ts +1 -1
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +78 -1
- package/Server/Utils/Workspace/Slack/Slack.ts +80 -1
- package/Tests/Server/API/BaseAPI.test.ts +9 -4
- package/Tests/Server/Middleware/ProjectAuthorization.test.ts +133 -162
- package/Tests/Server/Services/ProbeService.test.ts +91 -784
- package/Tests/Server/Services/ScheduledMaintenanceService.test.ts +131 -112
- package/Tests/Server/Services/TeamMemberService.test.ts +87 -1343
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +18 -9
- package/Tests/Server/Utils/Cookie.test.ts +10 -2
- package/Tests/Types/HashedString.test.ts +52 -8
- package/Tests/UI/Components/404.test.tsx +10 -15
- package/Tests/UI/Components/Breadcrumbs.test.tsx +6 -2
- package/Tests/UI/Components/Button.test.tsx +12 -12
- package/Tests/UI/Components/Card.test.tsx +4 -2
- package/Tests/UI/Components/ConfirmModal.test.tsx +1 -1
- package/Tests/UI/Components/Dropdown.test.tsx +37 -4
- package/Tests/UI/Components/DuplicateModel.test.tsx +49 -45
- package/Tests/UI/Components/FilePicker.test.tsx +258 -178
- package/Tests/UI/Components/List.test.tsx +3 -1
- package/Tests/UI/Components/MarkdownEditor.test.tsx +6 -5
- package/Tests/UI/Components/MasterPage.test.tsx +1 -1
- package/Tests/UI/Components/Modal.test.tsx +5 -5
- package/Tests/UI/Components/NavBar.test.tsx +14 -1
- package/Tests/UI/Components/OrderedStatesList.test.tsx +1 -1
- package/Tests/UI/Components/Pagination.test.tsx +6 -2
- package/Tests/Utils/API.test.ts +133 -11
- package/Tests/__mocks__/azure.js +2 -0
- package/Tests/__mocks__/botbuilder-stdlib.js +2 -0
- package/Tests/__mocks__/botbuilder.js +10 -0
- package/Tests/__mocks__/locter.js +5 -0
- package/Tests/__mocks__/otpauth.js +30 -0
- package/Tests/__mocks__/simplewebauthn.js +34 -0
- package/Tests/__mocks__/styleMock.js +1 -0
- package/Tests/__mocks__/uuid.js +31 -0
- package/Tests/__mocks__/yaml.js +11 -0
- package/Tests/jest.setup.ts +14 -0
- package/UI/Components/AI/AITemplates.ts +226 -0
- package/UI/Components/AI/GenerateFromAIModal.tsx +21 -270
- package/build/dist/Server/Services/AIService.js +1 -1
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +59 -2
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js +61 -1
- package/build/dist/Server/Utils/Workspace/Slack/Slack.js.map +1 -1
- package/build/dist/Tests/Server/API/BaseAPI.test.js +7 -2
- package/build/dist/Tests/Server/API/BaseAPI.test.js.map +1 -1
- package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js +89 -101
- package/build/dist/Tests/Server/Middleware/ProjectAuthorization.test.js.map +1 -1
- package/build/dist/Tests/Server/Services/ProbeService.test.js +95 -687
- package/build/dist/Tests/Server/Services/ProbeService.test.js.map +1 -1
- package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js +108 -89
- package/build/dist/Tests/Server/Services/ScheduledMaintenanceService.test.js.map +1 -1
- package/build/dist/Tests/Server/Services/TeamMemberService.test.js +85 -924
- package/build/dist/Tests/Server/Services/TeamMemberService.test.js.map +1 -1
- package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js +14 -9
- package/build/dist/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.js.map +1 -1
- package/build/dist/Tests/Server/Utils/Cookie.test.js +10 -4
- package/build/dist/Tests/Server/Utils/Cookie.test.js.map +1 -1
- package/build/dist/Tests/Types/HashedString.test.js +39 -6
- package/build/dist/Tests/Types/HashedString.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/404.test.js +10 -10
- package/build/dist/Tests/UI/Components/404.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Breadcrumbs.test.js +6 -2
- package/build/dist/Tests/UI/Components/Breadcrumbs.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Button.test.js +12 -12
- package/build/dist/Tests/UI/Components/Card.test.js +4 -2
- package/build/dist/Tests/UI/Components/Card.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/ConfirmModal.test.js +1 -1
- package/build/dist/Tests/UI/Components/ConfirmModal.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Dropdown.test.js +19 -3
- package/build/dist/Tests/UI/Components/Dropdown.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/DuplicateModel.test.js +46 -41
- package/build/dist/Tests/UI/Components/DuplicateModel.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/FilePicker.test.js +210 -117
- package/build/dist/Tests/UI/Components/FilePicker.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/List.test.js +3 -1
- package/build/dist/Tests/UI/Components/List.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/MarkdownEditor.test.js +6 -5
- package/build/dist/Tests/UI/Components/MarkdownEditor.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/MasterPage.test.js +1 -1
- package/build/dist/Tests/UI/Components/MasterPage.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Modal.test.js +5 -5
- package/build/dist/Tests/UI/Components/Modal.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/NavBar.test.js +13 -1
- package/build/dist/Tests/UI/Components/NavBar.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/OrderedStatesList.test.js +1 -1
- package/build/dist/Tests/UI/Components/OrderedStatesList.test.js.map +1 -1
- package/build/dist/Tests/UI/Components/Pagination.test.js +6 -2
- package/build/dist/Tests/UI/Components/Pagination.test.js.map +1 -1
- package/build/dist/Tests/Utils/API.test.js +100 -9
- package/build/dist/Tests/Utils/API.test.js.map +1 -1
- package/build/dist/Tests/jest.setup.js +13 -0
- package/build/dist/Tests/jest.setup.js.map +1 -0
- package/build/dist/UI/Components/AI/AITemplates.js +218 -0
- package/build/dist/UI/Components/AI/AITemplates.js.map +1 -0
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js +5 -238
- package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
- package/jest.config.json +18 -1
- 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
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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("
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
118
|
-
).
|
|
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
|
});
|