@northern.tech/testing 0.1.0
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/dist/baseTestConfig.json +24 -0
- package/dist/chunk-3KEPLFEG.js +64 -0
- package/dist/chunk-3KEPLFEG.js.map +1 -0
- package/dist/chunk-4ZCNCVNV.js +309 -0
- package/dist/chunk-4ZCNCVNV.js.map +1 -0
- package/dist/chunk-5MREOBVU.js +833 -0
- package/dist/chunk-5MREOBVU.js.map +1 -0
- package/dist/chunk-A7LWVKMZ.js +209 -0
- package/dist/chunk-A7LWVKMZ.js.map +1 -0
- package/dist/chunk-ERCKCRE4.js +179 -0
- package/dist/chunk-ERCKCRE4.js.map +1 -0
- package/dist/chunk-HRGVXWMH.js +17 -0
- package/dist/chunk-HRGVXWMH.js.map +1 -0
- package/dist/chunk-MH5OGHNU.js +29 -0
- package/dist/chunk-MH5OGHNU.js.map +1 -0
- package/dist/chunk-QSR5PAZ3.js +207 -0
- package/dist/chunk-QSR5PAZ3.js.map +1 -0
- package/dist/mockData.cjs +866 -0
- package/dist/mockData.cjs.map +1 -0
- package/dist/mockData.d.cts +558 -0
- package/dist/mockData.d.ts +558 -0
- package/dist/mockData.js +45 -0
- package/dist/mockData.js.map +1 -0
- package/dist/requestHandlers/deploymentHandlers.cjs +955 -0
- package/dist/requestHandlers/deploymentHandlers.cjs.map +1 -0
- package/dist/requestHandlers/deploymentHandlers.d.cts +5 -0
- package/dist/requestHandlers/deploymentHandlers.d.ts +5 -0
- package/dist/requestHandlers/deploymentHandlers.js +8 -0
- package/dist/requestHandlers/deploymentHandlers.js.map +1 -0
- package/dist/requestHandlers/deviceHandlers.cjs +1044 -0
- package/dist/requestHandlers/deviceHandlers.cjs.map +1 -0
- package/dist/requestHandlers/deviceHandlers.d.cts +20 -0
- package/dist/requestHandlers/deviceHandlers.d.ts +20 -0
- package/dist/requestHandlers/deviceHandlers.js +12 -0
- package/dist/requestHandlers/deviceHandlers.js.map +1 -0
- package/dist/requestHandlers/monitorHandlers.cjs +775 -0
- package/dist/requestHandlers/monitorHandlers.cjs.map +1 -0
- package/dist/requestHandlers/monitorHandlers.d.cts +5 -0
- package/dist/requestHandlers/monitorHandlers.d.ts +5 -0
- package/dist/requestHandlers/monitorHandlers.js +8 -0
- package/dist/requestHandlers/monitorHandlers.js.map +1 -0
- package/dist/requestHandlers/organizationHandlers.cjs +968 -0
- package/dist/requestHandlers/organizationHandlers.cjs.map +1 -0
- package/dist/requestHandlers/organizationHandlers.d.cts +5 -0
- package/dist/requestHandlers/organizationHandlers.d.ts +5 -0
- package/dist/requestHandlers/organizationHandlers.js +8 -0
- package/dist/requestHandlers/organizationHandlers.js.map +1 -0
- package/dist/requestHandlers/releaseHandlers.cjs +809 -0
- package/dist/requestHandlers/releaseHandlers.cjs.map +1 -0
- package/dist/requestHandlers/releaseHandlers.d.cts +5 -0
- package/dist/requestHandlers/releaseHandlers.d.ts +5 -0
- package/dist/requestHandlers/releaseHandlers.js +8 -0
- package/dist/requestHandlers/releaseHandlers.js.map +1 -0
- package/dist/requestHandlers/requestHandlers.cjs +1712 -0
- package/dist/requestHandlers/requestHandlers.cjs.map +1 -0
- package/dist/requestHandlers/requestHandlers.d.cts +5 -0
- package/dist/requestHandlers/requestHandlers.d.ts +5 -0
- package/dist/requestHandlers/requestHandlers.js +35 -0
- package/dist/requestHandlers/requestHandlers.js.map +1 -0
- package/dist/requestHandlers/userHandlers.cjs +925 -0
- package/dist/requestHandlers/userHandlers.cjs.map +1 -0
- package/dist/requestHandlers/userHandlers.d.cts +5 -0
- package/dist/requestHandlers/userHandlers.d.ts +5 -0
- package/dist/requestHandlers/userHandlers.js +8 -0
- package/dist/requestHandlers/userHandlers.js.map +1 -0
- package/dist/setupTests.cjs +905 -0
- package/dist/setupTests.cjs.map +1 -0
- package/dist/setupTests.d.cts +75 -0
- package/dist/setupTests.d.ts +75 -0
- package/dist/setupTests.js +119 -0
- package/dist/setupTests.js.map +1 -0
- package/dist/theme/light.cjs +41 -0
- package/dist/theme/light.cjs.map +1 -0
- package/dist/theme/light.d.cts +12 -0
- package/dist/theme/light.d.ts +12 -0
- package/dist/theme/light.js +7 -0
- package/dist/theme/light.js.map +1 -0
- package/dist/utils.cjs +41 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +3 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.js +16 -0
- package/dist/utils.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {
|
|
2
|
+
mockApiResponses
|
|
3
|
+
} from "./chunk-5MREOBVU.js";
|
|
4
|
+
|
|
5
|
+
// src/requestHandlers/monitorHandlers.ts
|
|
6
|
+
import { alertChannels, headerNames, monitorApiUrlv1 } from "@northern.tech/utils/constants";
|
|
7
|
+
import { HttpResponse, http } from "msw";
|
|
8
|
+
var monitorHandlers = [
|
|
9
|
+
http.get(`${monitorApiUrlv1}/devices/:id/alerts`, () => new HttpResponse(JSON.stringify([]), { headers: { [headerNames.total]: 1 } })),
|
|
10
|
+
http.get(`${monitorApiUrlv1}/devices/:id/alerts/latest`, () => HttpResponse.json([])),
|
|
11
|
+
http.get(`${monitorApiUrlv1}/devices/:id/config`, ({ params: { id } }) => {
|
|
12
|
+
if (id === mockApiResponses.devices.byId.a1.id) {
|
|
13
|
+
return HttpResponse.json([{ something: "here" }]);
|
|
14
|
+
}
|
|
15
|
+
return HttpResponse.json([]);
|
|
16
|
+
}),
|
|
17
|
+
http.put(`${monitorApiUrlv1}/settings/global/channel/alerts/:channel/status`, async ({ params: { channel }, request }) => {
|
|
18
|
+
const { enabled } = await request.json();
|
|
19
|
+
if (Object.keys(alertChannels).includes(channel) && enabled !== void 0) {
|
|
20
|
+
return new HttpResponse(null, { status: 200 });
|
|
21
|
+
}
|
|
22
|
+
return new HttpResponse(null, { status: 590 });
|
|
23
|
+
})
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
export {
|
|
27
|
+
monitorHandlers
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=chunk-MH5OGHNU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/requestHandlers/monitorHandlers.ts"],"sourcesContent":["// Copyright 2021 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//@ts-nocheck\nimport { alertChannels, headerNames, monitorApiUrlv1 } from '@northern.tech/utils/constants';\nimport { HttpResponse, http } from 'msw';\n\nimport { mockApiResponses } from '../mockData';\n\nexport const monitorHandlers = [\n http.get(`${monitorApiUrlv1}/devices/:id/alerts`, () => new HttpResponse(JSON.stringify([]), { headers: { [headerNames.total]: 1 } })),\n http.get(`${monitorApiUrlv1}/devices/:id/alerts/latest`, () => HttpResponse.json([])),\n http.get(`${monitorApiUrlv1}/devices/:id/config`, ({ params: { id } }) => {\n if (id === mockApiResponses.devices.byId.a1.id) {\n return HttpResponse.json([{ something: 'here' }]);\n }\n return HttpResponse.json([]);\n }),\n http.put(`${monitorApiUrlv1}/settings/global/channel/alerts/:channel/status`, async ({ params: { channel }, request }) => {\n const { enabled } = await request.json();\n if (Object.keys(alertChannels).includes(channel) && enabled !== undefined) {\n return new HttpResponse(null, { status: 200 });\n }\n return new HttpResponse(null, { status: 590 });\n })\n];\n"],"mappings":";;;;;AAcA,SAAS,eAAe,aAAa,uBAAuB;AAC5D,SAAS,cAAc,YAAY;AAI5B,IAAM,kBAAkB;AAAA,EAC7B,KAAK,IAAI,GAAG,eAAe,uBAAuB,MAAM,IAAI,aAAa,KAAK,UAAU,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,YAAY,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;AAAA,EACrI,KAAK,IAAI,GAAG,eAAe,8BAA8B,MAAM,aAAa,KAAK,CAAC,CAAC,CAAC;AAAA,EACpF,KAAK,IAAI,GAAG,eAAe,uBAAuB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM;AACxE,QAAI,OAAO,iBAAiB,QAAQ,KAAK,GAAG,IAAI;AAC9C,aAAO,aAAa,KAAK,CAAC,EAAE,WAAW,OAAO,CAAC,CAAC;AAAA,IAClD;AACA,WAAO,aAAa,KAAK,CAAC,CAAC;AAAA,EAC7B,CAAC;AAAA,EACD,KAAK,IAAI,GAAG,eAAe,mDAAmD,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,MAAM;AACxH,UAAM,EAAE,QAAQ,IAAI,MAAM,QAAQ,KAAK;AACvC,QAAI,OAAO,KAAK,aAAa,EAAE,SAAS,OAAO,KAAK,YAAY,QAAW;AACzE,aAAO,IAAI,aAAa,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC/C;AACA,WAAO,IAAI,aAAa,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC/C,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import {
|
|
2
|
+
mockApiResponses,
|
|
3
|
+
webhookEvents
|
|
4
|
+
} from "./chunk-5MREOBVU.js";
|
|
5
|
+
|
|
6
|
+
// src/requestHandlers/organizationHandlers.ts
|
|
7
|
+
import { auditLogsApiUrl, headerNames, iotManagerBaseURL, ssoIdpApiUrlv1, tenantadmApiUrlv1, tenantadmApiUrlv2 } from "@northern.tech/utils/constants";
|
|
8
|
+
import { HttpResponse, http } from "msw";
|
|
9
|
+
var PLANS = {
|
|
10
|
+
os: { id: "os", name: "Basic" },
|
|
11
|
+
professional: { id: "professional", name: "Professional" },
|
|
12
|
+
enterprise: { id: "enterprise", name: "Enterprise" }
|
|
13
|
+
};
|
|
14
|
+
var releasesSample = {
|
|
15
|
+
lts: ["3.3"],
|
|
16
|
+
releases: {
|
|
17
|
+
"3.2": {
|
|
18
|
+
"3.2.1": {
|
|
19
|
+
release_date: "2022-02-02",
|
|
20
|
+
release: "3.2.1",
|
|
21
|
+
repos: [
|
|
22
|
+
{ name: "integration", version: "1.2.3" },
|
|
23
|
+
{ name: "mender", version: "3.2.1" },
|
|
24
|
+
{ name: "mender-artifact", version: "1.3.7" },
|
|
25
|
+
{ name: "service", version: "3.0.0" },
|
|
26
|
+
{ name: "other-service", version: "1.1.0" }
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
"3.2.0": {
|
|
30
|
+
release_date: "2022-01-24",
|
|
31
|
+
release: "3.2.0",
|
|
32
|
+
repos: [
|
|
33
|
+
{ name: "service", version: "3.0.0" },
|
|
34
|
+
{ name: "another-service", version: "4.1.0" }
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"2.7": {
|
|
39
|
+
"2.7.2": {
|
|
40
|
+
release_date: "2021-11-04",
|
|
41
|
+
release: "2.7.2",
|
|
42
|
+
repos: [
|
|
43
|
+
{ name: "service", version: "1.1.0" },
|
|
44
|
+
{ name: "more-service", version: "1.0.2" }
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"1.0": {
|
|
49
|
+
supported_until: "2018-02",
|
|
50
|
+
"1.0.1": {
|
|
51
|
+
release_date: "2017-04-03",
|
|
52
|
+
release: "1.0.1",
|
|
53
|
+
repos: [{ name: "service", version: "1.0.1" }]
|
|
54
|
+
},
|
|
55
|
+
"1.0.0": {
|
|
56
|
+
release_date: "2017-02-16",
|
|
57
|
+
release: "1.0.0",
|
|
58
|
+
repos: [{ name: "mono-service", version: "1.0.0" }]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
saas: [
|
|
63
|
+
{ tag: "saas-v2022.03.10", date: "2022-03-09" },
|
|
64
|
+
{ tag: "saas-v2020.09.25", date: "2020-09-24" },
|
|
65
|
+
{ tag: "saas-v2020.07.09", date: "2020-07-09" }
|
|
66
|
+
]
|
|
67
|
+
};
|
|
68
|
+
var tagsSample = [{ name: "saas-v2023.05.02", more: "here" }];
|
|
69
|
+
var signupHandler = async ({ request }) => {
|
|
70
|
+
const signup = await request.json();
|
|
71
|
+
if (["email", "organization", "plan", "tos"].every((item) => !!signup[item])) {
|
|
72
|
+
return HttpResponse.text("test");
|
|
73
|
+
}
|
|
74
|
+
return new HttpResponse(null, { status: 400 });
|
|
75
|
+
};
|
|
76
|
+
var organizationHandlers = [
|
|
77
|
+
http.get("/tags.json", () => HttpResponse.json(tagsSample)),
|
|
78
|
+
http.get("/versions.json", () => HttpResponse.json(releasesSample)),
|
|
79
|
+
http.get(`${tenantadmApiUrlv1}/user/tenant`, () => HttpResponse.json(mockApiResponses.organization.organization)),
|
|
80
|
+
http.put(`${tenantadmApiUrlv2}/tenants/:tenantId/child`, () => new HttpResponse(null, { status: 200 })),
|
|
81
|
+
http.post(`${tenantadmApiUrlv2}/tenants/:tenantId/cancel`, () => new HttpResponse(null, { status: 200 })),
|
|
82
|
+
http.post(`${tenantadmApiUrlv2}/tenants/trial`, signupHandler),
|
|
83
|
+
http.post(`${tenantadmApiUrlv2}/tenants`, () => new HttpResponse(null, { status: 200 })),
|
|
84
|
+
http.post(`https://hosted.mender.io${tenantadmApiUrlv2}/tenants/trial`, signupHandler),
|
|
85
|
+
http.get(`${tenantadmApiUrlv2}/tenants`, () => new HttpResponse([])),
|
|
86
|
+
http.get(`${tenantadmApiUrlv2}/billing`, () => HttpResponse.json({ card: { last4: "7890", exp_month: 1, exp_year: 2024, brand: "testCorp" } })),
|
|
87
|
+
http.post(`${tenantadmApiUrlv2}/billing/card`, () => HttpResponse.json({ intent_id: mockApiResponses.organization.intentId, secret: "testSecret" })),
|
|
88
|
+
http.post(
|
|
89
|
+
`${tenantadmApiUrlv2}/billing/card/:intentId/confirm`,
|
|
90
|
+
({ params: { intentId } }) => new HttpResponse(null, { status: intentId == mockApiResponses.organization.intentId ? 200 : 540 })
|
|
91
|
+
),
|
|
92
|
+
http.post(`${tenantadmApiUrlv2}/tenants/:tenantId/upgrade/:status`, async ({ params: { status, tenantId }, request }) => {
|
|
93
|
+
if (tenantId != mockApiResponses.organization.organization.id || !["cancel", "complete", "start"].includes(status)) {
|
|
94
|
+
return new HttpResponse(null, { status: 541 });
|
|
95
|
+
}
|
|
96
|
+
if (status === "start") {
|
|
97
|
+
return HttpResponse.json({ secret: "testSecret" });
|
|
98
|
+
}
|
|
99
|
+
let plan;
|
|
100
|
+
try {
|
|
101
|
+
const body = await request.json();
|
|
102
|
+
plan = body.plan;
|
|
103
|
+
} catch {
|
|
104
|
+
}
|
|
105
|
+
if (plan && !Object.keys(PLANS).includes(plan)) {
|
|
106
|
+
return new HttpResponse(null, { status: 542 });
|
|
107
|
+
}
|
|
108
|
+
return new HttpResponse(null, { status: 200 });
|
|
109
|
+
}),
|
|
110
|
+
http.post(`${tenantadmApiUrlv2}/tenants/:tenantId/plan`, async ({ params: { tenantId }, request }) => {
|
|
111
|
+
const body = await request.json();
|
|
112
|
+
const expectedKeys = ["current_plan", "requested_plan", "current_addons", "requested_addons", "user_message"];
|
|
113
|
+
if (tenantId != mockApiResponses.organization.organization.id || !Object.keys(body).every((key) => expectedKeys.includes(key))) {
|
|
114
|
+
return new HttpResponse(null, { status: 544 });
|
|
115
|
+
}
|
|
116
|
+
if (body.requested_plan && !Object.values(PLANS).some((item) => item.name === body.requested_plan)) {
|
|
117
|
+
return new HttpResponse(null, { status: 545 });
|
|
118
|
+
}
|
|
119
|
+
return new HttpResponse(null, { status: 200 });
|
|
120
|
+
}),
|
|
121
|
+
http.post(`${tenantadmApiUrlv2}/contact/support`, async ({ request }) => {
|
|
122
|
+
const { subject, body } = await request.json();
|
|
123
|
+
if (!(subject && body)) {
|
|
124
|
+
return new HttpResponse(null, { status: 543 });
|
|
125
|
+
}
|
|
126
|
+
return new HttpResponse(null, { status: 200 });
|
|
127
|
+
}),
|
|
128
|
+
http.get(`${auditLogsApiUrl}/logs`, ({ request }) => {
|
|
129
|
+
const { searchParams } = new URL(request.url);
|
|
130
|
+
const perPage = Number(searchParams.get("per_page"));
|
|
131
|
+
if (perPage === 500) {
|
|
132
|
+
return HttpResponse.json([
|
|
133
|
+
{ meta: mockApiResponses.organization.auditlog.events[2].meta, time: mockApiResponses.organization.auditlog.events[1].time, action: "close_terminal" }
|
|
134
|
+
]);
|
|
135
|
+
}
|
|
136
|
+
return new HttpResponse(JSON.stringify(mockApiResponses.organization.auditlog.events), {
|
|
137
|
+
headers: { [headerNames.total]: mockApiResponses.organization.auditlog.events.length }
|
|
138
|
+
});
|
|
139
|
+
}),
|
|
140
|
+
http.get(
|
|
141
|
+
`${auditLogsApiUrl}/logs/export`,
|
|
142
|
+
() => HttpResponse.text(`action,actor.id,actor.type,actor.email,actor.identity_data,object.id,object.type,object.user.email,object.deployment.name,object.deployment.artifact_name,change
|
|
143
|
+
update,5c56c2ed-2a9a-5de9-bb86-cf38b3d4a5e1,user,test@example.coim,,067f23a9-76a5-5585-b119-32402a120978,user,test@example.com,,,"Update user 067f23a9-76a5-5585-b119-32402a120978 (test@example.com).
|
|
144
|
+
Diff:
|
|
145
|
+
--- Original
|
|
146
|
+
+++ Current
|
|
147
|
+
@@ -9 +9,2 @@
|
|
148
|
+
- ""RBAC_ROLE_OBSERVER""
|
|
149
|
+
+ ""RBAC_ROLE_OBSERVER"",
|
|
150
|
+
+ ""RBAC_ROLE_PERMIT_ALL""
|
|
151
|
+
"
|
|
152
|
+
`)
|
|
153
|
+
),
|
|
154
|
+
http.get(
|
|
155
|
+
`${iotManagerBaseURL}/integrations`,
|
|
156
|
+
() => HttpResponse.json([
|
|
157
|
+
{ connection_string: "something_else", id: 1, provider: "iot-hub" },
|
|
158
|
+
{ id: 2, provider: "iot-core", something: "new" }
|
|
159
|
+
])
|
|
160
|
+
),
|
|
161
|
+
http.post(`${iotManagerBaseURL}/integrations`, () => HttpResponse.json([{ connection_string: "something_else", provider: "iot-hub" }])),
|
|
162
|
+
http.put(`${iotManagerBaseURL}/integrations/:integrationId`, ({ params: { integrationId } }) => {
|
|
163
|
+
if (!integrationId) {
|
|
164
|
+
return new HttpResponse(null, { status: 547 });
|
|
165
|
+
}
|
|
166
|
+
return new HttpResponse(null, { status: 200 });
|
|
167
|
+
}),
|
|
168
|
+
http.put(`${iotManagerBaseURL}/integrations/:integrationId/credentials`, ({ params: { integrationId } }) => {
|
|
169
|
+
if (!integrationId) {
|
|
170
|
+
return new HttpResponse(null, { status: 548 });
|
|
171
|
+
}
|
|
172
|
+
return new HttpResponse(null, { status: 200 });
|
|
173
|
+
}),
|
|
174
|
+
http.delete(`${iotManagerBaseURL}/integrations/:integrationId`, ({ params: { integrationId } }) => {
|
|
175
|
+
if (!integrationId) {
|
|
176
|
+
return new HttpResponse(null, { status: 549 });
|
|
177
|
+
}
|
|
178
|
+
return new HttpResponse(null, { status: 200 });
|
|
179
|
+
}),
|
|
180
|
+
http.get(`${iotManagerBaseURL}/events`, ({ request }) => {
|
|
181
|
+
const { searchParams } = new URL(request.url);
|
|
182
|
+
const page = Number(searchParams.get("page"));
|
|
183
|
+
const perPage = Number(searchParams.get("per_page"));
|
|
184
|
+
return HttpResponse.json(webhookEvents.slice(page - 1, page * perPage));
|
|
185
|
+
}),
|
|
186
|
+
http.get(
|
|
187
|
+
ssoIdpApiUrlv1,
|
|
188
|
+
() => HttpResponse.json([
|
|
189
|
+
{ id: "1", issuer: "https://samltest.id/saml/idp", valid_until: "2038-08-24T21:14:09Z" },
|
|
190
|
+
{ id: "2", issuer: "https://samltest2.id/saml/idp", valid_until: "2030-10-24T21:14:09Z" }
|
|
191
|
+
])
|
|
192
|
+
),
|
|
193
|
+
http.post(ssoIdpApiUrlv1, () => new HttpResponse(null, { status: 200 })),
|
|
194
|
+
http.get(`${ssoIdpApiUrlv1}/:configId`, ({ params: { configId } }) => {
|
|
195
|
+
if (!configId) {
|
|
196
|
+
return new HttpResponse(null, { status: 550 });
|
|
197
|
+
}
|
|
198
|
+
return HttpResponse.json({ email: "user@acme.com", password: "mypass1234", login: { google: "bob@gmail.com" }, config: "<div>not quite right</div>" });
|
|
199
|
+
}),
|
|
200
|
+
http.put(`${ssoIdpApiUrlv1}/:configId`, ({ params: { configId } }) => new HttpResponse(null, { status: configId ? 200 : 551 })),
|
|
201
|
+
http.delete(`${ssoIdpApiUrlv1}/:configId`, ({ params: { configId } }) => new HttpResponse(null, { status: configId ? 200 : 552 }))
|
|
202
|
+
];
|
|
203
|
+
|
|
204
|
+
export {
|
|
205
|
+
organizationHandlers
|
|
206
|
+
};
|
|
207
|
+
//# sourceMappingURL=chunk-QSR5PAZ3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/requestHandlers/organizationHandlers.ts"],"sourcesContent":["// Copyright 2020 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//@ts-nocheck\nimport { auditLogsApiUrl, headerNames, iotManagerBaseURL, ssoIdpApiUrlv1, tenantadmApiUrlv1, tenantadmApiUrlv2 } from '@northern.tech/utils/constants';\nimport { HttpResponse, http } from 'msw';\n\nimport { mockApiResponses, webhookEvents } from '../mockData';\n\nconst PLANS = {\n os: { id: 'os', name: 'Basic' },\n professional: { id: 'professional', name: 'Professional' },\n enterprise: { id: 'enterprise', name: 'Enterprise' }\n};\n\nconst releasesSample = {\n lts: ['3.3'],\n releases: {\n '3.2': {\n '3.2.1': {\n release_date: '2022-02-02',\n release: '3.2.1',\n repos: [\n { name: 'integration', version: '1.2.3' },\n { name: 'mender', version: '3.2.1' },\n { name: 'mender-artifact', version: '1.3.7' },\n { name: 'service', version: '3.0.0' },\n { name: 'other-service', version: '1.1.0' }\n ]\n },\n '3.2.0': {\n release_date: '2022-01-24',\n release: '3.2.0',\n repos: [\n { name: 'service', version: '3.0.0' },\n { name: 'another-service', version: '4.1.0' }\n ]\n }\n },\n '2.7': {\n '2.7.2': {\n release_date: '2021-11-04',\n release: '2.7.2',\n repos: [\n { name: 'service', version: '1.1.0' },\n { name: 'more-service', version: '1.0.2' }\n ]\n }\n },\n '1.0': {\n supported_until: '2018-02',\n '1.0.1': {\n release_date: '2017-04-03',\n release: '1.0.1',\n repos: [{ name: 'service', version: '1.0.1' }]\n },\n '1.0.0': {\n release_date: '2017-02-16',\n release: '1.0.0',\n repos: [{ name: 'mono-service', version: '1.0.0' }]\n }\n }\n },\n saas: [\n { tag: 'saas-v2022.03.10', date: '2022-03-09' },\n { tag: 'saas-v2020.09.25', date: '2020-09-24' },\n { tag: 'saas-v2020.07.09', date: '2020-07-09' }\n ]\n};\n\nconst tagsSample = [{ name: 'saas-v2023.05.02', more: 'here' }];\n\nconst signupHandler = async ({ request }) => {\n const signup = await request.json();\n if (['email', 'organization', 'plan', 'tos'].every(item => !!signup[item])) {\n return HttpResponse.text('test');\n }\n return new HttpResponse(null, { status: 400 });\n};\n\nexport const organizationHandlers = [\n http.get('/tags.json', () => HttpResponse.json(tagsSample)),\n http.get('/versions.json', () => HttpResponse.json(releasesSample)),\n http.get(`${tenantadmApiUrlv1}/user/tenant`, () => HttpResponse.json(mockApiResponses.organization.organization)),\n http.put(`${tenantadmApiUrlv2}/tenants/:tenantId/child`, () => new HttpResponse(null, { status: 200 })),\n http.post(`${tenantadmApiUrlv2}/tenants/:tenantId/cancel`, () => new HttpResponse(null, { status: 200 })),\n http.post(`${tenantadmApiUrlv2}/tenants/trial`, signupHandler),\n http.post(`${tenantadmApiUrlv2}/tenants`, () => new HttpResponse(null, { status: 200 })),\n http.post(`https://hosted.mender.io${tenantadmApiUrlv2}/tenants/trial`, signupHandler),\n http.get(`${tenantadmApiUrlv2}/tenants`, () => new HttpResponse([])),\n http.get(`${tenantadmApiUrlv2}/billing`, () => HttpResponse.json({ card: { last4: '7890', exp_month: 1, exp_year: 2024, brand: 'testCorp' } })),\n http.post(`${tenantadmApiUrlv2}/billing/card`, () => HttpResponse.json({ intent_id: mockApiResponses.organization.intentId, secret: 'testSecret' })),\n http.post(\n `${tenantadmApiUrlv2}/billing/card/:intentId/confirm`,\n ({ params: { intentId } }) => new HttpResponse(null, { status: intentId == mockApiResponses.organization.intentId ? 200 : 540 })\n ),\n http.post(`${tenantadmApiUrlv2}/tenants/:tenantId/upgrade/:status`, async ({ params: { status, tenantId }, request }) => {\n if (tenantId != mockApiResponses.organization.organization.id || !['cancel', 'complete', 'start'].includes(status)) {\n return new HttpResponse(null, { status: 541 });\n }\n if (status === 'start') {\n return HttpResponse.json({ secret: 'testSecret' });\n }\n let plan;\n try {\n const body = await request.json();\n plan = body.plan;\n } catch {\n // no completion;\n }\n if (plan && !Object.keys(PLANS).includes(plan)) {\n return new HttpResponse(null, { status: 542 });\n }\n return new HttpResponse(null, { status: 200 });\n }),\n http.post(`${tenantadmApiUrlv2}/tenants/:tenantId/plan`, async ({ params: { tenantId }, request }) => {\n const body = await request.json();\n const expectedKeys = ['current_plan', 'requested_plan', 'current_addons', 'requested_addons', 'user_message'];\n if (tenantId != mockApiResponses.organization.organization.id || !Object.keys(body).every(key => expectedKeys.includes(key))) {\n return new HttpResponse(null, { status: 544 });\n }\n if (body.requested_plan && !Object.values(PLANS).some(item => item.name === body.requested_plan)) {\n return new HttpResponse(null, { status: 545 });\n }\n return new HttpResponse(null, { status: 200 });\n }),\n http.post(`${tenantadmApiUrlv2}/contact/support`, async ({ request }) => {\n const { subject, body } = await request.json();\n if (!(subject && body)) {\n return new HttpResponse(null, { status: 543 });\n }\n return new HttpResponse(null, { status: 200 });\n }),\n http.get(`${auditLogsApiUrl}/logs`, ({ request }) => {\n const { searchParams } = new URL(request.url);\n const perPage = Number(searchParams.get('per_page'));\n if (perPage === 500) {\n return HttpResponse.json([\n { meta: mockApiResponses.organization.auditlog.events[2].meta, time: mockApiResponses.organization.auditlog.events[1].time, action: 'close_terminal' }\n ]);\n }\n return new HttpResponse(JSON.stringify(mockApiResponses.organization.auditlog.events), {\n headers: { [headerNames.total]: mockApiResponses.organization.auditlog.events.length }\n });\n }),\n http.get(`${auditLogsApiUrl}/logs/export`, () =>\n HttpResponse.text(`action,actor.id,actor.type,actor.email,actor.identity_data,object.id,object.type,object.user.email,object.deployment.name,object.deployment.artifact_name,change\n update,5c56c2ed-2a9a-5de9-bb86-cf38b3d4a5e1,user,test@example.coim,,067f23a9-76a5-5585-b119-32402a120978,user,test@example.com,,,\"Update user 067f23a9-76a5-5585-b119-32402a120978 (test@example.com).\n Diff:\n --- Original\n +++ Current\n @@ -9 +9,2 @@\n - \"\"RBAC_ROLE_OBSERVER\"\"\n + \"\"RBAC_ROLE_OBSERVER\"\",\n + \"\"RBAC_ROLE_PERMIT_ALL\"\"\n \"\n `)\n ),\n http.get(`${iotManagerBaseURL}/integrations`, () =>\n HttpResponse.json([\n { connection_string: 'something_else', id: 1, provider: 'iot-hub' },\n { id: 2, provider: 'iot-core', something: 'new' }\n ])\n ),\n http.post(`${iotManagerBaseURL}/integrations`, () => HttpResponse.json([{ connection_string: 'something_else', provider: 'iot-hub' }])),\n http.put(`${iotManagerBaseURL}/integrations/:integrationId`, ({ params: { integrationId } }) => {\n if (!integrationId) {\n return new HttpResponse(null, { status: 547 });\n }\n return new HttpResponse(null, { status: 200 });\n }),\n http.put(`${iotManagerBaseURL}/integrations/:integrationId/credentials`, ({ params: { integrationId } }) => {\n if (!integrationId) {\n return new HttpResponse(null, { status: 548 });\n }\n return new HttpResponse(null, { status: 200 });\n }),\n http.delete(`${iotManagerBaseURL}/integrations/:integrationId`, ({ params: { integrationId } }) => {\n if (!integrationId) {\n return new HttpResponse(null, { status: 549 });\n }\n return new HttpResponse(null, { status: 200 });\n }),\n http.get(`${iotManagerBaseURL}/events`, ({ request }) => {\n const { searchParams } = new URL(request.url);\n const page = Number(searchParams.get('page'));\n const perPage = Number(searchParams.get('per_page'));\n return HttpResponse.json(webhookEvents.slice(page - 1, page * perPage));\n }),\n http.get(ssoIdpApiUrlv1, () =>\n HttpResponse.json([\n { id: '1', issuer: 'https://samltest.id/saml/idp', valid_until: '2038-08-24T21:14:09Z' },\n { id: '2', issuer: 'https://samltest2.id/saml/idp', valid_until: '2030-10-24T21:14:09Z' }\n ])\n ),\n http.post(ssoIdpApiUrlv1, () => new HttpResponse(null, { status: 200 })),\n http.get(`${ssoIdpApiUrlv1}/:configId`, ({ params: { configId } }) => {\n if (!configId) {\n return new HttpResponse(null, { status: 550 });\n }\n return HttpResponse.json({ email: 'user@acme.com', password: 'mypass1234', login: { google: 'bob@gmail.com' }, config: '<div>not quite right</div>' });\n }),\n http.put(`${ssoIdpApiUrlv1}/:configId`, ({ params: { configId } }) => new HttpResponse(null, { status: configId ? 200 : 551 })),\n http.delete(`${ssoIdpApiUrlv1}/:configId`, ({ params: { configId } }) => new HttpResponse(null, { status: configId ? 200 : 552 }))\n];\n"],"mappings":"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","names":[]}
|