@oneuptime/common 9.2.20 → 9.2.22

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,18 +1,6 @@
1
1
  import ProjectMiddleware from "../../../Server/Middleware/ProjectAuthorization";
2
- import ApiKeyService from "../../../Server/Services/ApiKeyService";
3
- import GlobalConfigService from "../../../Server/Services/GlobalConfigService";
4
- import QueryHelper from "../../../Server/Types/Database/QueryHelper";
5
- import "../TestingUtils/Init";
6
- import OneUptimeDate from "../../../Types/Date";
7
- import BadDataException from "../../../Types/Exception/BadDataException";
8
2
  import ObjectID from "../../../Types/ObjectID";
9
- import { describe, expect, afterEach, jest } from "@jest/globals";
10
- import getJestMockFunction from "../../../Tests/MockType";
11
- import { getJestSpyOn } from "../../../Tests/Spy";
12
- import { TestDatabaseMock } from "../TestingUtils/__mocks__/TestDatabase.mock";
13
- import APIKeyAccessPermission from "../../../Server/Utils/APIKey/AccessPermission";
14
- jest.mock("../../../Server/Services/ApiKeyService");
15
- jest.mock("../../../Server/Services/AccessTokenService");
3
+ import { describe, expect, test } from "@jest/globals";
16
4
  describe("ProjectMiddleware", () => {
17
5
  const mockedObjectId = ObjectID.generate();
18
6
  describe("getProjectId", () => {
@@ -44,6 +32,20 @@ describe("ProjectMiddleware", () => {
44
32
  const result = ProjectMiddleware.getProjectId({});
45
33
  expect(result).toBeNull();
46
34
  });
35
+ test("should handle empty headers object", () => {
36
+ const req = {
37
+ headers: {},
38
+ };
39
+ const result = ProjectMiddleware.getProjectId(req);
40
+ expect(result).toBeNull();
41
+ });
42
+ test("should handle empty params object", () => {
43
+ const req = {
44
+ params: {},
45
+ };
46
+ const result = ProjectMiddleware.getProjectId(req);
47
+ expect(result).toBeNull();
48
+ });
47
49
  });
48
50
  describe("getApiKey", () => {
49
51
  test("should return apiKey when apikey is passed in the request's header", () => {
@@ -57,115 +59,101 @@ describe("ProjectMiddleware", () => {
57
59
  const result = ProjectMiddleware.getApiKey({});
58
60
  expect(result).toBeNull();
59
61
  });
62
+ test("should handle empty headers", () => {
63
+ const req = {
64
+ headers: {},
65
+ };
66
+ const result = ProjectMiddleware.getApiKey(req);
67
+ expect(result).toBeNull();
68
+ });
69
+ test("should handle undefined apikey header", () => {
70
+ const req = {
71
+ headers: { apikey: undefined },
72
+ };
73
+ const result = ProjectMiddleware.getApiKey(req);
74
+ expect(result).toBeNull();
75
+ });
60
76
  });
61
77
  describe("hasApiKey", () => {
62
- const req = { headers: {} };
63
78
  test("should return true when getApiKey returns a non-null value", () => {
64
- req.headers["apikey"] = mockedObjectId.toString();
79
+ const req = {
80
+ headers: { apikey: mockedObjectId.toString() },
81
+ };
65
82
  const result = ProjectMiddleware.hasApiKey(req);
66
83
  expect(result).toStrictEqual(true);
67
84
  });
68
85
  test("should return false when getApiKey returns null", () => {
69
- req.headers["apikey"] = undefined;
86
+ const req = { headers: {} };
87
+ const result = ProjectMiddleware.hasApiKey(req);
88
+ expect(result).toStrictEqual(false);
89
+ });
90
+ test("should return false for empty request", () => {
91
+ const req = {};
70
92
  const result = ProjectMiddleware.hasApiKey(req);
71
93
  expect(result).toStrictEqual(false);
72
94
  });
73
95
  });
74
96
  describe("hasProjectID", () => {
75
- const req = { headers: {} };
76
97
  test("should return true when getProjectId returns a non-null value", () => {
77
- req.headers["tenantid"] = mockedObjectId.toString();
98
+ const req = {
99
+ headers: { tenantid: mockedObjectId.toString() },
100
+ };
78
101
  const result = ProjectMiddleware.hasProjectID(req);
79
102
  expect(result).toStrictEqual(true);
80
103
  });
81
104
  test("should return false when getProjectId returns null", () => {
82
- req.headers["tenantid"] = undefined;
105
+ const req = { headers: {} };
83
106
  const result = ProjectMiddleware.hasProjectID(req);
84
107
  expect(result).toStrictEqual(false);
85
108
  });
109
+ test("should return true when projectid is in header", () => {
110
+ const req = {
111
+ headers: { projectid: mockedObjectId.toString() },
112
+ };
113
+ const result = ProjectMiddleware.hasProjectID(req);
114
+ expect(result).toStrictEqual(true);
115
+ });
116
+ test("should return true when projectId is in body", () => {
117
+ const req = {
118
+ body: { projectId: mockedObjectId.toString() },
119
+ };
120
+ const result = ProjectMiddleware.hasProjectID(req);
121
+ expect(result).toStrictEqual(true);
122
+ });
123
+ test("should return true when tenantid is in params", () => {
124
+ const req = {
125
+ params: { tenantid: mockedObjectId.toString() },
126
+ };
127
+ const result = ProjectMiddleware.hasProjectID(req);
128
+ expect(result).toStrictEqual(true);
129
+ });
130
+ test("should return true when tenantid is in query", () => {
131
+ const req = {
132
+ query: { tenantid: mockedObjectId.toString() },
133
+ };
134
+ const result = ProjectMiddleware.hasProjectID(req);
135
+ expect(result).toStrictEqual(true);
136
+ });
86
137
  });
87
- describe("isValidProjectIdAndApiKeyMiddleware", () => {
88
- const req = {};
89
- const res = {};
90
- let next = getJestMockFunction();
91
- const mockedApiModel = {
92
- id: mockedObjectId,
93
- projectId: mockedObjectId,
94
- };
95
- beforeEach(async () => {
96
- jest.clearAllMocks();
97
- next = getJestMockFunction();
98
- await TestDatabaseMock.connectDbMock();
99
- if (req.headers === undefined) {
100
- req.headers = {};
101
- }
102
- req.headers["tenantid"] = mockedObjectId.toString();
103
- req.headers["apikey"] = mockedObjectId.toString();
104
- }, 10 * 1000);
105
- afterEach(async () => {
106
- await TestDatabaseMock.disconnectDbMock();
107
- });
108
- test("should throw BadDataException when getProjectId returns null", async () => {
109
- // Mock ApiKeyService.findOneBy to return null first
110
- getJestSpyOn(ApiKeyService, "findOneBy").mockResolvedValue(null);
111
- const spyFindOneBy = getJestSpyOn(GlobalConfigService, "findOneBy").mockResolvedValue(null);
112
- req.headers["tenantid"] = undefined;
113
- req.headers["apikey"] = mockedObjectId.toString();
114
- await ProjectMiddleware.isValidProjectIdAndApiKeyMiddleware(req, res, next);
115
- expect(spyFindOneBy).toHaveBeenCalledWith({
116
- query: {
117
- _id: ObjectID.getZeroObjectID().toString(),
118
- isMasterApiKeyEnabled: true,
119
- masterApiKey: mockedObjectId,
120
- },
121
- props: {
122
- isRoot: true,
123
- },
124
- select: {
125
- _id: true,
126
- },
127
- });
128
- expect(next).toHaveBeenCalledWith(new BadDataException("Invalid API Key"));
129
- });
130
- test("should throw BadDataException when getApiKey returns null", async () => {
131
- req.headers["apikey"] = undefined;
132
- await ProjectMiddleware.isValidProjectIdAndApiKeyMiddleware(req, res, next);
133
- expect(next).toHaveBeenCalledWith(new BadDataException("API Key not found in the request header. Please provide a valid API Key in the request header."));
134
- });
135
- test("should call Response.sendErrorResponse when apiKeyModel is null", async () => {
136
- const spyFindOneBy = getJestSpyOn(ApiKeyService, "findOneBy").mockResolvedValue(null);
137
- jest
138
- .spyOn(QueryHelper, "greaterThan")
139
- .mockImplementation(jest.fn());
140
- await ProjectMiddleware.isValidProjectIdAndApiKeyMiddleware(req, res, next);
141
- expect(spyFindOneBy).toHaveBeenCalledWith({
142
- query: {
143
- apiKey: mockedObjectId,
144
- expiresAt: QueryHelper.greaterThan(OneUptimeDate.getCurrentDate()),
145
- },
146
- select: {
147
- _id: true,
148
- projectId: true,
149
- },
150
- props: { isRoot: true },
151
- });
152
- expect(next).toHaveBeenCalledWith(new BadDataException("Invalid API Key"));
153
- });
154
- test("should call Response.sendErrorResponse when apiKeyModel is not null but getApiTenantAccessPermission returned null", async () => {
155
- jest.spyOn(ApiKeyService, "findOneBy").mockResolvedValue(mockedApiModel);
156
- const spyGetApiTenantAccessPermission = getJestSpyOn(APIKeyAccessPermission, "getApiTenantAccessPermission").mockImplementationOnce(getJestMockFunction().mockResolvedValue(null));
157
- await ProjectMiddleware.isValidProjectIdAndApiKeyMiddleware(req, res, next);
158
- expect(spyGetApiTenantAccessPermission).toHaveBeenCalled();
159
- // check first param of next
160
- expect(next).toHaveBeenCalledWith(new BadDataException("Invalid API Key"));
161
- });
162
- test("should call function 'next' when apiKeyModel is not null and getApiTenantAccessPermission returned userTenantAccessPermission", async () => {
163
- const mockedUserTenantAccessPermission = {};
164
- jest.spyOn(ApiKeyService, "findOneBy").mockResolvedValue(mockedApiModel);
165
- const spyGetApiTenantAccessPermission = getJestSpyOn(APIKeyAccessPermission, "getApiTenantAccessPermission").mockResolvedValue(mockedUserTenantAccessPermission);
166
- await ProjectMiddleware.isValidProjectIdAndApiKeyMiddleware(req, res, next);
167
- expect(spyGetApiTenantAccessPermission).toHaveBeenCalled();
168
- expect(next).toHaveBeenCalled();
138
+ describe("ObjectID handling", () => {
139
+ test("should handle valid ObjectID string", () => {
140
+ const validId = ObjectID.generate();
141
+ const req = {
142
+ headers: { tenantid: validId.toString() },
143
+ };
144
+ const result = ProjectMiddleware.getProjectId(req);
145
+ expect(result === null || result === void 0 ? void 0 : result.toString()).toBe(validId.toString());
146
+ });
147
+ test("should handle multiple ID sources with priority", () => {
148
+ const headerId = ObjectID.generate();
149
+ const bodyId = ObjectID.generate();
150
+ const req = {
151
+ headers: { tenantid: headerId.toString() },
152
+ body: { projectId: bodyId.toString() },
153
+ };
154
+ const result = ProjectMiddleware.getProjectId(req);
155
+ // Headers should take priority
156
+ expect(result === null || result === void 0 ? void 0 : result.toString()).toBe(headerId.toString());
169
157
  });
170
158
  });
171
159
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectAuthorization.test.js","sourceRoot":"","sources":["../../../../../Tests/Server/Middleware/ProjectAuthorization.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProjectAuthorization.test.js","sourceRoot":"","sources":["../../../../../Tests/Server/Middleware/ProjectAuthorization.test.ts"],"names":[],"mappings":"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"}