@rockcarver/frodo-lib 0.17.4 → 0.17.5
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/CHANGELOG.md +9 -1
- package/cjs/api/IdmSystemApi.js +34 -0
- package/cjs/api/IdmSystemApi.js.map +1 -0
- package/cjs/ops/IdmOps.js +36 -20
- package/cjs/ops/IdmOps.js.map +1 -1
- package/cjs/ops/IdmOps.test.js.map +1 -1
- package/cjs/ops/Saml2Ops.test.js.map +1 -1
- package/cjs/test/mocks/ForgeRockApiMockEngine.js +9 -0
- package/cjs/test/mocks/ForgeRockApiMockEngine.js.map +1 -1
- package/cjs/test/mocks/IdmConfigApi/getAllConnectorServers/openicf.json +14 -0
- package/esm/api/IdmSystemApi.mjs +17 -0
- package/esm/ops/IdmOps.mjs +16 -6
- package/esm/ops/IdmOps.test.mjs +9 -0
- package/esm/ops/Saml2Ops.test.mjs +9 -8
- package/esm/test/mocks/ForgeRockApiMockEngine.mjs +8 -0
- package/esm/test/mocks/IdmConfigApi/getAllConnectorServers/openicf.json +14 -0
- package/package.json +5 -1
- package/types/api/IdmSystemApi.d.ts +13 -0
- package/types/api/IdmSystemApi.d.ts.map +1 -0
- package/types/ops/IdmOps.d.ts +6 -0
- package/types/ops/IdmOps.d.ts.map +1 -1
- package/types/test/mocks/ForgeRockApiMockEngine.d.ts +1 -0
- package/types/test/mocks/ForgeRockApiMockEngine.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.17.5] - 2023-01-07
|
|
11
|
+
|
|
12
|
+
## [0.17.5-0] - 2023-01-07
|
|
13
|
+
|
|
10
14
|
## [0.17.4] - 2023-01-05
|
|
11
15
|
|
|
12
16
|
## [0.17.3] - 2022-12-30
|
|
@@ -903,7 +907,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
903
907
|
- Fixed problem with adding connection profiles
|
|
904
908
|
- Miscellaneous bug fixes
|
|
905
909
|
|
|
906
|
-
[Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.17.
|
|
910
|
+
[Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.17.5...HEAD
|
|
911
|
+
|
|
912
|
+
[0.17.5]: https://github.com/rockcarver/frodo-lib/compare/v0.17.5-0...v0.17.5
|
|
913
|
+
|
|
914
|
+
[0.17.5-0]: https://github.com/rockcarver/frodo-lib/compare/v0.17.4...v0.17.5-0
|
|
907
915
|
|
|
908
916
|
[0.17.4]: https://github.com/rockcarver/frodo-lib/compare/v0.17.3...v0.17.4
|
|
909
917
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.testConnectorServers = testConnectorServers;
|
|
7
|
+
var _util = _interopRequireDefault(require("util"));
|
|
8
|
+
var _BaseApi = require("./BaseApi");
|
|
9
|
+
var _ApiUtils = require("./utils/ApiUtils");
|
|
10
|
+
var state = _interopRequireWildcard(require("../shared/State"));
|
|
11
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
15
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
16
|
+
var testConnectorServersURLTemplate = '%s/openidm/system?_action=testConnectorServers';
|
|
17
|
+
/**
|
|
18
|
+
* Test connector servers
|
|
19
|
+
* @returns {Promise<TestConnectorServersInterface>} a promise that resolves to a TestConnectorServersInterface object
|
|
20
|
+
*/
|
|
21
|
+
function testConnectorServers() {
|
|
22
|
+
return _testConnectorServers.apply(this, arguments);
|
|
23
|
+
}
|
|
24
|
+
function _testConnectorServers() {
|
|
25
|
+
_testConnectorServers = _asyncToGenerator(function* () {
|
|
26
|
+
var urlString = _util.default.format(testConnectorServersURLTemplate, (0, _ApiUtils.getTenantURL)(state.getHost()));
|
|
27
|
+
var {
|
|
28
|
+
data
|
|
29
|
+
} = yield (0, _BaseApi.generateIdmApi)().post(urlString);
|
|
30
|
+
return data;
|
|
31
|
+
});
|
|
32
|
+
return _testConnectorServers.apply(this, arguments);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=IdmSystemApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdmSystemApi.js","names":["testConnectorServersURLTemplate","testConnectorServers","urlString","util","format","getTenantURL","state","getHost","data","generateIdmApi","post"],"sources":["api/IdmSystemApi.ts"],"sourcesContent":["import util from 'util';\nimport { generateIdmApi } from './BaseApi';\nimport { getTenantURL } from './utils/ApiUtils';\nimport * as state from '../shared/State';\n\nconst testConnectorServersURLTemplate =\n '%s/openidm/system?_action=testConnectorServers';\n\nexport interface ConnectorServerStatusInterface {\n name: string;\n type: string;\n ok: boolean;\n}\n\nexport interface TestConnectorServersInterface {\n openicf: ConnectorServerStatusInterface[];\n}\n\n/**\n * Test connector servers\n * @returns {Promise<TestConnectorServersInterface>} a promise that resolves to a TestConnectorServersInterface object\n */\nexport async function testConnectorServers(): Promise<TestConnectorServersInterface> {\n const urlString = util.format(\n testConnectorServersURLTemplate,\n getTenantURL(state.getHost())\n );\n const { data } = await generateIdmApi().post(urlString);\n return data as TestConnectorServersInterface;\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAAyC;AAAA;AAAA;AAAA;AAAA;AAEzC,IAAMA,+BAA+B,GACnC,gDAAgD;AAYlD;AACA;AACA;AACA;AAHA,SAIsBC,oBAAoB;EAAA;AAAA;AAAA;EAAA,0CAAnC,aAA8E;IACnF,IAAMC,SAAS,GAAGC,aAAI,CAACC,MAAM,CAC3BJ,+BAA+B,EAC/B,IAAAK,sBAAY,EAACC,KAAK,CAACC,OAAO,EAAE,CAAC,CAC9B;IACD,IAAM;MAAEC;IAAK,CAAC,SAAS,IAAAC,uBAAc,GAAE,CAACC,IAAI,CAACR,SAAS,CAAC;IACvD,OAAOM,IAAI;EACb,CAAC;EAAA;AAAA"}
|
package/cjs/ops/IdmOps.js
CHANGED
|
@@ -8,7 +8,9 @@ exports.getConfigEntitiesByType = getConfigEntitiesByType;
|
|
|
8
8
|
exports.getConfigEntity = getConfigEntity;
|
|
9
9
|
exports.putConfigEntity = putConfigEntity;
|
|
10
10
|
exports.queryAllManagedObjectsByType = queryAllManagedObjectsByType;
|
|
11
|
+
exports.testConnectorServers = testConnectorServers;
|
|
11
12
|
var _IdmConfigApi = require("../api/IdmConfigApi");
|
|
13
|
+
var _IdmSystemApi = require("../api/IdmSystemApi");
|
|
12
14
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
13
15
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
14
16
|
/**
|
|
@@ -16,35 +18,35 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
|
|
|
16
18
|
* @returns {Promise} a promise that resolves to all IDM config entities
|
|
17
19
|
*/
|
|
18
20
|
function getAllConfigEntities() {
|
|
19
|
-
return
|
|
21
|
+
return _getAllConfigEntities2.apply(this, arguments);
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
24
|
* Get IDM config entities by type
|
|
23
25
|
* @param {String} type the desired type of config entity
|
|
24
26
|
* @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type
|
|
25
27
|
*/
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
+
function _getAllConfigEntities2() {
|
|
29
|
+
_getAllConfigEntities2 = _asyncToGenerator(function* () {
|
|
28
30
|
return (0, _IdmConfigApi.getAllConfigEntities)();
|
|
29
31
|
});
|
|
30
|
-
return
|
|
32
|
+
return _getAllConfigEntities2.apply(this, arguments);
|
|
31
33
|
}
|
|
32
34
|
function getConfigEntitiesByType(_x) {
|
|
33
|
-
return
|
|
35
|
+
return _getConfigEntitiesByType2.apply(this, arguments);
|
|
34
36
|
}
|
|
35
37
|
/**
|
|
36
38
|
* Get an IDM config entity
|
|
37
39
|
* @param {string} entityId the desired config entity
|
|
38
40
|
* @returns {Promise<unknown>} a promise that resolves to an IDM config entity
|
|
39
41
|
*/
|
|
40
|
-
function
|
|
41
|
-
|
|
42
|
+
function _getConfigEntitiesByType2() {
|
|
43
|
+
_getConfigEntitiesByType2 = _asyncToGenerator(function* (type) {
|
|
42
44
|
return (0, _IdmConfigApi.getConfigEntitiesByType)(type);
|
|
43
45
|
});
|
|
44
|
-
return
|
|
46
|
+
return _getConfigEntitiesByType2.apply(this, arguments);
|
|
45
47
|
}
|
|
46
48
|
function getConfigEntity(_x2) {
|
|
47
|
-
return
|
|
49
|
+
return _getConfigEntity2.apply(this, arguments);
|
|
48
50
|
}
|
|
49
51
|
/**
|
|
50
52
|
* Put IDM config entity
|
|
@@ -52,14 +54,14 @@ function getConfigEntity(_x2) {
|
|
|
52
54
|
* @param {string} entityData config entity object
|
|
53
55
|
* @returns {Promise<unknown>} a promise that resolves to an IDM config entity
|
|
54
56
|
*/
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
+
function _getConfigEntity2() {
|
|
58
|
+
_getConfigEntity2 = _asyncToGenerator(function* (entityId) {
|
|
57
59
|
return (0, _IdmConfigApi.getConfigEntity)(entityId);
|
|
58
60
|
});
|
|
59
|
-
return
|
|
61
|
+
return _getConfigEntity2.apply(this, arguments);
|
|
60
62
|
}
|
|
61
63
|
function putConfigEntity(_x3, _x4) {
|
|
62
|
-
return
|
|
64
|
+
return _putConfigEntity2.apply(this, arguments);
|
|
63
65
|
}
|
|
64
66
|
/**
|
|
65
67
|
* Query managed objects
|
|
@@ -68,19 +70,33 @@ function putConfigEntity(_x3, _x4) {
|
|
|
68
70
|
* @param {String} pageCookie paged results cookie
|
|
69
71
|
* @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type
|
|
70
72
|
*/
|
|
71
|
-
function
|
|
72
|
-
|
|
73
|
+
function _putConfigEntity2() {
|
|
74
|
+
_putConfigEntity2 = _asyncToGenerator(function* (entityId, entityData) {
|
|
73
75
|
return (0, _IdmConfigApi.putConfigEntity)(entityId, entityData);
|
|
74
76
|
});
|
|
75
|
-
return
|
|
77
|
+
return _putConfigEntity2.apply(this, arguments);
|
|
76
78
|
}
|
|
77
79
|
function queryAllManagedObjectsByType(_x5, _x6, _x7) {
|
|
78
|
-
return
|
|
80
|
+
return _queryAllManagedObjectsByType2.apply(this, arguments);
|
|
79
81
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Test connector servers
|
|
84
|
+
* @returns {Promise<ConnectorServerStatusInterface[]>} a promise that resolves to an array of ConnectorServerStatusInterface objects
|
|
85
|
+
*/
|
|
86
|
+
function _queryAllManagedObjectsByType2() {
|
|
87
|
+
_queryAllManagedObjectsByType2 = _asyncToGenerator(function* (type, fields, pageCookie) {
|
|
82
88
|
return (0, _IdmConfigApi.queryAllManagedObjectsByType)(type, fields, pageCookie);
|
|
83
89
|
});
|
|
84
|
-
return
|
|
90
|
+
return _queryAllManagedObjectsByType2.apply(this, arguments);
|
|
91
|
+
}
|
|
92
|
+
function testConnectorServers() {
|
|
93
|
+
return _testConnectorServers2.apply(this, arguments);
|
|
94
|
+
}
|
|
95
|
+
function _testConnectorServers2() {
|
|
96
|
+
_testConnectorServers2 = _asyncToGenerator(function* () {
|
|
97
|
+
var response = yield (0, _IdmSystemApi.testConnectorServers)();
|
|
98
|
+
return response.openicf;
|
|
99
|
+
});
|
|
100
|
+
return _testConnectorServers2.apply(this, arguments);
|
|
85
101
|
}
|
|
86
102
|
//# sourceMappingURL=IdmOps.js.map
|
package/cjs/ops/IdmOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdmOps.js","names":["getAllConfigEntities","
|
|
1
|
+
{"version":3,"file":"IdmOps.js","names":["getAllConfigEntities","_getAllConfigEntities","getConfigEntitiesByType","type","_getConfigEntitiesByType","getConfigEntity","entityId","_getConfigEntity","putConfigEntity","entityData","_putConfigEntity","queryAllManagedObjectsByType","fields","pageCookie","_queryAllManagedObjectsByType","testConnectorServers","response","_testConnectorServers","openicf"],"sources":["ops/IdmOps.ts"],"sourcesContent":["import {\n getAllConfigEntities as _getAllConfigEntities,\n getConfigEntity as _getConfigEntity,\n putConfigEntity as _putConfigEntity,\n getConfigEntitiesByType as _getConfigEntitiesByType,\n queryAllManagedObjectsByType as _queryAllManagedObjectsByType,\n} from '../api/IdmConfigApi';\nimport {\n testConnectorServers as _testConnectorServers,\n ConnectorServerStatusInterface,\n} from '../api/IdmSystemApi';\n\n/**\n * Get all IDM config entities\n * @returns {Promise} a promise that resolves to all IDM config entities\n */\nexport async function getAllConfigEntities() {\n return _getAllConfigEntities();\n}\n\n/**\n * Get IDM config entities by type\n * @param {String} type the desired type of config entity\n * @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type\n */\nexport async function getConfigEntitiesByType(type) {\n return _getConfigEntitiesByType(type);\n}\n\n/**\n * Get an IDM config entity\n * @param {string} entityId the desired config entity\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function getConfigEntity(entityId) {\n return _getConfigEntity(entityId);\n}\n\n/**\n * Put IDM config entity\n * @param {string} entityId config entity id\n * @param {string} entityData config entity object\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function putConfigEntity(\n entityId: string,\n entityData: string | object\n) {\n return _putConfigEntity(entityId, entityData);\n}\n\n/**\n * Query managed objects\n * @param {String} type managed object type\n * @param {[String]} fields fields to retrieve\n * @param {String} pageCookie paged results cookie\n * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type\n */\nexport async function queryAllManagedObjectsByType(\n type,\n fields,\n pageCookie\n): Promise<{\n result: unknown[];\n resultCount: number;\n pagedResultsCookie: string;\n totalPagedResultsPolicy: string;\n totalPagedResults: number;\n remainingPagedResults: number;\n}> {\n return _queryAllManagedObjectsByType(type, fields, pageCookie);\n}\n\n/**\n * Test connector servers\n * @returns {Promise<ConnectorServerStatusInterface[]>} a promise that resolves to an array of ConnectorServerStatusInterface objects\n */\nexport async function testConnectorServers(): Promise<\n ConnectorServerStatusInterface[]\n> {\n const response = await _testConnectorServers();\n return response.openicf;\n}\n"],"mappings":";;;;;;;;;;;AAAA;AAOA;AAG6B;AAAA;AAE7B;AACA;AACA;AACA;AAHA,SAIsBA,oBAAoB;EAAA;AAAA;AAI1C;AACA;AACA;AACA;AACA;AAJA;EAAA,2CAJO,aAAsC;IAC3C,OAAO,IAAAC,kCAAqB,GAAE;EAChC,CAAC;EAAA;AAAA;AAAA,SAOqBC,uBAAuB;EAAA;AAAA;AAI7C;AACA;AACA;AACA;AACA;AAJA;EAAA,8CAJO,WAAuCC,IAAI,EAAE;IAClD,OAAO,IAAAC,qCAAwB,EAACD,IAAI,CAAC;EACvC,CAAC;EAAA;AAAA;AAAA,SAOqBE,eAAe;EAAA;AAAA;AAIrC;AACA;AACA;AACA;AACA;AACA;AALA;EAAA,sCAJO,WAA+BC,QAAQ,EAAE;IAC9C,OAAO,IAAAC,6BAAgB,EAACD,QAAQ,CAAC;EACnC,CAAC;EAAA;AAAA;AAAA,SAQqBE,eAAe;EAAA;AAAA;AAOrC;AACA;AACA;AACA;AACA;AACA;AACA;AANA;EAAA,sCAPO,WACLF,QAAgB,EAChBG,UAA2B,EAC3B;IACA,OAAO,IAAAC,6BAAgB,EAACJ,QAAQ,EAAEG,UAAU,CAAC;EAC/C,CAAC;EAAA;AAAA;AAAA,SASqBE,4BAA4B;EAAA;AAAA;AAelD;AACA;AACA;AACA;AAHA;EAAA,mDAfO,WACLR,IAAI,EACJS,MAAM,EACNC,UAAU,EAQT;IACD,OAAO,IAAAC,0CAA6B,EAACX,IAAI,EAAES,MAAM,EAAEC,UAAU,CAAC;EAChE,CAAC;EAAA;AAAA;AAAA,SAMqBE,oBAAoB;EAAA;AAAA;AAAA;EAAA,2CAAnC,aAEL;IACA,IAAMC,QAAQ,SAAS,IAAAC,kCAAqB,GAAE;IAC9C,OAAOD,QAAQ,CAACE,OAAO;EACzB,CAAC;EAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdmOps.test.js","names":["autoSetupPolly","stageConfigEntity","configEntity","create","IdmConfigRaw","getConfigEntity","id","deleteConfigEntity","error","putConfigEntity","data","describe","configEntity1","defaultLocale","displayName","enabled","from","message","en","fr","mimeType","subject","configEntity2","configEntity3","beforeAll","process","env","FRODO_POLLY_MODE","afterAll","test","expect","Idm","getAllConfigEntities","toBeDefined","response","toMatchSnapshot","getConfigEntitiesByType","queryAllManagedObjectsByType"],"sources":["ops/IdmOps.test.ts"],"sourcesContent":["/**\n * To record and update snapshots, you must perform 3 steps in order:\n *\n * 1. Record API responses & update ESM snapshots\n *\n * To record and update ESM snapshots, you must call the test:record\n * script and override all the connection state variables required\n * to connect to the env to record from:\n *\n * FRODO_DEBUG=1 FRODO_HOST=frodo-dev npm run test:record IdmOps\n *\n * The above command assumes that you have a connection profile for\n * 'frodo-dev' on your development machine.\n *\n * 2. Update CJS snapshots\n *\n * After recording, the ESM snapshots will already be updated as that happens\n * in one go, but you musty manually update the CJS snapshots by running:\n *\n * FRODO_DEBUG=1 npm run test:update IdmOps\n *\n * 3. Test your changes\n *\n * If 1 and 2 didn't produce any errors, you are ready to run the tests in\n * replay mode and make sure they all succeed as well:\n *\n * npm run test:only IdmOps\n *\n * Note: FRODO_DEBUG=1 is optional and enables debug logging for some output\n * in case things don't function as expected\n */\nimport { Idm, IdmConfigRaw } from '../index';\nimport { autoSetupPolly } from '../utils/AutoSetupPolly';\n\nautoSetupPolly();\n\nasync function stageConfigEntity(\n configEntity: { id: string; data: object },\n create = true\n) {\n // delete if exists, then create\n try {\n await IdmConfigRaw.getConfigEntity(configEntity.id);\n await IdmConfigRaw.deleteConfigEntity(configEntity.id);\n } catch (error) {\n // ignore\n } finally {\n if (create) {\n await IdmConfigRaw.putConfigEntity(configEntity.id, configEntity.data);\n }\n }\n}\n\ndescribe('IdmOps', () => {\n const configEntity1 = {\n id: 'emailTemplate/FrodoTestConfigEntity1',\n data: {\n defaultLocale: 'en',\n displayName: 'Frodo Test Email Template One',\n enabled: true,\n from: '',\n message: {\n en: '<h3>Click to reset your password</h3><h4><a href=\"{{object.resumeURI}}\">Password reset link</a></h4>',\n fr: '<h3>Cliquez pour réinitialiser votre mot de passe</h3><h4><a href=\"{{object.resumeURI}}\">Mot de passe lien de réinitialisation</a></h4>',\n },\n mimeType: 'text/html',\n subject: {\n en: 'Reset your password',\n fr: 'Réinitialisez votre mot de passe',\n },\n },\n };\n const configEntity2 = {\n id: 'emailTemplate/FrodoTestConfigEntity2',\n data: {\n defaultLocale: 'en',\n displayName: 'Frodo Test Email Template Two',\n enabled: true,\n from: '',\n message: {\n en: '<h3>This is your one-time password:</h3><h4>{{object.description}}</a></h4>',\n },\n mimeType: 'text/html',\n subject: {\n en: 'One-Time Password for login',\n },\n },\n };\n const configEntity3 = {\n id: 'emailTemplate/FrodoTestConfigEntity3',\n data: {\n defaultLocale: 'en',\n displayName: 'Frodo Test Email Template Three',\n enabled: true,\n from: '',\n message: {\n en: '<html><body><h3>You started a login or profile update that requires MFA. </h3><h4><a href=\"{{object.resumeURI}}\">Click to Proceed</a></h4></body></html>',\n },\n mimeType: 'text/html',\n subject: {\n en: 'Multi-Factor Email for Identity Cloud login',\n },\n },\n };\n // in recording mode, setup test data before recording\n beforeAll(async () => {\n if (process.env.FRODO_POLLY_MODE === 'record') {\n await stageConfigEntity(configEntity1);\n await stageConfigEntity(configEntity2);\n await stageConfigEntity(configEntity3, false);\n }\n });\n // in recording mode, remove test data after recording\n afterAll(async () => {\n if (process.env.FRODO_POLLY_MODE === 'record') {\n await stageConfigEntity(configEntity1, false);\n await stageConfigEntity(configEntity2, false);\n await stageConfigEntity(configEntity3, false);\n }\n });\n\n describe('getAllConfigEntities()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.getAllConfigEntities).toBeDefined();\n });\n\n test('1: get all config entities', async () => {\n const response = await Idm.getAllConfigEntities();\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getConfigEntitiesByType()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.getConfigEntitiesByType).toBeDefined();\n });\n\n test('1: Get config entity by type (emailTemplate)', async () => {\n const response = await Idm.getConfigEntitiesByType('emailTemplate');\n expect(response).toMatchSnapshot();\n });\n\n test('2: Get config entity by type (managed)', async () => {\n const response = await Idm.getConfigEntitiesByType('managed');\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getConfigEntity()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.getConfigEntity).toBeDefined();\n });\n\n test(`1: Get config entity '${configEntity1.id}'`, async () => {\n const response = await Idm.getConfigEntity(configEntity1.id);\n expect(response).toMatchSnapshot();\n });\n\n test(\"2: Get config entity 'managed'\", async () => {\n const response = await Idm.getConfigEntity('managed');\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('putConfigEntity()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.putConfigEntity).toBeDefined();\n });\n\n test(`1: Put a config entity '${configEntity3.id}'`, async () => {\n const response = await Idm.putConfigEntity(\n configEntity3.id,\n configEntity3.data\n );\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('queryAllManagedObjectsByType()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.queryAllManagedObjectsByType).toBeDefined();\n });\n\n test(`1: Query managed objects of type 'alpha_user'`, async () => {\n const response = await Idm.queryAllManagedObjectsByType(\n 'alpha_user',\n ['*'],\n null\n );\n expect(response).toMatchSnapshot();\n });\n });\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IdmOps.test.js","names":["autoSetupPolly","stageConfigEntity","configEntity","create","IdmConfigRaw","getConfigEntity","id","deleteConfigEntity","error","putConfigEntity","data","describe","configEntity1","defaultLocale","displayName","enabled","from","message","en","fr","mimeType","subject","configEntity2","configEntity3","beforeAll","process","env","FRODO_POLLY_MODE","afterAll","test","expect","Idm","getAllConfigEntities","toBeDefined","response","toMatchSnapshot","getConfigEntitiesByType","queryAllManagedObjectsByType","testConnectorServers"],"sources":["ops/IdmOps.test.ts"],"sourcesContent":["/**\n * To record and update snapshots, you must perform 3 steps in order:\n *\n * 1. Record API responses & update ESM snapshots\n *\n * To record and update ESM snapshots, you must call the test:record\n * script and override all the connection state variables required\n * to connect to the env to record from:\n *\n * FRODO_DEBUG=1 FRODO_HOST=frodo-dev npm run test:record IdmOps\n *\n * The above command assumes that you have a connection profile for\n * 'frodo-dev' on your development machine.\n *\n * 2. Update CJS snapshots\n *\n * After recording, the ESM snapshots will already be updated as that happens\n * in one go, but you musty manually update the CJS snapshots by running:\n *\n * FRODO_DEBUG=1 npm run test:update IdmOps\n *\n * 3. Test your changes\n *\n * If 1 and 2 didn't produce any errors, you are ready to run the tests in\n * replay mode and make sure they all succeed as well:\n *\n * npm run test:only IdmOps\n *\n * Note: FRODO_DEBUG=1 is optional and enables debug logging for some output\n * in case things don't function as expected\n */\nimport { Idm, IdmConfigRaw } from '../index';\nimport { autoSetupPolly } from '../utils/AutoSetupPolly';\n\nautoSetupPolly();\n\nasync function stageConfigEntity(\n configEntity: { id: string; data: object },\n create = true\n) {\n // delete if exists, then create\n try {\n await IdmConfigRaw.getConfigEntity(configEntity.id);\n await IdmConfigRaw.deleteConfigEntity(configEntity.id);\n } catch (error) {\n // ignore\n } finally {\n if (create) {\n await IdmConfigRaw.putConfigEntity(configEntity.id, configEntity.data);\n }\n }\n}\n\ndescribe('IdmOps', () => {\n const configEntity1 = {\n id: 'emailTemplate/FrodoTestConfigEntity1',\n data: {\n defaultLocale: 'en',\n displayName: 'Frodo Test Email Template One',\n enabled: true,\n from: '',\n message: {\n en: '<h3>Click to reset your password</h3><h4><a href=\"{{object.resumeURI}}\">Password reset link</a></h4>',\n fr: '<h3>Cliquez pour réinitialiser votre mot de passe</h3><h4><a href=\"{{object.resumeURI}}\">Mot de passe lien de réinitialisation</a></h4>',\n },\n mimeType: 'text/html',\n subject: {\n en: 'Reset your password',\n fr: 'Réinitialisez votre mot de passe',\n },\n },\n };\n const configEntity2 = {\n id: 'emailTemplate/FrodoTestConfigEntity2',\n data: {\n defaultLocale: 'en',\n displayName: 'Frodo Test Email Template Two',\n enabled: true,\n from: '',\n message: {\n en: '<h3>This is your one-time password:</h3><h4>{{object.description}}</a></h4>',\n },\n mimeType: 'text/html',\n subject: {\n en: 'One-Time Password for login',\n },\n },\n };\n const configEntity3 = {\n id: 'emailTemplate/FrodoTestConfigEntity3',\n data: {\n defaultLocale: 'en',\n displayName: 'Frodo Test Email Template Three',\n enabled: true,\n from: '',\n message: {\n en: '<html><body><h3>You started a login or profile update that requires MFA. </h3><h4><a href=\"{{object.resumeURI}}\">Click to Proceed</a></h4></body></html>',\n },\n mimeType: 'text/html',\n subject: {\n en: 'Multi-Factor Email for Identity Cloud login',\n },\n },\n };\n // in recording mode, setup test data before recording\n beforeAll(async () => {\n if (process.env.FRODO_POLLY_MODE === 'record') {\n await stageConfigEntity(configEntity1);\n await stageConfigEntity(configEntity2);\n await stageConfigEntity(configEntity3, false);\n }\n });\n // in recording mode, remove test data after recording\n afterAll(async () => {\n if (process.env.FRODO_POLLY_MODE === 'record') {\n await stageConfigEntity(configEntity1, false);\n await stageConfigEntity(configEntity2, false);\n await stageConfigEntity(configEntity3, false);\n }\n });\n\n describe('getAllConfigEntities()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.getAllConfigEntities).toBeDefined();\n });\n\n test('1: get all config entities', async () => {\n const response = await Idm.getAllConfigEntities();\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getConfigEntitiesByType()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.getConfigEntitiesByType).toBeDefined();\n });\n\n test('1: Get config entity by type (emailTemplate)', async () => {\n const response = await Idm.getConfigEntitiesByType('emailTemplate');\n expect(response).toMatchSnapshot();\n });\n\n test('2: Get config entity by type (managed)', async () => {\n const response = await Idm.getConfigEntitiesByType('managed');\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getConfigEntity()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.getConfigEntity).toBeDefined();\n });\n\n test(`1: Get config entity '${configEntity1.id}'`, async () => {\n const response = await Idm.getConfigEntity(configEntity1.id);\n expect(response).toMatchSnapshot();\n });\n\n test(\"2: Get config entity 'managed'\", async () => {\n const response = await Idm.getConfigEntity('managed');\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('putConfigEntity()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.putConfigEntity).toBeDefined();\n });\n\n test(`1: Put a config entity '${configEntity3.id}'`, async () => {\n const response = await Idm.putConfigEntity(\n configEntity3.id,\n configEntity3.data\n );\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('queryAllManagedObjectsByType()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.queryAllManagedObjectsByType).toBeDefined();\n });\n\n test(`1: Query managed objects of type 'alpha_user'`, async () => {\n const response = await Idm.queryAllManagedObjectsByType(\n 'alpha_user',\n ['*'],\n null\n );\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('testConnectorServers()', () => {\n test('0: Method is implemented', async () => {\n expect(Idm.testConnectorServers).toBeDefined();\n });\n\n test(`1: Test connector servers`, async () => {\n const response = await Idm.testConnectorServers();\n expect(response).toMatchSnapshot();\n });\n });\n});\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saml2Ops.test.js","names":["jest","setTimeout","autoSetupPolly","state","setDeploymentType","globalConfig","CLOUD_DEPLOYMENT_TYPE_KEY","stageProvider","provider","create","Saml2","getSaml2Provider","entityId","deleteSaml2Provider","error","isAxiosError","console","log","message","dir","response","data","importSaml2Provider","getSaml2ProviderImportData","describe","provider1","location","Saml2ProiderLocation","HOSTED","entityId64","encodeBase64Url","provider2","REMOTE","provider3","provider4","provider5","provider6","provider7","provider8","provider9","provider10","beforeAll","process","env","FRODO_POLLY_MODE","FRODO_RECORD_PHASE","afterAll","test","expect","createSaml2ExportTemplate","toBeDefined","toMatchSnapshot","meta","any","Object","getSaml2ProviderStubs","getProviderByLocationAndId","getProviderMetadataUrl","getProviderMetadata","getSaml2ProviderStub","exportSaml2Provider","exportSaml2Providers","assertions","toBeTruthy","getRawSaml2Providers","getRawSaml2Provider","putRawSaml2Provider","importSaml2Providers","getSaml2ProvidersImportData","failures","toBe","warnings","deleteRawSaml2Provider","deleteSaml2Providers","deleteRawSaml2Providers"],"sources":["ops/Saml2Ops.test.ts"],"sourcesContent":["/**\n * To record and update snapshots, you must perform 3 steps in order:\n *\n * 1. Record API responses\n *\n * This step breaks down into 5 phases:\n *\n * Phase 1: Record non-destructive tests\n * Phase 2: Record conflicting non-destructive tests - Import all\n * Phase 3: Record Group 1 of DESTRUCTIVE tests - Deletes by entity id\n * Phase 4: Record Group 3 of DESTRUCTIVE tests - Delete all\n * Phase 5: Record Group 3 of DESTRUCTIVE tests - Delete all raw (legacy API - pre 7.0)\n *\n * Because destructive tests interfere with the recording of non-destructive\n * tests and also interfere among themselves, they have to be run in groups\n * of non-interfering tests.\n *\n * To record and update ESM snapshots, you must call the test:record\n * script and override all the connection state variables required\n * to connect to the env to record from and also indicate the phase:\n *\n * FRODO_DEBUG=1 FRODO_RECORD_PHASE=1 FRODO_HOST=frodo-dev npm run test:record Saml2Ops\n * FRODO_DEBUG=1 FRODO_RECORD_PHASE=2 FRODO_HOST=frodo-dev npm run test:record Saml2Ops\n *\n * THESE TESTS ARE DESTRUCTIVE!!! DO NOT RUN AGAINST AN ENV WITH ACTIVE AGENTS!!!\n *\n * FRODO_DEBUG=1 FRODO_RECORD_PHASE=3 FRODO_HOST=frodo-dev npm run test:record Saml2Ops\n * FRODO_DEBUG=1 FRODO_RECORD_PHASE=4 FRODO_HOST=frodo-dev npm run test:record Saml2Ops\n * FRODO_DEBUG=1 FRODO_RECORD_PHASE=5 FRODO_HOST=frodo-dev npm run test:record Saml2Ops\n *\n * The above command assumes that you have a connection profile for\n * 'frodo-dev' on your development machine.\n *\n * 2. Update snapshots\n *\n * After recording API responses, you must manually update/create snapshots by running:\n *\n * FRODO_DEBUG=1 npm run test:update Saml2Ops\n *\n * 3. Test your changes\n *\n * If 1 and 2 didn't produce any errors, you are ready to run the tests in\n * replay mode and make sure they all succeed as well:\n *\n * npm run test:only Saml2Ops\n *\n * Note: FRODO_DEBUG=1 is optional and enables debug logging for some output\n * in case things don't function as expected\n */\nimport { jest } from '@jest/globals';\nimport { Saml2, state } from '../index';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { Saml2ProiderLocation } from '../api/ApiTypes';\nimport {\n getSaml2ProviderImportData,\n getSaml2ProvidersImportData,\n} from '../test/mocks/ForgeRockApiMockEngine';\nimport { encodeBase64Url } from '../api/utils/Base64';\nimport { autoSetupPolly } from '../utils/AutoSetupPolly';\n\n// Increase timeout for this test as pipeline keeps failing with error:\n// Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.\njest.setTimeout(30000);\n\nautoSetupPolly();\n\nstate.setDeploymentType(globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY);\n\nasync function stageProvider(provider: { entityId: string }, create = true) {\n // delete if exists, then create\n try {\n await Saml2.getSaml2Provider(provider.entityId);\n await Saml2.deleteSaml2Provider(provider.entityId);\n } catch (error) {\n if (error.isAxiosError) {\n console.log(\n `Error deleting provider '${provider.entityId}': ${error.message}`\n );\n console.dir(error.response?.data);\n }\n } finally {\n if (create) {\n try {\n await Saml2.importSaml2Provider(\n provider.entityId,\n getSaml2ProviderImportData(provider.entityId)\n );\n } catch (error) {\n console.log(\n `Error importing provider '${provider.entityId}': ${error.message}`\n );\n console.dir(error.response?.data);\n }\n }\n }\n}\n\ndescribe('Saml2Ops', () => {\n const provider1 = {\n entityId: 'iSPAzure',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('iSPAzure'),\n };\n const provider2 = {\n entityId: 'urn:federation:MicrosoftOnline',\n location: Saml2ProiderLocation.REMOTE,\n entityId64: encodeBase64Url('urn:federation:MicrosoftOnline'),\n };\n const provider3 = {\n entityId: 'https://idc.scheuber.io/am/saml2/IDPFedlet',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('https://idc.scheuber.io/am/saml2/IDPFedlet'),\n };\n const provider4 = {\n entityId: 'https://sts.windows.net/711ffa9c-5972-4713-ace3-688c9732614a/',\n location: Saml2ProiderLocation.REMOTE,\n entityId64: encodeBase64Url(\n 'https://sts.windows.net/711ffa9c-5972-4713-ace3-688c9732614a/'\n ),\n };\n const provider5 = {\n entityId: 'https://idc.scheuber.io/am/saml2/IDPAzure',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('https://idc.scheuber.io/am/saml2/IDPAzure'),\n };\n const provider6 = {\n entityId: 'https://idc.scheuber.io/am/saml2/IDPBroadcom',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('https://idc.scheuber.io/am/saml2/IDPBroadcom'),\n };\n const provider7 = {\n entityId: 'idp',\n location: Saml2ProiderLocation.REMOTE,\n entityId64: encodeBase64Url('idp'),\n };\n const provider8 = {\n entityId: 'SPAzure',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('SPAzure'),\n };\n const provider9 = {\n entityId: 'volkerDevSP',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('volkerDevSP'),\n };\n const provider10 = {\n entityId: 'https://saml.mytestrun.com/sp',\n location: Saml2ProiderLocation.REMOTE,\n entityId64: encodeBase64Url('https://saml.mytestrun.com/sp'),\n };\n // in recording mode, setup test data before recording\n beforeAll(async () => {\n if (\n process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '1'\n ) {\n await stageProvider(provider1);\n await stageProvider(provider2);\n await stageProvider(provider3);\n await stageProvider(provider4);\n await stageProvider(provider5, false);\n await stageProvider(provider6, false);\n await stageProvider(provider7, false);\n } else if (\n process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '2'\n ) {\n await stageProvider(provider1, false);\n await stageProvider(provider2, false);\n await stageProvider(provider3, false);\n await stageProvider(provider4, false);\n await stageProvider(provider5, false);\n await stageProvider(provider6, false);\n await stageProvider(provider7, false);\n await stageProvider(provider8, false);\n await stageProvider(provider9, false);\n await stageProvider(provider10, false);\n } else if (\n process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '5'\n ) {\n await stageProvider(provider1, false);\n await stageProvider(provider2, false);\n await stageProvider(provider7, false);\n await stageProvider(provider8, false);\n await stageProvider(provider9, false);\n }\n // Pahses 3 + 4\n else if (process.env.FRODO_POLLY_MODE === 'record') {\n await stageProvider(provider1);\n await stageProvider(provider2);\n await stageProvider(provider3);\n await stageProvider(provider4);\n await stageProvider(provider5);\n await stageProvider(provider6);\n await stageProvider(provider7);\n }\n });\n // in recording mode, remove test data after recording\n afterAll(async () => {\n if (process.env.FRODO_POLLY_MODE === 'record') {\n await stageProvider(provider1, false);\n await stageProvider(provider2, false);\n await stageProvider(provider3, false);\n await stageProvider(provider4, false);\n await stageProvider(provider5, false);\n await stageProvider(provider6, false);\n await stageProvider(provider7, false);\n await stageProvider(provider8, false);\n await stageProvider(provider9, false);\n await stageProvider(provider10, false);\n }\n });\n\n // Phase 1\n if (\n !process.env.FRODO_POLLY_MODE ||\n (process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '1')\n ) {\n describe('createSaml2ExportTemplate()', () => {\n test('0: Method is implemented', () => {\n expect(Saml2.createSaml2ExportTemplate).toBeDefined();\n });\n\n test('1: Create saml2 export template', () => {\n const response = Saml2.createSaml2ExportTemplate();\n expect(response).toMatchSnapshot({\n meta: expect.any(Object),\n });\n });\n });\n\n describe('getSaml2ProviderStubs()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getSaml2ProviderStubs).toBeDefined();\n });\n\n test('1: Get saml2 provider stubs', async () => {\n const response = await Saml2.getSaml2ProviderStubs();\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getProviderByLocationAndId()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getProviderByLocationAndId).toBeDefined();\n });\n\n test(`1: Get hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.getProviderByLocationAndId(\n provider1.location,\n provider1.entityId64\n );\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Get remote provider '${provider2.entityId}'`, async () => {\n const response = await Saml2.getProviderByLocationAndId(\n provider2.location,\n provider2.entityId64\n );\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getProviderMetadataUrl()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getProviderMetadataUrl).toBeDefined();\n });\n\n test(`1: Get metadata url for hosted provider '${provider3.entityId}'`, async () => {\n const response = Saml2.getProviderMetadataUrl(provider3.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Get metadata url for remote provider '${provider4.entityId}'`, async () => {\n const response = Saml2.getProviderMetadataUrl(provider4.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getProviderMetadata()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getProviderMetadata).toBeDefined();\n });\n\n test(`1: Get metadata for hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.getProviderMetadata(provider1.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Get metadata for remote provider '${provider4.entityId}'`, async () => {\n const response = await Saml2.getProviderMetadata(provider4.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getSaml2ProviderStub()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getSaml2ProviderStub).toBeDefined();\n });\n\n test(`1: Get stub of hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.getSaml2ProviderStub(provider1.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Get stub of remote provider '${provider4.entityId}'`, async () => {\n const response = await Saml2.getSaml2ProviderStub(provider4.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getSaml2Provider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getSaml2Provider).toBeDefined();\n });\n\n test(`1: Get hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.getSaml2Provider(provider1.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Get remote provider '${provider4.entityId}'`, async () => {\n const response = await Saml2.getSaml2Provider(provider4.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('exportSaml2Provider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.exportSaml2Provider).toBeDefined();\n });\n\n test(`1: Export hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.exportSaml2Provider(provider1.entityId);\n expect(response).toMatchSnapshot({\n meta: expect.any(Object),\n });\n });\n\n test(`2: Export remote provider '${provider4.entityId}'`, async () => {\n const response = await Saml2.exportSaml2Provider(provider4.entityId);\n expect(response).toMatchSnapshot({\n meta: expect.any(Object),\n });\n });\n });\n\n describe('exportSaml2Providers()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.exportSaml2Providers).toBeDefined();\n });\n\n test('1: Export saml2 entity providers', async () => {\n const response = await Saml2.exportSaml2Providers();\n expect(response).toMatchSnapshot({\n meta: expect.any(Object),\n });\n });\n });\n\n describe('importSaml2Provider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.importSaml2Provider).toBeDefined();\n });\n\n test(`1: Import hosted provider '${provider5.entityId}'`, async () => {\n expect.assertions(1);\n const response = await Saml2.importSaml2Provider(\n provider5.entityId,\n getSaml2ProviderImportData(provider5.entityId)\n );\n expect(response).toBeTruthy();\n });\n\n test(`2: Import hosted provider '${provider6.entityId}'`, async () => {\n expect.assertions(1);\n const response = await Saml2.importSaml2Provider(\n provider6.entityId,\n getSaml2ProviderImportData(provider6.entityId)\n );\n expect(response).toBeTruthy();\n });\n\n test(`3: Import remote provider '${provider7.entityId}' with metadata`, async () => {\n expect.assertions(1);\n const response = await Saml2.importSaml2Provider(\n provider7.entityId,\n getSaml2ProviderImportData(provider7.entityId)\n );\n expect(response).toBeTruthy();\n });\n });\n\n describe('getRawProviders()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getRawSaml2Providers).toBeDefined();\n });\n });\n\n describe('getRawProvider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getRawSaml2Provider).toBeDefined();\n });\n });\n\n describe('putRawProvider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.putRawSaml2Provider).toBeDefined();\n });\n });\n }\n\n // Phase 2\n if (\n !process.env.FRODO_POLLY_MODE ||\n (process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '2')\n ) {\n describe('importSaml2Providers()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.importSaml2Providers).toBeDefined();\n });\n\n test('1: Import providers', async () => {\n expect.assertions(2);\n const response = await Saml2.importSaml2Providers(\n getSaml2ProvidersImportData()\n );\n expect(response.failures).toBe(0);\n expect(response.warnings).toBe(0);\n });\n });\n }\n\n // Phase 3\n if (\n !process.env.FRODO_POLLY_MODE ||\n (process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '3')\n ) {\n describe('deleteSaml2Provider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.deleteSaml2Provider).toBeDefined();\n });\n\n test(`1: Delete hosted provider '${provider3.entityId}'`, async () => {\n const response = await Saml2.deleteSaml2Provider(provider3.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Delete remote provider '${provider4.entityId}'`, async () => {\n const response = await Saml2.deleteSaml2Provider(provider4.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('deleteRawSaml2Provider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.deleteRawSaml2Provider).toBeDefined();\n });\n\n test(`1: Delete raw hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.deleteRawSaml2Provider(provider1.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Delete raw remote provider '${provider2.entityId}'`, async () => {\n const response = await Saml2.deleteRawSaml2Provider(provider2.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n }\n\n // Phase 4\n if (\n !process.env.FRODO_POLLY_MODE ||\n (process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '4')\n ) {\n describe('deleteSaml2Providers()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.deleteSaml2Providers).toBeDefined();\n });\n\n test(`1: Delete all providers`, async () => {\n const response = await Saml2.deleteSaml2Providers();\n expect(response).toMatchSnapshot();\n });\n });\n }\n\n // Phase 5\n if (\n !process.env.FRODO_POLLY_MODE ||\n (process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '5')\n ) {\n describe('deleteRawSaml2Providers()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.deleteRawSaml2Providers).toBeDefined();\n });\n\n test(`1: Delete all raw providers`, async () => {\n const response = await Saml2.deleteRawSaml2Providers();\n expect(response).toMatchSnapshot();\n });\n });\n }\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Saml2Ops.test.js","names":["jest","setTimeout","autoSetupPolly","state","setDeploymentType","globalConfig","CLOUD_DEPLOYMENT_TYPE_KEY","stageProvider","provider","create","Saml2","getSaml2Provider","entityId","deleteSaml2Provider","error","isAxiosError","console","log","message","dir","response","data","importSaml2Provider","getSaml2ProviderImportData","describe","provider1","location","Saml2ProiderLocation","HOSTED","entityId64","encodeBase64Url","provider2","REMOTE","provider3","provider4","provider5","provider6","provider7","provider8","provider9","provider10","beforeAll","process","env","FRODO_POLLY_MODE","FRODO_RECORD_PHASE","afterAll","test","expect","createSaml2ExportTemplate","toBeDefined","toMatchSnapshot","meta","any","Object","getSaml2ProviderStubs","getProviderByLocationAndId","getProviderMetadataUrl","getProviderMetadata","getSaml2ProviderStub","exportSaml2Provider","exportSaml2Providers","assertions","toBeTruthy","getRawSaml2Providers","getRawSaml2Provider","putRawSaml2Provider","importSaml2Providers","getSaml2ProvidersImportData","failures","toBe","warnings","deleteRawSaml2Provider","deleteSaml2Providers","deleteRawSaml2Providers"],"sources":["ops/Saml2Ops.test.ts"],"sourcesContent":["/**\n * To record and update snapshots, you must perform 3 steps in order:\n *\n * 1. Record API responses\n *\n * This step breaks down into 5 phases:\n *\n * Phase 1: Record Group 1 of non-destructive tests\n * Phase 2: Record Group 2 of non-destructive tests - Import all\n * Phase 3: Record Group 1 of DESTRUCTIVE tests - Deletes by entity id\n * Phase 4: Record Group 2 of DESTRUCTIVE tests - Delete all\n * Phase 5: Record Group 3 of DESTRUCTIVE tests - Delete all raw (legacy API - pre 7.0)\n *\n * Because destructive tests interfere with the recording of non-destructive\n * tests and also interfere among themselves, they have to be run in groups\n * of non-interfering tests.\n *\n * To record API responses, you must call the test:record script and\n * override all the connection state variables required to connect to the\n * env to record from and also indicate the phase:\n *\n * FRODO_DEBUG=1 FRODO_RECORD_PHASE=1 FRODO_HOST=frodo-dev npm run test:record Saml2Ops\n * FRODO_DEBUG=1 FRODO_RECORD_PHASE=2 FRODO_HOST=frodo-dev npm run test:record Saml2Ops\n *\n * THESE TESTS ARE DESTRUCTIVE!!! DO NOT RUN AGAINST AN ENV WITH ACTIVE CONFIGURATION!!!\n *\n * FRODO_DEBUG=1 FRODO_RECORD_PHASE=3 FRODO_HOST=frodo-dev npm run test:record Saml2Ops\n * FRODO_DEBUG=1 FRODO_RECORD_PHASE=4 FRODO_HOST=frodo-dev npm run test:record Saml2Ops\n * FRODO_DEBUG=1 FRODO_RECORD_PHASE=5 FRODO_HOST=frodo-dev npm run test:record Saml2Ops\n *\n * The above command assumes that you have a connection profile for\n * 'frodo-dev' on your development machine.\n *\n * 2. Update snapshots\n *\n * After recording API responses, you must manually update/create snapshots\n * by running:\n *\n * FRODO_DEBUG=1 npm run test:update Saml2Ops\n *\n * 3. Test your changes\n *\n * If 1 and 2 didn't produce any errors, you are ready to run the tests in\n * replay mode and make sure they all succeed as well:\n *\n * npm run test:only Saml2Ops\n *\n * Note: FRODO_DEBUG=1 is optional and enables debug logging for some output\n * in case things don't function as expected\n */\nimport { jest } from '@jest/globals';\nimport { Saml2, state } from '../index';\nimport * as globalConfig from '../storage/StaticStorage';\nimport { Saml2ProiderLocation } from '../api/ApiTypes';\nimport {\n getSaml2ProviderImportData,\n getSaml2ProvidersImportData,\n} from '../test/mocks/ForgeRockApiMockEngine';\nimport { encodeBase64Url } from '../api/utils/Base64';\nimport { autoSetupPolly } from '../utils/AutoSetupPolly';\n\n// Increase timeout for this test as pipeline keeps failing with error:\n// Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.\njest.setTimeout(30000);\n\nautoSetupPolly();\n\nstate.setDeploymentType(globalConfig.CLOUD_DEPLOYMENT_TYPE_KEY);\n\nasync function stageProvider(provider: { entityId: string }, create = true) {\n // delete if exists, then create\n try {\n await Saml2.getSaml2Provider(provider.entityId);\n await Saml2.deleteSaml2Provider(provider.entityId);\n } catch (error) {\n if (error.isAxiosError) {\n console.log(\n `Error deleting provider '${provider.entityId}': ${error.message}`\n );\n console.dir(error.response?.data);\n }\n } finally {\n if (create) {\n try {\n await Saml2.importSaml2Provider(\n provider.entityId,\n getSaml2ProviderImportData(provider.entityId)\n );\n } catch (error) {\n console.log(\n `Error importing provider '${provider.entityId}': ${error.message}`\n );\n console.dir(error.response?.data);\n }\n }\n }\n}\n\ndescribe('Saml2Ops', () => {\n const provider1 = {\n entityId: 'iSPAzure',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('iSPAzure'),\n };\n const provider2 = {\n entityId: 'urn:federation:MicrosoftOnline',\n location: Saml2ProiderLocation.REMOTE,\n entityId64: encodeBase64Url('urn:federation:MicrosoftOnline'),\n };\n const provider3 = {\n entityId: 'https://idc.scheuber.io/am/saml2/IDPFedlet',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('https://idc.scheuber.io/am/saml2/IDPFedlet'),\n };\n const provider4 = {\n entityId: 'https://sts.windows.net/711ffa9c-5972-4713-ace3-688c9732614a/',\n location: Saml2ProiderLocation.REMOTE,\n entityId64: encodeBase64Url(\n 'https://sts.windows.net/711ffa9c-5972-4713-ace3-688c9732614a/'\n ),\n };\n const provider5 = {\n entityId: 'https://idc.scheuber.io/am/saml2/IDPAzure',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('https://idc.scheuber.io/am/saml2/IDPAzure'),\n };\n const provider6 = {\n entityId: 'https://idc.scheuber.io/am/saml2/IDPBroadcom',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('https://idc.scheuber.io/am/saml2/IDPBroadcom'),\n };\n const provider7 = {\n entityId: 'idp',\n location: Saml2ProiderLocation.REMOTE,\n entityId64: encodeBase64Url('idp'),\n };\n const provider8 = {\n entityId: 'SPAzure',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('SPAzure'),\n };\n const provider9 = {\n entityId: 'volkerDevSP',\n location: Saml2ProiderLocation.HOSTED,\n entityId64: encodeBase64Url('volkerDevSP'),\n };\n const provider10 = {\n entityId: 'https://saml.mytestrun.com/sp',\n location: Saml2ProiderLocation.REMOTE,\n entityId64: encodeBase64Url('https://saml.mytestrun.com/sp'),\n };\n // in recording mode, setup test data before recording\n beforeAll(async () => {\n if (\n process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '1'\n ) {\n await stageProvider(provider1);\n await stageProvider(provider2);\n await stageProvider(provider3);\n await stageProvider(provider4);\n await stageProvider(provider5, false);\n await stageProvider(provider6, false);\n await stageProvider(provider7, false);\n } else if (\n process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '2'\n ) {\n await stageProvider(provider1, false);\n await stageProvider(provider2, false);\n await stageProvider(provider3, false);\n await stageProvider(provider4, false);\n await stageProvider(provider5, false);\n await stageProvider(provider6, false);\n await stageProvider(provider7, false);\n await stageProvider(provider8, false);\n await stageProvider(provider9, false);\n await stageProvider(provider10, false);\n } else if (\n process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '5'\n ) {\n await stageProvider(provider1, false);\n await stageProvider(provider2, false);\n await stageProvider(provider7, false);\n await stageProvider(provider8, false);\n await stageProvider(provider9, false);\n }\n // Pahses 3 + 4\n else if (process.env.FRODO_POLLY_MODE === 'record') {\n await stageProvider(provider1);\n await stageProvider(provider2);\n await stageProvider(provider3);\n await stageProvider(provider4);\n await stageProvider(provider5);\n await stageProvider(provider6);\n await stageProvider(provider7);\n }\n });\n // in recording mode, remove test data after recording\n afterAll(async () => {\n if (process.env.FRODO_POLLY_MODE === 'record') {\n await stageProvider(provider1, false);\n await stageProvider(provider2, false);\n await stageProvider(provider3, false);\n await stageProvider(provider4, false);\n await stageProvider(provider5, false);\n await stageProvider(provider6, false);\n await stageProvider(provider7, false);\n await stageProvider(provider8, false);\n await stageProvider(provider9, false);\n await stageProvider(provider10, false);\n }\n });\n\n // Phase 1\n if (\n !process.env.FRODO_POLLY_MODE ||\n (process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '1')\n ) {\n describe('createSaml2ExportTemplate()', () => {\n test('0: Method is implemented', () => {\n expect(Saml2.createSaml2ExportTemplate).toBeDefined();\n });\n\n test('1: Create saml2 export template', () => {\n const response = Saml2.createSaml2ExportTemplate();\n expect(response).toMatchSnapshot({\n meta: expect.any(Object),\n });\n });\n });\n\n describe('getSaml2ProviderStubs()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getSaml2ProviderStubs).toBeDefined();\n });\n\n test('1: Get saml2 provider stubs', async () => {\n const response = await Saml2.getSaml2ProviderStubs();\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getProviderByLocationAndId()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getProviderByLocationAndId).toBeDefined();\n });\n\n test(`1: Get hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.getProviderByLocationAndId(\n provider1.location,\n provider1.entityId64\n );\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Get remote provider '${provider2.entityId}'`, async () => {\n const response = await Saml2.getProviderByLocationAndId(\n provider2.location,\n provider2.entityId64\n );\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getProviderMetadataUrl()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getProviderMetadataUrl).toBeDefined();\n });\n\n test(`1: Get metadata url for hosted provider '${provider3.entityId}'`, async () => {\n const response = Saml2.getProviderMetadataUrl(provider3.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Get metadata url for remote provider '${provider4.entityId}'`, async () => {\n const response = Saml2.getProviderMetadataUrl(provider4.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getProviderMetadata()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getProviderMetadata).toBeDefined();\n });\n\n test(`1: Get metadata for hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.getProviderMetadata(provider1.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Get metadata for remote provider '${provider4.entityId}'`, async () => {\n const response = await Saml2.getProviderMetadata(provider4.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getSaml2ProviderStub()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getSaml2ProviderStub).toBeDefined();\n });\n\n test(`1: Get stub of hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.getSaml2ProviderStub(provider1.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Get stub of remote provider '${provider4.entityId}'`, async () => {\n const response = await Saml2.getSaml2ProviderStub(provider4.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('getSaml2Provider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getSaml2Provider).toBeDefined();\n });\n\n test(`1: Get hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.getSaml2Provider(provider1.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Get remote provider '${provider4.entityId}'`, async () => {\n const response = await Saml2.getSaml2Provider(provider4.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('exportSaml2Provider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.exportSaml2Provider).toBeDefined();\n });\n\n test(`1: Export hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.exportSaml2Provider(provider1.entityId);\n expect(response).toMatchSnapshot({\n meta: expect.any(Object),\n });\n });\n\n test(`2: Export remote provider '${provider4.entityId}'`, async () => {\n const response = await Saml2.exportSaml2Provider(provider4.entityId);\n expect(response).toMatchSnapshot({\n meta: expect.any(Object),\n });\n });\n });\n\n describe('exportSaml2Providers()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.exportSaml2Providers).toBeDefined();\n });\n\n test('1: Export saml2 entity providers', async () => {\n const response = await Saml2.exportSaml2Providers();\n expect(response).toMatchSnapshot({\n meta: expect.any(Object),\n });\n });\n });\n\n describe('importSaml2Provider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.importSaml2Provider).toBeDefined();\n });\n\n test(`1: Import hosted provider '${provider5.entityId}'`, async () => {\n expect.assertions(1);\n const response = await Saml2.importSaml2Provider(\n provider5.entityId,\n getSaml2ProviderImportData(provider5.entityId)\n );\n expect(response).toBeTruthy();\n });\n\n test(`2: Import hosted provider '${provider6.entityId}'`, async () => {\n expect.assertions(1);\n const response = await Saml2.importSaml2Provider(\n provider6.entityId,\n getSaml2ProviderImportData(provider6.entityId)\n );\n expect(response).toBeTruthy();\n });\n\n test(`3: Import remote provider '${provider7.entityId}' with metadata`, async () => {\n expect.assertions(1);\n const response = await Saml2.importSaml2Provider(\n provider7.entityId,\n getSaml2ProviderImportData(provider7.entityId)\n );\n expect(response).toBeTruthy();\n });\n });\n\n describe('getRawProviders()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getRawSaml2Providers).toBeDefined();\n });\n });\n\n describe('getRawProvider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.getRawSaml2Provider).toBeDefined();\n });\n });\n\n describe('putRawProvider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.putRawSaml2Provider).toBeDefined();\n });\n });\n }\n\n // Phase 2\n if (\n !process.env.FRODO_POLLY_MODE ||\n (process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '2')\n ) {\n describe('importSaml2Providers()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.importSaml2Providers).toBeDefined();\n });\n\n test('1: Import providers', async () => {\n expect.assertions(2);\n const response = await Saml2.importSaml2Providers(\n getSaml2ProvidersImportData()\n );\n expect(response.failures).toBe(0);\n expect(response.warnings).toBe(0);\n });\n });\n }\n\n // Phase 3\n if (\n !process.env.FRODO_POLLY_MODE ||\n (process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '3')\n ) {\n describe('deleteSaml2Provider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.deleteSaml2Provider).toBeDefined();\n });\n\n test(`1: Delete hosted provider '${provider3.entityId}'`, async () => {\n const response = await Saml2.deleteSaml2Provider(provider3.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Delete remote provider '${provider4.entityId}'`, async () => {\n const response = await Saml2.deleteSaml2Provider(provider4.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n\n describe('deleteRawSaml2Provider()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.deleteRawSaml2Provider).toBeDefined();\n });\n\n test(`1: Delete raw hosted provider '${provider1.entityId}'`, async () => {\n const response = await Saml2.deleteRawSaml2Provider(provider1.entityId);\n expect(response).toMatchSnapshot();\n });\n\n test(`2: Delete raw remote provider '${provider2.entityId}'`, async () => {\n const response = await Saml2.deleteRawSaml2Provider(provider2.entityId);\n expect(response).toMatchSnapshot();\n });\n });\n }\n\n // Phase 4\n if (\n !process.env.FRODO_POLLY_MODE ||\n (process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '4')\n ) {\n describe('deleteSaml2Providers()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.deleteSaml2Providers).toBeDefined();\n });\n\n test(`1: Delete all providers`, async () => {\n const response = await Saml2.deleteSaml2Providers();\n expect(response).toMatchSnapshot();\n });\n });\n }\n\n // Phase 5\n if (\n !process.env.FRODO_POLLY_MODE ||\n (process.env.FRODO_POLLY_MODE === 'record' &&\n process.env.FRODO_RECORD_PHASE === '5')\n ) {\n describe('deleteRawSaml2Providers()', () => {\n test('0: Method is implemented', async () => {\n expect(Saml2.deleteRawSaml2Providers).toBeDefined();\n });\n\n test(`1: Delete all raw providers`, async () => {\n const response = await Saml2.deleteRawSaml2Providers();\n expect(response).toMatchSnapshot();\n });\n });\n }\n});\n"],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ exports.mockCreateManagedObject = mockCreateManagedObject;
|
|
|
25
25
|
exports.mockCreateSaml2Provider = mockCreateSaml2Provider;
|
|
26
26
|
exports.mockFindSaml2Providers = mockFindSaml2Providers;
|
|
27
27
|
exports.mockGetAllConfigEntities = mockGetAllConfigEntities;
|
|
28
|
+
exports.mockGetAllConnectorServers = mockGetAllConnectorServers;
|
|
28
29
|
exports.mockGetCirclesOfTrust = mockGetCirclesOfTrust;
|
|
29
30
|
exports.mockGetConfigEntitiesByType = mockGetConfigEntitiesByType;
|
|
30
31
|
exports.mockGetConfigEntity = mockGetConfigEntity;
|
|
@@ -438,6 +439,14 @@ function getAgent(agentType, agentId) {
|
|
|
438
439
|
**
|
|
439
440
|
**/
|
|
440
441
|
|
|
442
|
+
// openidm/system?_action=testConnectorServers
|
|
443
|
+
function mockGetAllConnectorServers(mock) {
|
|
444
|
+
mock.onGet(/.*?\/openidm\/system\.+/).reply(function () {
|
|
445
|
+
var mockStatus = 200;
|
|
446
|
+
var mockResponse = JSON.parse(_fs.default.readFileSync(_path.default.resolve(_dirname, './IdmConfigApi/getAllConnectorServers/openicf.json'), 'utf8'));
|
|
447
|
+
return [mockStatus, mockResponse];
|
|
448
|
+
});
|
|
449
|
+
}
|
|
441
450
|
function mockGetAllConfigEntities(mock) {
|
|
442
451
|
mock.onGet(/.*?\/openidm\/config$/).reply(function () {
|
|
443
452
|
var mockStatus = 200;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForgeRockApiMockEngine.js","names":["__dirname","path","dirname","fileURLToPath","readJsonFile","file","json","JSON","parse","fs","readFileSync","resolve","getServerInfo","variation","prefix","infoObject","getServerVersionInfo","versionObject","mockGetServerInfo","mock","onGet","reply","config","elements","url","split","id","length","mockStatus","mockResponse","expect","_id","toBe","mockGetServerVersionInfo","getTreeStepResponse","treeId","authId","key","treeStepsObj","mockStep","onPost","parsed","parseUrl","searchParam","body","data","toBeTruthy","mockAuthorize","parseQueryString","responseType","undefined","mockHeaders","headers","header","mockAccessToken","grantType","code","Object","entries","getTrees","treeObjects","mockGetTrees","getTree","treeObject","getJourney","journeyId","mockGetTree","mockPutTree","callback","onPut","mockTreeObj","mockGetNode","nodeType","nodeId","mockPutNode","mockNodeObj","getScript","scriptId","mockGetScript","mockPutScript","mockScriptObj","getScriptByName","scriptName","getSaml2ProviderImportData","entityId","importData","getTypedFilename","getSaml2ProvidersImportData","getSaml2Providers","providers","mockGetSaml2Providers","mockFindSaml2Providers","filter","match","result","resultCount","pagedResultsCookie","totalPagedResultsPolicy","totalPagedResults","remainingPagedResults","slugify","error","getCirclesOfTrust","mockGetCirclesOfTrust","mockCreateCircleOfTrust","mockCotObj","cotId","mockUpdateCircleOfTrust","mockGetSaml2ProviderByLocationAndId","location","providerId","mockCreateSaml2Provider","pathname","mockSaml2ProviderLocation","mockSaml2ProviderObj","mockSaml2ProviderId64","metaDataXml","decode","standardMetadata","encode","mockUpdateSaml2Provider","mockGetSaml2ProviderMetadata","realm","encodeURIComponent","getSocialProviders","objects","mockGetSocialProviders","mockPutSocialProviderByTypeAndId","mockSocialProviderType","mockSocialProviderId","mockSocialProviderObj","getAgent","agentType","agentId","mockGetAllConfigEntities","mockGetConfigEntity","substring","indexOf","mockPutConfigEntity","mockGetConfigEntitiesByType","console","log","entityType","mockCreateManagedObject","moId","uuidv4","mockAll"],"sources":["test/mocks/ForgeRockApiMockEngine.ts"],"sourcesContent":["import MockAdapter from 'axios-mock-adapter';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { encode, decode } from '../../api/utils/Base64';\nimport { parseQueryString, parseUrl } from '../../api/utils/ApiUtils';\nimport slugify from 'slugify';\nimport { getTypedFilename } from '../../ops/utils/ExportImportUtils';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport function readJsonFile(file: string) {\n const json = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, `${file}`), 'utf8')\n );\n return json;\n}\n\n/****\n **\n ** AM Mocks and Utils\n **\n **/\n\n/**\n * Authentication Mocks\n */\n\nexport function getServerInfo(variation: string = null) {\n const prefix = 'info';\n const infoObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./ServerInfoApi/getServerInfo/${\n variation ? prefix + '-' + variation : prefix\n }.json`\n ),\n 'utf8'\n )\n );\n return infoObject;\n}\n\nexport function getServerVersionInfo(variation: string = null) {\n const prefix = 'version';\n const versionObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./ServerInfoApi/getServerVersionInfo/${\n variation ? prefix + '-' + variation : prefix\n }.json`\n ),\n 'utf8'\n )\n );\n return versionObject;\n}\n\nexport function mockGetServerInfo(mock: MockAdapter, variation: string = null) {\n mock.onGet(/.*?\\/json\\/serverinfo\\/\\*/).reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const id = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getServerInfo(variation);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(id);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetServerVersionInfo(\n mock: MockAdapter,\n variation: string = null\n) {\n mock.onGet(/.*?\\/json\\/serverinfo\\/version/).reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const id = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getServerVersionInfo(variation);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(id);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getTreeStepResponse(\n treeId: string | undefined,\n authId: string | undefined\n) {\n const key = authId ? authId : 'undefined';\n const treeStepsObj = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./AuthenticateApi/step/${treeId ? treeId : 'default'}_steps.json`\n ),\n 'utf8'\n )\n );\n return treeStepsObj[key];\n}\n\nexport function mockStep(mock: MockAdapter) {\n mock\n .onPost(/.*?\\/json\\/realms\\/root\\/authenticate.*/)\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const treeId = parsed.searchParam['authIndexValue'];\n const body = JSON.parse(config.data);\n const authId = body.authId;\n const mockStatus = 200;\n const mockResponse = getTreeStepResponse(treeId, authId);\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockAuthorize(mock: MockAdapter) {\n mock.onPost(/.*?\\/oauth2\\/authorize.*/).reply(function (config) {\n const parsed = parseQueryString(config.data);\n const responseType = parsed['response_type'];\n let mockStatus = 500;\n const mockResponse = undefined;\n const mockHeaders = {};\n if (responseType === 'code') {\n mockStatus = 302;\n const headers = readJsonFile(`./OAuth2OIDCApi/authorize/headers.json`);\n for (const header of headers) {\n mockHeaders[header['key']] = header['value'];\n }\n }\n if (typeof expect !== 'undefined') expect(mockHeaders).toBeTruthy();\n return [mockStatus, mockResponse, mockHeaders];\n });\n}\n\nexport function mockAccessToken(mock: MockAdapter) {\n mock.onPost(/.*?\\/oauth2\\/access_token.*/).reply(function (config) {\n const parsed = parseQueryString(config.data);\n const grantType = parsed['grant_type'];\n const code = parsed['code'];\n let mockStatus = 500;\n let mockResponse = undefined;\n const mockHeaders = {};\n if (grantType === 'authorization_code' && code) {\n mockStatus = 200;\n mockResponse = readJsonFile(`./OAuth2OIDCApi/accessToken/body.json`);\n const headers = readJsonFile(`./OAuth2OIDCApi/accessToken/headers.json`);\n for (const header of Object.entries(headers)) {\n mockHeaders[header['key']] = header['value'];\n }\n }\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse, mockHeaders];\n });\n}\n\n/**\n * Tree Mocks\n */\n\nexport function getTrees() {\n const treeObjects = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './TreeApi/getTrees/trees.json'),\n 'utf8'\n )\n );\n return treeObjects;\n}\n\nexport function mockGetTrees(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getTrees();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getTree(treeId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./TreeApi/getTree/${treeId}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function getJourney(journeyId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./JourneyOps/importJourney/${journeyId}.journey.json`\n ),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function mockGetTree(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const treeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getTree(treeId);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(treeId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutTree(\n mock: MockAdapter,\n callback: (mockTreeId: string, mockTreeObj) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const treeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockTreeObj = JSON.parse(config.data);\n callback(treeId, mockTreeObj);\n return [mockStatus, mockTreeObj];\n });\n}\n\n/**\n * Node Mocks\n */\n\nexport function mockGetNode(mock: MockAdapter) {\n mock\n .onGet(\n /\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/nodes\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const nodeType = elements[elements?.length - 2];\n const nodeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./NodeApi/getNode/${nodeType}/${nodeId}.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(nodeId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutNode(\n mock: MockAdapter,\n callback: (mockNodeId: string, mockNodeObj) => void\n) {\n mock\n .onPut(\n /\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/nodes\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const nodeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockNodeObj = JSON.parse(config.data);\n callback(nodeId, mockNodeObj);\n return [mockStatus, mockNodeObj];\n });\n}\n\n/**\n * Script Mocks\n */\n\nexport function getScript(scriptId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./ScriptApi/getScript/${scriptId}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function mockGetScript(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/scripts\\/.+/)\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const scriptId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getScript(scriptId);\n if (typeof expect !== 'undefined')\n expect(mockResponse._id).toBe(scriptId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutScript(\n mock: MockAdapter,\n callback: (mockScriptId: string, mockScriptObj) => void\n) {\n mock\n .onPut(/.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/scripts\\/.+/)\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const scriptId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockScriptObj = JSON.parse(config.data);\n callback(scriptId, mockScriptObj);\n return [mockStatus, mockScriptObj];\n });\n}\n\nexport function getScriptByName(scriptName: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./ScriptApi/getScriptByName/${scriptName}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\n/**\n * SAML Mocks\n */\nexport function getSaml2ProviderImportData(entityId: string) {\n const importData = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Ops/importSaml2Provider/${getTypedFilename(\n entityId,\n 'saml',\n 'json'\n )}`\n ),\n 'utf8'\n )\n );\n return importData;\n}\n\nexport function getSaml2ProvidersImportData() {\n const importData = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Ops/importSaml2Providers/allAlphaProviders.saml.json`\n ),\n 'utf8'\n )\n );\n return importData;\n}\n\nexport function getSaml2Providers() {\n const providers = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './Saml2Api/getProviders/providers.json'),\n 'utf8'\n )\n );\n return providers;\n}\n\nexport function mockGetSaml2Providers(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getSaml2Providers();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockFindSaml2Providers(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\?_queryFilter=.+?&_fields=.+/\n )\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const filter = parsed.searchParam['_queryFilter'];\n const entityId = filter.match(/entityId eq '(.+?)'/)[1];\n const mockStatus = 200;\n let mockResponse = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'EXACT',\n totalPagedResults: 1,\n remainingPagedResults: -1,\n };\n try {\n mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/findSaml2Providers/${slugify(entityId)}_stub.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined')\n expect(mockResponse.result[0].entityId).toBe(entityId);\n } catch (error) {\n // ignore errors\n }\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getCirclesOfTrust() {\n const treeObjects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './CirclesOfTrustApi/getCirclesOfTrust/cots.json'\n ),\n 'utf8'\n )\n );\n return treeObjects;\n}\n\nexport function mockGetCirclesOfTrust(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getCirclesOfTrust();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateCircleOfTrust(\n mock: MockAdapter,\n callback: (mockCotId: string, mockCotObj) => void\n) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\/\\?_action=create/\n )\n .reply(function (config) {\n const mockCotObj = JSON.parse(config.data);\n const cotId = mockCotObj._id;\n const mockStatus = 200;\n callback(cotId, mockCotObj);\n return [mockStatus, mockCotObj];\n });\n}\n\nexport function mockUpdateCircleOfTrust(\n mock: MockAdapter,\n callback: (mockCotId: string, mockCotObj) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const cotId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockCotObj = JSON.parse(config.data);\n callback(cotId, mockCotObj);\n return [mockStatus, mockCotObj];\n });\n}\n\nexport function mockGetSaml2ProviderByLocationAndId(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/.+?\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const location = elements[elements?.length - 2];\n const providerId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/getProviderByLocationAndId/${location}/${providerId}.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined')\n expect(mockResponse._id).toBe(providerId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateSaml2Provider(\n mock: MockAdapter,\n callback: (\n mockSaml2ProviderId64: string,\n mockSaml2ProviderLocation: string,\n mockSaml2ProviderObj\n ) => void\n) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/(hosted|remote)\\/\\?_action=(create|importEntity)/\n )\n .reply(function (config) {\n const elements = config.url\n ? parseUrl(config.url).pathname.split('/')\n : [];\n const mockSaml2ProviderLocation = elements[elements?.length - 2];\n const mockSaml2ProviderObj = JSON.parse(config.data);\n let mockSaml2ProviderId64 = '';\n if (mockSaml2ProviderObj._id) {\n mockSaml2ProviderId64 = mockSaml2ProviderObj._id;\n } else {\n const metaDataXml = decode(mockSaml2ProviderObj.standardMetadata);\n mockSaml2ProviderId64 = encode(\n metaDataXml.match(/entityID=\"(.+?)\"/)[1],\n false\n );\n }\n const mockStatus = 200;\n callback(\n mockSaml2ProviderId64,\n mockSaml2ProviderLocation,\n mockSaml2ProviderObj\n );\n return [mockStatus, mockSaml2ProviderObj];\n });\n}\n\nexport function mockUpdateSaml2Provider(\n mock: MockAdapter,\n callback: (\n mockSaml2ProviderId64: string,\n mockSaml2ProviderLocation: string,\n mockSaml2ProviderObj\n ) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/(hosted|remote)\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const mockSaml2ProviderLocation = elements[elements?.length - 2];\n const mockSaml2ProviderId64 = elements[elements?.length - 1];\n const mockSaml2ProviderObj = JSON.parse(config.data);\n const mockStatus = 200;\n callback(\n mockSaml2ProviderId64,\n mockSaml2ProviderLocation,\n mockSaml2ProviderObj\n );\n return [mockStatus, mockSaml2ProviderObj];\n });\n}\n\nexport function mockGetSaml2ProviderMetadata(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/saml2\\/jsp\\/exportmetadata.jsp\\?entityid=.+?&realm=.+/)\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const realm = parsed.searchParam['realm'];\n const entityId = parsed.searchParam['entityid'];\n const mockStatus = 200;\n const mockResponse = fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/getProviderMetadata/${realm}/${encodeURIComponent(\n entityId\n )}.xml`\n ),\n 'utf8'\n );\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\n/**\n * Social Identity Provider Mocks\n */\n\nexport function getSocialProviders() {\n const objects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './SocialIdentityProvidersApi/getSocialIdentityProviders/socialIdentityProviders.json'\n ),\n 'utf8'\n )\n );\n return objects;\n}\n\nexport function mockGetSocialProviders(mock: MockAdapter) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/services\\/SocialIdentityProviders\\?_action=nextdescendents/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getSocialProviders();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutSocialProviderByTypeAndId(\n mock: MockAdapter,\n callback: (\n mockSocialProviderId: string,\n mockSocialProviderType: string,\n mockSocialProviderObj\n ) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/services\\/SocialIdentityProviders\\/.+?\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const mockSocialProviderType = elements[elements?.length - 2];\n const mockSocialProviderId = elements[elements?.length - 1];\n const mockSocialProviderObj = JSON.parse(config.data);\n const mockStatus = 200;\n callback(\n mockSocialProviderId,\n mockSocialProviderType,\n mockSocialProviderObj\n );\n return [mockStatus, mockSocialProviderObj];\n });\n}\n\n/**\n * Agent test utils\n */\n\nexport function getAgent(agentType, agentId) {\n const objects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./AgentApi/getAgentByTypeAndId/${agentType}/${agentId}.json`\n ),\n 'utf8'\n )\n );\n return objects;\n}\n\n/****\n **\n ** IDM Mocks and Utils\n **\n **/\n\nexport function mockGetAllConfigEntities(mock: MockAdapter) {\n mock.onGet(/.*?\\/openidm\\/config$/).reply(function () {\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getAllConfigEntities/entities.json`\n ),\n 'utf8'\n )\n );\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetConfigEntity(\n mock: MockAdapter,\n variation: string = null\n) {\n mock.onGet(/.*?\\/openidm\\/config\\/.+/).reply(function (config) {\n const entityId = config.url\n ? config.url.substring(config.url.indexOf('/config/') + 8)\n : '';\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getConfigEntity/${\n variation ? entityId + '-' + variation : entityId\n }.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(entityId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutConfigEntity(\n mock: MockAdapter,\n callback: (mockEntityId: string, mockEntityObj) => void\n) {\n mock.onPut(/.*?\\/openidm\\/config\\/.+/).reply(function (config) {\n const entityId = config.url\n ? config.url.substring(config.url.indexOf('/config/') + 8)\n : '';\n const mockStatus = 200;\n const mockResponse = JSON.parse(config.data);\n callback(entityId, mockResponse);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetConfigEntitiesByType(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/openidm\\/config\\?_queryFilter=_id%20sw%20'.+?'/)\n .reply(function (config) {\n console.log('config.url=' + config.url);\n const entityType = config.url\n ? config.url.match(\n /.*?\\/openidm\\/config\\?_queryFilter=_id%20sw%20'(.+?)'/\n )[1]\n : '';\n const mockStatus = 200;\n console.log('entityType=' + entityType);\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getConfigEntitiesByType/${entityType}.json`\n ),\n 'utf8'\n )\n );\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateManagedObject(\n mock: MockAdapter,\n callback: (mockManagedObjId: string, mockManagedObj) => void\n) {\n mock\n .onPost(/.*?\\/openidm\\/managed\\/.+?\\?_action=create/)\n .reply(function (config) {\n const mockStatus = 201;\n const mockResponse = JSON.parse(config.data);\n const moId = uuidv4();\n mockResponse._id = moId;\n callback(moId, mockResponse);\n return [mockStatus, mockResponse];\n });\n}\n\n/****\n **\n ** Mock Helpers & Utils\n **\n **/\n\nexport function mockAll(mock: MockAdapter) {\n mockGetServerInfo(mock);\n mockGetServerVersionInfo(mock);\n mockStep(mock);\n mockAuthorize(mock);\n mockAccessToken(mock);\n mockGetTrees(mock);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ForgeRockApiMockEngine.js","names":["__dirname","path","dirname","fileURLToPath","readJsonFile","file","json","JSON","parse","fs","readFileSync","resolve","getServerInfo","variation","prefix","infoObject","getServerVersionInfo","versionObject","mockGetServerInfo","mock","onGet","reply","config","elements","url","split","id","length","mockStatus","mockResponse","expect","_id","toBe","mockGetServerVersionInfo","getTreeStepResponse","treeId","authId","key","treeStepsObj","mockStep","onPost","parsed","parseUrl","searchParam","body","data","toBeTruthy","mockAuthorize","parseQueryString","responseType","undefined","mockHeaders","headers","header","mockAccessToken","grantType","code","Object","entries","getTrees","treeObjects","mockGetTrees","getTree","treeObject","getJourney","journeyId","mockGetTree","mockPutTree","callback","onPut","mockTreeObj","mockGetNode","nodeType","nodeId","mockPutNode","mockNodeObj","getScript","scriptId","mockGetScript","mockPutScript","mockScriptObj","getScriptByName","scriptName","getSaml2ProviderImportData","entityId","importData","getTypedFilename","getSaml2ProvidersImportData","getSaml2Providers","providers","mockGetSaml2Providers","mockFindSaml2Providers","filter","match","result","resultCount","pagedResultsCookie","totalPagedResultsPolicy","totalPagedResults","remainingPagedResults","slugify","error","getCirclesOfTrust","mockGetCirclesOfTrust","mockCreateCircleOfTrust","mockCotObj","cotId","mockUpdateCircleOfTrust","mockGetSaml2ProviderByLocationAndId","location","providerId","mockCreateSaml2Provider","pathname","mockSaml2ProviderLocation","mockSaml2ProviderObj","mockSaml2ProviderId64","metaDataXml","decode","standardMetadata","encode","mockUpdateSaml2Provider","mockGetSaml2ProviderMetadata","realm","encodeURIComponent","getSocialProviders","objects","mockGetSocialProviders","mockPutSocialProviderByTypeAndId","mockSocialProviderType","mockSocialProviderId","mockSocialProviderObj","getAgent","agentType","agentId","mockGetAllConnectorServers","mockGetAllConfigEntities","mockGetConfigEntity","substring","indexOf","mockPutConfigEntity","mockGetConfigEntitiesByType","console","log","entityType","mockCreateManagedObject","moId","uuidv4","mockAll"],"sources":["test/mocks/ForgeRockApiMockEngine.ts"],"sourcesContent":["import MockAdapter from 'axios-mock-adapter';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { encode, decode } from '../../api/utils/Base64';\nimport { parseQueryString, parseUrl } from '../../api/utils/ApiUtils';\nimport slugify from 'slugify';\nimport { getTypedFilename } from '../../ops/utils/ExportImportUtils';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport function readJsonFile(file: string) {\n const json = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, `${file}`), 'utf8')\n );\n return json;\n}\n\n/****\n **\n ** AM Mocks and Utils\n **\n **/\n\n/**\n * Authentication Mocks\n */\n\nexport function getServerInfo(variation: string = null) {\n const prefix = 'info';\n const infoObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./ServerInfoApi/getServerInfo/${\n variation ? prefix + '-' + variation : prefix\n }.json`\n ),\n 'utf8'\n )\n );\n return infoObject;\n}\n\nexport function getServerVersionInfo(variation: string = null) {\n const prefix = 'version';\n const versionObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./ServerInfoApi/getServerVersionInfo/${\n variation ? prefix + '-' + variation : prefix\n }.json`\n ),\n 'utf8'\n )\n );\n return versionObject;\n}\n\nexport function mockGetServerInfo(mock: MockAdapter, variation: string = null) {\n mock.onGet(/.*?\\/json\\/serverinfo\\/\\*/).reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const id = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getServerInfo(variation);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(id);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetServerVersionInfo(\n mock: MockAdapter,\n variation: string = null\n) {\n mock.onGet(/.*?\\/json\\/serverinfo\\/version/).reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const id = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getServerVersionInfo(variation);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(id);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getTreeStepResponse(\n treeId: string | undefined,\n authId: string | undefined\n) {\n const key = authId ? authId : 'undefined';\n const treeStepsObj = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./AuthenticateApi/step/${treeId ? treeId : 'default'}_steps.json`\n ),\n 'utf8'\n )\n );\n return treeStepsObj[key];\n}\n\nexport function mockStep(mock: MockAdapter) {\n mock\n .onPost(/.*?\\/json\\/realms\\/root\\/authenticate.*/)\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const treeId = parsed.searchParam['authIndexValue'];\n const body = JSON.parse(config.data);\n const authId = body.authId;\n const mockStatus = 200;\n const mockResponse = getTreeStepResponse(treeId, authId);\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockAuthorize(mock: MockAdapter) {\n mock.onPost(/.*?\\/oauth2\\/authorize.*/).reply(function (config) {\n const parsed = parseQueryString(config.data);\n const responseType = parsed['response_type'];\n let mockStatus = 500;\n const mockResponse = undefined;\n const mockHeaders = {};\n if (responseType === 'code') {\n mockStatus = 302;\n const headers = readJsonFile(`./OAuth2OIDCApi/authorize/headers.json`);\n for (const header of headers) {\n mockHeaders[header['key']] = header['value'];\n }\n }\n if (typeof expect !== 'undefined') expect(mockHeaders).toBeTruthy();\n return [mockStatus, mockResponse, mockHeaders];\n });\n}\n\nexport function mockAccessToken(mock: MockAdapter) {\n mock.onPost(/.*?\\/oauth2\\/access_token.*/).reply(function (config) {\n const parsed = parseQueryString(config.data);\n const grantType = parsed['grant_type'];\n const code = parsed['code'];\n let mockStatus = 500;\n let mockResponse = undefined;\n const mockHeaders = {};\n if (grantType === 'authorization_code' && code) {\n mockStatus = 200;\n mockResponse = readJsonFile(`./OAuth2OIDCApi/accessToken/body.json`);\n const headers = readJsonFile(`./OAuth2OIDCApi/accessToken/headers.json`);\n for (const header of Object.entries(headers)) {\n mockHeaders[header['key']] = header['value'];\n }\n }\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse, mockHeaders];\n });\n}\n\n/**\n * Tree Mocks\n */\n\nexport function getTrees() {\n const treeObjects = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './TreeApi/getTrees/trees.json'),\n 'utf8'\n )\n );\n return treeObjects;\n}\n\nexport function mockGetTrees(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getTrees();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getTree(treeId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./TreeApi/getTree/${treeId}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function getJourney(journeyId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./JourneyOps/importJourney/${journeyId}.journey.json`\n ),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function mockGetTree(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const treeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getTree(treeId);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(treeId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutTree(\n mock: MockAdapter,\n callback: (mockTreeId: string, mockTreeObj) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const treeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockTreeObj = JSON.parse(config.data);\n callback(treeId, mockTreeObj);\n return [mockStatus, mockTreeObj];\n });\n}\n\n/**\n * Node Mocks\n */\n\nexport function mockGetNode(mock: MockAdapter) {\n mock\n .onGet(\n /\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/nodes\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const nodeType = elements[elements?.length - 2];\n const nodeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./NodeApi/getNode/${nodeType}/${nodeId}.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(nodeId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutNode(\n mock: MockAdapter,\n callback: (mockNodeId: string, mockNodeObj) => void\n) {\n mock\n .onPut(\n /\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/nodes\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const nodeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockNodeObj = JSON.parse(config.data);\n callback(nodeId, mockNodeObj);\n return [mockStatus, mockNodeObj];\n });\n}\n\n/**\n * Script Mocks\n */\n\nexport function getScript(scriptId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./ScriptApi/getScript/${scriptId}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function mockGetScript(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/scripts\\/.+/)\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const scriptId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getScript(scriptId);\n if (typeof expect !== 'undefined')\n expect(mockResponse._id).toBe(scriptId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutScript(\n mock: MockAdapter,\n callback: (mockScriptId: string, mockScriptObj) => void\n) {\n mock\n .onPut(/.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/scripts\\/.+/)\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const scriptId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockScriptObj = JSON.parse(config.data);\n callback(scriptId, mockScriptObj);\n return [mockStatus, mockScriptObj];\n });\n}\n\nexport function getScriptByName(scriptName: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./ScriptApi/getScriptByName/${scriptName}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\n/**\n * SAML Mocks\n */\nexport function getSaml2ProviderImportData(entityId: string) {\n const importData = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Ops/importSaml2Provider/${getTypedFilename(\n entityId,\n 'saml',\n 'json'\n )}`\n ),\n 'utf8'\n )\n );\n return importData;\n}\n\nexport function getSaml2ProvidersImportData() {\n const importData = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Ops/importSaml2Providers/allAlphaProviders.saml.json`\n ),\n 'utf8'\n )\n );\n return importData;\n}\n\nexport function getSaml2Providers() {\n const providers = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './Saml2Api/getProviders/providers.json'),\n 'utf8'\n )\n );\n return providers;\n}\n\nexport function mockGetSaml2Providers(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getSaml2Providers();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockFindSaml2Providers(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\?_queryFilter=.+?&_fields=.+/\n )\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const filter = parsed.searchParam['_queryFilter'];\n const entityId = filter.match(/entityId eq '(.+?)'/)[1];\n const mockStatus = 200;\n let mockResponse = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'EXACT',\n totalPagedResults: 1,\n remainingPagedResults: -1,\n };\n try {\n mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/findSaml2Providers/${slugify(entityId)}_stub.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined')\n expect(mockResponse.result[0].entityId).toBe(entityId);\n } catch (error) {\n // ignore errors\n }\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getCirclesOfTrust() {\n const treeObjects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './CirclesOfTrustApi/getCirclesOfTrust/cots.json'\n ),\n 'utf8'\n )\n );\n return treeObjects;\n}\n\nexport function mockGetCirclesOfTrust(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getCirclesOfTrust();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateCircleOfTrust(\n mock: MockAdapter,\n callback: (mockCotId: string, mockCotObj) => void\n) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\/\\?_action=create/\n )\n .reply(function (config) {\n const mockCotObj = JSON.parse(config.data);\n const cotId = mockCotObj._id;\n const mockStatus = 200;\n callback(cotId, mockCotObj);\n return [mockStatus, mockCotObj];\n });\n}\n\nexport function mockUpdateCircleOfTrust(\n mock: MockAdapter,\n callback: (mockCotId: string, mockCotObj) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const cotId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockCotObj = JSON.parse(config.data);\n callback(cotId, mockCotObj);\n return [mockStatus, mockCotObj];\n });\n}\n\nexport function mockGetSaml2ProviderByLocationAndId(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/.+?\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const location = elements[elements?.length - 2];\n const providerId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/getProviderByLocationAndId/${location}/${providerId}.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined')\n expect(mockResponse._id).toBe(providerId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateSaml2Provider(\n mock: MockAdapter,\n callback: (\n mockSaml2ProviderId64: string,\n mockSaml2ProviderLocation: string,\n mockSaml2ProviderObj\n ) => void\n) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/(hosted|remote)\\/\\?_action=(create|importEntity)/\n )\n .reply(function (config) {\n const elements = config.url\n ? parseUrl(config.url).pathname.split('/')\n : [];\n const mockSaml2ProviderLocation = elements[elements?.length - 2];\n const mockSaml2ProviderObj = JSON.parse(config.data);\n let mockSaml2ProviderId64 = '';\n if (mockSaml2ProviderObj._id) {\n mockSaml2ProviderId64 = mockSaml2ProviderObj._id;\n } else {\n const metaDataXml = decode(mockSaml2ProviderObj.standardMetadata);\n mockSaml2ProviderId64 = encode(\n metaDataXml.match(/entityID=\"(.+?)\"/)[1],\n false\n );\n }\n const mockStatus = 200;\n callback(\n mockSaml2ProviderId64,\n mockSaml2ProviderLocation,\n mockSaml2ProviderObj\n );\n return [mockStatus, mockSaml2ProviderObj];\n });\n}\n\nexport function mockUpdateSaml2Provider(\n mock: MockAdapter,\n callback: (\n mockSaml2ProviderId64: string,\n mockSaml2ProviderLocation: string,\n mockSaml2ProviderObj\n ) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/(hosted|remote)\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const mockSaml2ProviderLocation = elements[elements?.length - 2];\n const mockSaml2ProviderId64 = elements[elements?.length - 1];\n const mockSaml2ProviderObj = JSON.parse(config.data);\n const mockStatus = 200;\n callback(\n mockSaml2ProviderId64,\n mockSaml2ProviderLocation,\n mockSaml2ProviderObj\n );\n return [mockStatus, mockSaml2ProviderObj];\n });\n}\n\nexport function mockGetSaml2ProviderMetadata(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/saml2\\/jsp\\/exportmetadata.jsp\\?entityid=.+?&realm=.+/)\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const realm = parsed.searchParam['realm'];\n const entityId = parsed.searchParam['entityid'];\n const mockStatus = 200;\n const mockResponse = fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/getProviderMetadata/${realm}/${encodeURIComponent(\n entityId\n )}.xml`\n ),\n 'utf8'\n );\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\n/**\n * Social Identity Provider Mocks\n */\n\nexport function getSocialProviders() {\n const objects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './SocialIdentityProvidersApi/getSocialIdentityProviders/socialIdentityProviders.json'\n ),\n 'utf8'\n )\n );\n return objects;\n}\n\nexport function mockGetSocialProviders(mock: MockAdapter) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/services\\/SocialIdentityProviders\\?_action=nextdescendents/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getSocialProviders();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutSocialProviderByTypeAndId(\n mock: MockAdapter,\n callback: (\n mockSocialProviderId: string,\n mockSocialProviderType: string,\n mockSocialProviderObj\n ) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/services\\/SocialIdentityProviders\\/.+?\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const mockSocialProviderType = elements[elements?.length - 2];\n const mockSocialProviderId = elements[elements?.length - 1];\n const mockSocialProviderObj = JSON.parse(config.data);\n const mockStatus = 200;\n callback(\n mockSocialProviderId,\n mockSocialProviderType,\n mockSocialProviderObj\n );\n return [mockStatus, mockSocialProviderObj];\n });\n}\n\n/**\n * Agent test utils\n */\n\nexport function getAgent(agentType, agentId) {\n const objects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./AgentApi/getAgentByTypeAndId/${agentType}/${agentId}.json`\n ),\n 'utf8'\n )\n );\n return objects;\n}\n\n/****\n **\n ** IDM Mocks and Utils\n **\n **/\n\n// openidm/system?_action=testConnectorServers\nexport function mockGetAllConnectorServers(mock: MockAdapter) {\n mock.onGet(/.*?\\/openidm\\/system\\.+/).reply(function () {\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './IdmConfigApi/getAllConnectorServers/openicf.json'\n ),\n 'utf8'\n )\n );\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetAllConfigEntities(mock: MockAdapter) {\n mock.onGet(/.*?\\/openidm\\/config$/).reply(function () {\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getAllConfigEntities/entities.json`\n ),\n 'utf8'\n )\n );\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetConfigEntity(\n mock: MockAdapter,\n variation: string = null\n) {\n mock.onGet(/.*?\\/openidm\\/config\\/.+/).reply(function (config) {\n const entityId = config.url\n ? config.url.substring(config.url.indexOf('/config/') + 8)\n : '';\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getConfigEntity/${\n variation ? entityId + '-' + variation : entityId\n }.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(entityId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutConfigEntity(\n mock: MockAdapter,\n callback: (mockEntityId: string, mockEntityObj) => void\n) {\n mock.onPut(/.*?\\/openidm\\/config\\/.+/).reply(function (config) {\n const entityId = config.url\n ? config.url.substring(config.url.indexOf('/config/') + 8)\n : '';\n const mockStatus = 200;\n const mockResponse = JSON.parse(config.data);\n callback(entityId, mockResponse);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetConfigEntitiesByType(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/openidm\\/config\\?_queryFilter=_id%20sw%20'.+?'/)\n .reply(function (config) {\n console.log('config.url=' + config.url);\n const entityType = config.url\n ? config.url.match(\n /.*?\\/openidm\\/config\\?_queryFilter=_id%20sw%20'(.+?)'/\n )[1]\n : '';\n const mockStatus = 200;\n console.log('entityType=' + entityType);\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getConfigEntitiesByType/${entityType}.json`\n ),\n 'utf8'\n )\n );\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateManagedObject(\n mock: MockAdapter,\n callback: (mockManagedObjId: string, mockManagedObj) => void\n) {\n mock\n .onPost(/.*?\\/openidm\\/managed\\/.+?\\?_action=create/)\n .reply(function (config) {\n const mockStatus = 201;\n const mockResponse = JSON.parse(config.data);\n const moId = uuidv4();\n mockResponse._id = moId;\n callback(moId, mockResponse);\n return [mockStatus, mockResponse];\n });\n}\n\n/****\n **\n ** Mock Helpers & Utils\n **\n **/\n\nexport function mockAll(mock: MockAdapter) {\n mockGetServerInfo(mock);\n mockGetServerVersionInfo(mock);\n mockStep(mock);\n mockAuthorize(mock);\n mockAccessToken(mock);\n mockGetTrees(mock);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import util from 'util';
|
|
2
|
+
import { generateIdmApi } from './BaseApi';
|
|
3
|
+
import { getTenantURL } from './utils/ApiUtils';
|
|
4
|
+
import * as state from '../shared/State';
|
|
5
|
+
const testConnectorServersURLTemplate = '%s/openidm/system?_action=testConnectorServers';
|
|
6
|
+
/**
|
|
7
|
+
* Test connector servers
|
|
8
|
+
* @returns {Promise<TestConnectorServersInterface>} a promise that resolves to a TestConnectorServersInterface object
|
|
9
|
+
*/
|
|
10
|
+
export async function testConnectorServers() {
|
|
11
|
+
const urlString = util.format(testConnectorServersURLTemplate, getTenantURL(state.getHost()));
|
|
12
|
+
const {
|
|
13
|
+
data
|
|
14
|
+
} = await generateIdmApi().post(urlString);
|
|
15
|
+
return data;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=IdmSystemApi.js.map
|
package/esm/ops/IdmOps.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { getAllConfigEntities as
|
|
1
|
+
import { getAllConfigEntities as _getAllConfigEntities, getConfigEntity as _getConfigEntity, putConfigEntity as _putConfigEntity, getConfigEntitiesByType as _getConfigEntitiesByType, queryAllManagedObjectsByType as _queryAllManagedObjectsByType } from '../api/IdmConfigApi';
|
|
2
|
+
import { testConnectorServers as _testConnectorServers } from '../api/IdmSystemApi';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Get all IDM config entities
|
|
5
6
|
* @returns {Promise} a promise that resolves to all IDM config entities
|
|
6
7
|
*/
|
|
7
8
|
export async function getAllConfigEntities() {
|
|
8
|
-
return
|
|
9
|
+
return _getAllConfigEntities();
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
/**
|
|
@@ -14,7 +15,7 @@ export async function getAllConfigEntities() {
|
|
|
14
15
|
* @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type
|
|
15
16
|
*/
|
|
16
17
|
export async function getConfigEntitiesByType(type) {
|
|
17
|
-
return
|
|
18
|
+
return _getConfigEntitiesByType(type);
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
/**
|
|
@@ -23,7 +24,7 @@ export async function getConfigEntitiesByType(type) {
|
|
|
23
24
|
* @returns {Promise<unknown>} a promise that resolves to an IDM config entity
|
|
24
25
|
*/
|
|
25
26
|
export async function getConfigEntity(entityId) {
|
|
26
|
-
return
|
|
27
|
+
return _getConfigEntity(entityId);
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
/**
|
|
@@ -33,7 +34,7 @@ export async function getConfigEntity(entityId) {
|
|
|
33
34
|
* @returns {Promise<unknown>} a promise that resolves to an IDM config entity
|
|
34
35
|
*/
|
|
35
36
|
export async function putConfigEntity(entityId, entityData) {
|
|
36
|
-
return
|
|
37
|
+
return _putConfigEntity(entityId, entityData);
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
/**
|
|
@@ -44,6 +45,15 @@ export async function putConfigEntity(entityId, entityData) {
|
|
|
44
45
|
* @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type
|
|
45
46
|
*/
|
|
46
47
|
export async function queryAllManagedObjectsByType(type, fields, pageCookie) {
|
|
47
|
-
return
|
|
48
|
+
return _queryAllManagedObjectsByType(type, fields, pageCookie);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Test connector servers
|
|
53
|
+
* @returns {Promise<ConnectorServerStatusInterface[]>} a promise that resolves to an array of ConnectorServerStatusInterface objects
|
|
54
|
+
*/
|
|
55
|
+
export async function testConnectorServers() {
|
|
56
|
+
const response = await _testConnectorServers();
|
|
57
|
+
return response.openicf;
|
|
48
58
|
}
|
|
49
59
|
//# sourceMappingURL=IdmOps.js.map
|
package/esm/ops/IdmOps.test.mjs
CHANGED
|
@@ -165,5 +165,14 @@ describe('IdmOps', () => {
|
|
|
165
165
|
expect(response).toMatchSnapshot();
|
|
166
166
|
});
|
|
167
167
|
});
|
|
168
|
+
describe('testConnectorServers()', () => {
|
|
169
|
+
test('0: Method is implemented', async () => {
|
|
170
|
+
expect(Idm.testConnectorServers).toBeDefined();
|
|
171
|
+
});
|
|
172
|
+
test(`1: Test connector servers`, async () => {
|
|
173
|
+
const response = await Idm.testConnectorServers();
|
|
174
|
+
expect(response).toMatchSnapshot();
|
|
175
|
+
});
|
|
176
|
+
});
|
|
168
177
|
});
|
|
169
178
|
//# sourceMappingURL=IdmOps.test.js.map
|
|
@@ -5,24 +5,24 @@
|
|
|
5
5
|
*
|
|
6
6
|
* This step breaks down into 5 phases:
|
|
7
7
|
*
|
|
8
|
-
* Phase 1: Record non-destructive tests
|
|
9
|
-
* Phase 2: Record
|
|
8
|
+
* Phase 1: Record Group 1 of non-destructive tests
|
|
9
|
+
* Phase 2: Record Group 2 of non-destructive tests - Import all
|
|
10
10
|
* Phase 3: Record Group 1 of DESTRUCTIVE tests - Deletes by entity id
|
|
11
|
-
* Phase 4: Record Group
|
|
11
|
+
* Phase 4: Record Group 2 of DESTRUCTIVE tests - Delete all
|
|
12
12
|
* Phase 5: Record Group 3 of DESTRUCTIVE tests - Delete all raw (legacy API - pre 7.0)
|
|
13
13
|
*
|
|
14
14
|
* Because destructive tests interfere with the recording of non-destructive
|
|
15
15
|
* tests and also interfere among themselves, they have to be run in groups
|
|
16
16
|
* of non-interfering tests.
|
|
17
17
|
*
|
|
18
|
-
* To record
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* To record API responses, you must call the test:record script and
|
|
19
|
+
* override all the connection state variables required to connect to the
|
|
20
|
+
* env to record from and also indicate the phase:
|
|
21
21
|
*
|
|
22
22
|
* FRODO_DEBUG=1 FRODO_RECORD_PHASE=1 FRODO_HOST=frodo-dev npm run test:record Saml2Ops
|
|
23
23
|
* FRODO_DEBUG=1 FRODO_RECORD_PHASE=2 FRODO_HOST=frodo-dev npm run test:record Saml2Ops
|
|
24
24
|
*
|
|
25
|
-
* THESE TESTS ARE DESTRUCTIVE!!! DO NOT RUN AGAINST AN ENV WITH ACTIVE
|
|
25
|
+
* THESE TESTS ARE DESTRUCTIVE!!! DO NOT RUN AGAINST AN ENV WITH ACTIVE CONFIGURATION!!!
|
|
26
26
|
*
|
|
27
27
|
* FRODO_DEBUG=1 FRODO_RECORD_PHASE=3 FRODO_HOST=frodo-dev npm run test:record Saml2Ops
|
|
28
28
|
* FRODO_DEBUG=1 FRODO_RECORD_PHASE=4 FRODO_HOST=frodo-dev npm run test:record Saml2Ops
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
*
|
|
34
34
|
* 2. Update snapshots
|
|
35
35
|
*
|
|
36
|
-
* After recording API responses, you must manually update/create snapshots
|
|
36
|
+
* After recording API responses, you must manually update/create snapshots
|
|
37
|
+
* by running:
|
|
37
38
|
*
|
|
38
39
|
* FRODO_DEBUG=1 npm run test:update Saml2Ops
|
|
39
40
|
*
|
|
@@ -384,6 +384,14 @@ export function getAgent(agentType, agentId) {
|
|
|
384
384
|
**
|
|
385
385
|
**/
|
|
386
386
|
|
|
387
|
+
// openidm/system?_action=testConnectorServers
|
|
388
|
+
export function mockGetAllConnectorServers(mock) {
|
|
389
|
+
mock.onGet(/.*?\/openidm\/system\.+/).reply(function () {
|
|
390
|
+
const mockStatus = 200;
|
|
391
|
+
const mockResponse = JSON.parse(fs.readFileSync(path.resolve(__dirname, './IdmConfigApi/getAllConnectorServers/openicf.json'), 'utf8'));
|
|
392
|
+
return [mockStatus, mockResponse];
|
|
393
|
+
});
|
|
394
|
+
}
|
|
387
395
|
export function mockGetAllConfigEntities(mock) {
|
|
388
396
|
mock.onGet(/.*?\/openidm\/config$/).reply(function () {
|
|
389
397
|
const mockStatus = 200;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rockcarver/frodo-lib",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.5",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./esm/index.mjs",
|
|
@@ -82,6 +82,10 @@
|
|
|
82
82
|
"name": "Ali Falahi",
|
|
83
83
|
"email": "ali@falahi.com"
|
|
84
84
|
},
|
|
85
|
+
{
|
|
86
|
+
"name": "Nick Hangartner",
|
|
87
|
+
"email": "nhangartner@gmail.com"
|
|
88
|
+
},
|
|
85
89
|
{
|
|
86
90
|
"name": "Marcel Maas",
|
|
87
91
|
"email": "maas.marcel@gmail.com"
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ConnectorServerStatusInterface {
|
|
2
|
+
name: string;
|
|
3
|
+
type: string;
|
|
4
|
+
ok: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface TestConnectorServersInterface {
|
|
7
|
+
openicf: ConnectorServerStatusInterface[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Test connector servers
|
|
11
|
+
* @returns {Promise<TestConnectorServersInterface>} a promise that resolves to a TestConnectorServersInterface object
|
|
12
|
+
*/
|
|
13
|
+
export declare function testConnectorServers(): Promise<TestConnectorServersInterface>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api/IdmSystemApi.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;CACb;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,8BAA8B,EAAE,CAAC;CAC3C;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,6BAA6B,CAAC,CAOnF","file":"IdmSystemApi.d.ts","sourcesContent":["import util from 'util';\nimport { generateIdmApi } from './BaseApi';\nimport { getTenantURL } from './utils/ApiUtils';\nimport * as state from '../shared/State';\n\nconst testConnectorServersURLTemplate =\n '%s/openidm/system?_action=testConnectorServers';\n\nexport interface ConnectorServerStatusInterface {\n name: string;\n type: string;\n ok: boolean;\n}\n\nexport interface TestConnectorServersInterface {\n openicf: ConnectorServerStatusInterface[];\n}\n\n/**\n * Test connector servers\n * @returns {Promise<TestConnectorServersInterface>} a promise that resolves to a TestConnectorServersInterface object\n */\nexport async function testConnectorServers(): Promise<TestConnectorServersInterface> {\n const urlString = util.format(\n testConnectorServersURLTemplate,\n getTenantURL(state.getHost())\n );\n const { data } = await generateIdmApi().post(urlString);\n return data as TestConnectorServersInterface;\n}\n"]}
|
package/types/ops/IdmOps.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ConnectorServerStatusInterface } from '../api/IdmSystemApi';
|
|
1
2
|
/**
|
|
2
3
|
* Get all IDM config entities
|
|
3
4
|
* @returns {Promise} a promise that resolves to all IDM config entities
|
|
@@ -37,3 +38,8 @@ export declare function queryAllManagedObjectsByType(type: any, fields: any, pag
|
|
|
37
38
|
totalPagedResults: number;
|
|
38
39
|
remainingPagedResults: number;
|
|
39
40
|
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Test connector servers
|
|
43
|
+
* @returns {Promise<ConnectorServerStatusInterface[]>} a promise that resolves to an array of ConnectorServerStatusInterface objects
|
|
44
|
+
*/
|
|
45
|
+
export declare function testConnectorServers(): Promise<ConnectorServerStatusInterface[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ops/IdmOps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/ops/IdmOps.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,8BAA8B,EAC/B,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,wBAAsB,oBAAoB,iBAEzC;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,KAAA,gBAEjD;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,QAAQ,KAAA,gBAE7C;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,MAAM,gBAG5B;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,KAAA,EACJ,MAAM,KAAA,EACN,UAAU,KAAA,GACT,OAAO,CAAC;IACT,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC,CAED;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CACnD,8BAA8B,EAAE,CACjC,CAGA","file":"IdmOps.d.ts","sourcesContent":["import {\n getAllConfigEntities as _getAllConfigEntities,\n getConfigEntity as _getConfigEntity,\n putConfigEntity as _putConfigEntity,\n getConfigEntitiesByType as _getConfigEntitiesByType,\n queryAllManagedObjectsByType as _queryAllManagedObjectsByType,\n} from '../api/IdmConfigApi';\nimport {\n testConnectorServers as _testConnectorServers,\n ConnectorServerStatusInterface,\n} from '../api/IdmSystemApi';\n\n/**\n * Get all IDM config entities\n * @returns {Promise} a promise that resolves to all IDM config entities\n */\nexport async function getAllConfigEntities() {\n return _getAllConfigEntities();\n}\n\n/**\n * Get IDM config entities by type\n * @param {String} type the desired type of config entity\n * @returns {Promise} a promise that resolves to an object containing all IDM config entities of the desired type\n */\nexport async function getConfigEntitiesByType(type) {\n return _getConfigEntitiesByType(type);\n}\n\n/**\n * Get an IDM config entity\n * @param {string} entityId the desired config entity\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function getConfigEntity(entityId) {\n return _getConfigEntity(entityId);\n}\n\n/**\n * Put IDM config entity\n * @param {string} entityId config entity id\n * @param {string} entityData config entity object\n * @returns {Promise<unknown>} a promise that resolves to an IDM config entity\n */\nexport async function putConfigEntity(\n entityId: string,\n entityData: string | object\n) {\n return _putConfigEntity(entityId, entityData);\n}\n\n/**\n * Query managed objects\n * @param {String} type managed object type\n * @param {[String]} fields fields to retrieve\n * @param {String} pageCookie paged results cookie\n * @returns {Promise<{result: any[]; resultCount: number; pagedResultsCookie: any; totalPagedResultsPolicy: string; totalPagedResults: number; remainingPagedResults: number;}>} a promise that resolves to managed objects of the desired type\n */\nexport async function queryAllManagedObjectsByType(\n type,\n fields,\n pageCookie\n): Promise<{\n result: unknown[];\n resultCount: number;\n pagedResultsCookie: string;\n totalPagedResultsPolicy: string;\n totalPagedResults: number;\n remainingPagedResults: number;\n}> {\n return _queryAllManagedObjectsByType(type, fields, pageCookie);\n}\n\n/**\n * Test connector servers\n * @returns {Promise<ConnectorServerStatusInterface[]>} a promise that resolves to an array of ConnectorServerStatusInterface objects\n */\nexport async function testConnectorServers(): Promise<\n ConnectorServerStatusInterface[]\n> {\n const response = await _testConnectorServers();\n return response.openicf;\n}\n"]}
|
|
@@ -68,6 +68,7 @@ export declare function getAgent(agentType: any, agentId: any): any;
|
|
|
68
68
|
** IDM Mocks and Utils
|
|
69
69
|
**
|
|
70
70
|
**/
|
|
71
|
+
export declare function mockGetAllConnectorServers(mock: MockAdapter): void;
|
|
71
72
|
export declare function mockGetAllConfigEntities(mock: MockAdapter): void;
|
|
72
73
|
export declare function mockGetConfigEntity(mock: MockAdapter, variation?: string): void;
|
|
73
74
|
export declare function mockPutConfigEntity(mock: MockAdapter, callback: (mockEntityId: string, mockEntityObj: any) => void): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/test/mocks/ForgeRockApiMockEngine.ts"],"names":[],"mappings":"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","file":"ForgeRockApiMockEngine.d.ts","sourcesContent":["import MockAdapter from 'axios-mock-adapter';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { encode, decode } from '../../api/utils/Base64';\nimport { parseQueryString, parseUrl } from '../../api/utils/ApiUtils';\nimport slugify from 'slugify';\nimport { getTypedFilename } from '../../ops/utils/ExportImportUtils';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport function readJsonFile(file: string) {\n const json = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, `${file}`), 'utf8')\n );\n return json;\n}\n\n/****\n **\n ** AM Mocks and Utils\n **\n **/\n\n/**\n * Authentication Mocks\n */\n\nexport function getServerInfo(variation: string = null) {\n const prefix = 'info';\n const infoObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./ServerInfoApi/getServerInfo/${\n variation ? prefix + '-' + variation : prefix\n }.json`\n ),\n 'utf8'\n )\n );\n return infoObject;\n}\n\nexport function getServerVersionInfo(variation: string = null) {\n const prefix = 'version';\n const versionObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./ServerInfoApi/getServerVersionInfo/${\n variation ? prefix + '-' + variation : prefix\n }.json`\n ),\n 'utf8'\n )\n );\n return versionObject;\n}\n\nexport function mockGetServerInfo(mock: MockAdapter, variation: string = null) {\n mock.onGet(/.*?\\/json\\/serverinfo\\/\\*/).reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const id = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getServerInfo(variation);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(id);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetServerVersionInfo(\n mock: MockAdapter,\n variation: string = null\n) {\n mock.onGet(/.*?\\/json\\/serverinfo\\/version/).reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const id = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getServerVersionInfo(variation);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(id);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getTreeStepResponse(\n treeId: string | undefined,\n authId: string | undefined\n) {\n const key = authId ? authId : 'undefined';\n const treeStepsObj = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./AuthenticateApi/step/${treeId ? treeId : 'default'}_steps.json`\n ),\n 'utf8'\n )\n );\n return treeStepsObj[key];\n}\n\nexport function mockStep(mock: MockAdapter) {\n mock\n .onPost(/.*?\\/json\\/realms\\/root\\/authenticate.*/)\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const treeId = parsed.searchParam['authIndexValue'];\n const body = JSON.parse(config.data);\n const authId = body.authId;\n const mockStatus = 200;\n const mockResponse = getTreeStepResponse(treeId, authId);\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockAuthorize(mock: MockAdapter) {\n mock.onPost(/.*?\\/oauth2\\/authorize.*/).reply(function (config) {\n const parsed = parseQueryString(config.data);\n const responseType = parsed['response_type'];\n let mockStatus = 500;\n const mockResponse = undefined;\n const mockHeaders = {};\n if (responseType === 'code') {\n mockStatus = 302;\n const headers = readJsonFile(`./OAuth2OIDCApi/authorize/headers.json`);\n for (const header of headers) {\n mockHeaders[header['key']] = header['value'];\n }\n }\n if (typeof expect !== 'undefined') expect(mockHeaders).toBeTruthy();\n return [mockStatus, mockResponse, mockHeaders];\n });\n}\n\nexport function mockAccessToken(mock: MockAdapter) {\n mock.onPost(/.*?\\/oauth2\\/access_token.*/).reply(function (config) {\n const parsed = parseQueryString(config.data);\n const grantType = parsed['grant_type'];\n const code = parsed['code'];\n let mockStatus = 500;\n let mockResponse = undefined;\n const mockHeaders = {};\n if (grantType === 'authorization_code' && code) {\n mockStatus = 200;\n mockResponse = readJsonFile(`./OAuth2OIDCApi/accessToken/body.json`);\n const headers = readJsonFile(`./OAuth2OIDCApi/accessToken/headers.json`);\n for (const header of Object.entries(headers)) {\n mockHeaders[header['key']] = header['value'];\n }\n }\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse, mockHeaders];\n });\n}\n\n/**\n * Tree Mocks\n */\n\nexport function getTrees() {\n const treeObjects = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './TreeApi/getTrees/trees.json'),\n 'utf8'\n )\n );\n return treeObjects;\n}\n\nexport function mockGetTrees(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getTrees();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getTree(treeId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./TreeApi/getTree/${treeId}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function getJourney(journeyId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./JourneyOps/importJourney/${journeyId}.journey.json`\n ),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function mockGetTree(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const treeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getTree(treeId);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(treeId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutTree(\n mock: MockAdapter,\n callback: (mockTreeId: string, mockTreeObj) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const treeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockTreeObj = JSON.parse(config.data);\n callback(treeId, mockTreeObj);\n return [mockStatus, mockTreeObj];\n });\n}\n\n/**\n * Node Mocks\n */\n\nexport function mockGetNode(mock: MockAdapter) {\n mock\n .onGet(\n /\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/nodes\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const nodeType = elements[elements?.length - 2];\n const nodeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./NodeApi/getNode/${nodeType}/${nodeId}.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(nodeId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutNode(\n mock: MockAdapter,\n callback: (mockNodeId: string, mockNodeObj) => void\n) {\n mock\n .onPut(\n /\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/nodes\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const nodeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockNodeObj = JSON.parse(config.data);\n callback(nodeId, mockNodeObj);\n return [mockStatus, mockNodeObj];\n });\n}\n\n/**\n * Script Mocks\n */\n\nexport function getScript(scriptId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./ScriptApi/getScript/${scriptId}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function mockGetScript(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/scripts\\/.+/)\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const scriptId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getScript(scriptId);\n if (typeof expect !== 'undefined')\n expect(mockResponse._id).toBe(scriptId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutScript(\n mock: MockAdapter,\n callback: (mockScriptId: string, mockScriptObj) => void\n) {\n mock\n .onPut(/.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/scripts\\/.+/)\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const scriptId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockScriptObj = JSON.parse(config.data);\n callback(scriptId, mockScriptObj);\n return [mockStatus, mockScriptObj];\n });\n}\n\nexport function getScriptByName(scriptName: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./ScriptApi/getScriptByName/${scriptName}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\n/**\n * SAML Mocks\n */\nexport function getSaml2ProviderImportData(entityId: string) {\n const importData = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Ops/importSaml2Provider/${getTypedFilename(\n entityId,\n 'saml',\n 'json'\n )}`\n ),\n 'utf8'\n )\n );\n return importData;\n}\n\nexport function getSaml2ProvidersImportData() {\n const importData = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Ops/importSaml2Providers/allAlphaProviders.saml.json`\n ),\n 'utf8'\n )\n );\n return importData;\n}\n\nexport function getSaml2Providers() {\n const providers = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './Saml2Api/getProviders/providers.json'),\n 'utf8'\n )\n );\n return providers;\n}\n\nexport function mockGetSaml2Providers(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getSaml2Providers();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockFindSaml2Providers(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\?_queryFilter=.+?&_fields=.+/\n )\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const filter = parsed.searchParam['_queryFilter'];\n const entityId = filter.match(/entityId eq '(.+?)'/)[1];\n const mockStatus = 200;\n let mockResponse = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'EXACT',\n totalPagedResults: 1,\n remainingPagedResults: -1,\n };\n try {\n mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/findSaml2Providers/${slugify(entityId)}_stub.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined')\n expect(mockResponse.result[0].entityId).toBe(entityId);\n } catch (error) {\n // ignore errors\n }\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getCirclesOfTrust() {\n const treeObjects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './CirclesOfTrustApi/getCirclesOfTrust/cots.json'\n ),\n 'utf8'\n )\n );\n return treeObjects;\n}\n\nexport function mockGetCirclesOfTrust(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getCirclesOfTrust();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateCircleOfTrust(\n mock: MockAdapter,\n callback: (mockCotId: string, mockCotObj) => void\n) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\/\\?_action=create/\n )\n .reply(function (config) {\n const mockCotObj = JSON.parse(config.data);\n const cotId = mockCotObj._id;\n const mockStatus = 200;\n callback(cotId, mockCotObj);\n return [mockStatus, mockCotObj];\n });\n}\n\nexport function mockUpdateCircleOfTrust(\n mock: MockAdapter,\n callback: (mockCotId: string, mockCotObj) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const cotId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockCotObj = JSON.parse(config.data);\n callback(cotId, mockCotObj);\n return [mockStatus, mockCotObj];\n });\n}\n\nexport function mockGetSaml2ProviderByLocationAndId(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/.+?\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const location = elements[elements?.length - 2];\n const providerId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/getProviderByLocationAndId/${location}/${providerId}.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined')\n expect(mockResponse._id).toBe(providerId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateSaml2Provider(\n mock: MockAdapter,\n callback: (\n mockSaml2ProviderId64: string,\n mockSaml2ProviderLocation: string,\n mockSaml2ProviderObj\n ) => void\n) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/(hosted|remote)\\/\\?_action=(create|importEntity)/\n )\n .reply(function (config) {\n const elements = config.url\n ? parseUrl(config.url).pathname.split('/')\n : [];\n const mockSaml2ProviderLocation = elements[elements?.length - 2];\n const mockSaml2ProviderObj = JSON.parse(config.data);\n let mockSaml2ProviderId64 = '';\n if (mockSaml2ProviderObj._id) {\n mockSaml2ProviderId64 = mockSaml2ProviderObj._id;\n } else {\n const metaDataXml = decode(mockSaml2ProviderObj.standardMetadata);\n mockSaml2ProviderId64 = encode(\n metaDataXml.match(/entityID=\"(.+?)\"/)[1],\n false\n );\n }\n const mockStatus = 200;\n callback(\n mockSaml2ProviderId64,\n mockSaml2ProviderLocation,\n mockSaml2ProviderObj\n );\n return [mockStatus, mockSaml2ProviderObj];\n });\n}\n\nexport function mockUpdateSaml2Provider(\n mock: MockAdapter,\n callback: (\n mockSaml2ProviderId64: string,\n mockSaml2ProviderLocation: string,\n mockSaml2ProviderObj\n ) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/(hosted|remote)\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const mockSaml2ProviderLocation = elements[elements?.length - 2];\n const mockSaml2ProviderId64 = elements[elements?.length - 1];\n const mockSaml2ProviderObj = JSON.parse(config.data);\n const mockStatus = 200;\n callback(\n mockSaml2ProviderId64,\n mockSaml2ProviderLocation,\n mockSaml2ProviderObj\n );\n return [mockStatus, mockSaml2ProviderObj];\n });\n}\n\nexport function mockGetSaml2ProviderMetadata(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/saml2\\/jsp\\/exportmetadata.jsp\\?entityid=.+?&realm=.+/)\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const realm = parsed.searchParam['realm'];\n const entityId = parsed.searchParam['entityid'];\n const mockStatus = 200;\n const mockResponse = fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/getProviderMetadata/${realm}/${encodeURIComponent(\n entityId\n )}.xml`\n ),\n 'utf8'\n );\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\n/**\n * Social Identity Provider Mocks\n */\n\nexport function getSocialProviders() {\n const objects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './SocialIdentityProvidersApi/getSocialIdentityProviders/socialIdentityProviders.json'\n ),\n 'utf8'\n )\n );\n return objects;\n}\n\nexport function mockGetSocialProviders(mock: MockAdapter) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/services\\/SocialIdentityProviders\\?_action=nextdescendents/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getSocialProviders();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutSocialProviderByTypeAndId(\n mock: MockAdapter,\n callback: (\n mockSocialProviderId: string,\n mockSocialProviderType: string,\n mockSocialProviderObj\n ) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/services\\/SocialIdentityProviders\\/.+?\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const mockSocialProviderType = elements[elements?.length - 2];\n const mockSocialProviderId = elements[elements?.length - 1];\n const mockSocialProviderObj = JSON.parse(config.data);\n const mockStatus = 200;\n callback(\n mockSocialProviderId,\n mockSocialProviderType,\n mockSocialProviderObj\n );\n return [mockStatus, mockSocialProviderObj];\n });\n}\n\n/**\n * Agent test utils\n */\n\nexport function getAgent(agentType, agentId) {\n const objects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./AgentApi/getAgentByTypeAndId/${agentType}/${agentId}.json`\n ),\n 'utf8'\n )\n );\n return objects;\n}\n\n/****\n **\n ** IDM Mocks and Utils\n **\n **/\n\nexport function mockGetAllConfigEntities(mock: MockAdapter) {\n mock.onGet(/.*?\\/openidm\\/config$/).reply(function () {\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getAllConfigEntities/entities.json`\n ),\n 'utf8'\n )\n );\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetConfigEntity(\n mock: MockAdapter,\n variation: string = null\n) {\n mock.onGet(/.*?\\/openidm\\/config\\/.+/).reply(function (config) {\n const entityId = config.url\n ? config.url.substring(config.url.indexOf('/config/') + 8)\n : '';\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getConfigEntity/${\n variation ? entityId + '-' + variation : entityId\n }.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(entityId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutConfigEntity(\n mock: MockAdapter,\n callback: (mockEntityId: string, mockEntityObj) => void\n) {\n mock.onPut(/.*?\\/openidm\\/config\\/.+/).reply(function (config) {\n const entityId = config.url\n ? config.url.substring(config.url.indexOf('/config/') + 8)\n : '';\n const mockStatus = 200;\n const mockResponse = JSON.parse(config.data);\n callback(entityId, mockResponse);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetConfigEntitiesByType(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/openidm\\/config\\?_queryFilter=_id%20sw%20'.+?'/)\n .reply(function (config) {\n console.log('config.url=' + config.url);\n const entityType = config.url\n ? config.url.match(\n /.*?\\/openidm\\/config\\?_queryFilter=_id%20sw%20'(.+?)'/\n )[1]\n : '';\n const mockStatus = 200;\n console.log('entityType=' + entityType);\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getConfigEntitiesByType/${entityType}.json`\n ),\n 'utf8'\n )\n );\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateManagedObject(\n mock: MockAdapter,\n callback: (mockManagedObjId: string, mockManagedObj) => void\n) {\n mock\n .onPost(/.*?\\/openidm\\/managed\\/.+?\\?_action=create/)\n .reply(function (config) {\n const mockStatus = 201;\n const mockResponse = JSON.parse(config.data);\n const moId = uuidv4();\n mockResponse._id = moId;\n callback(moId, mockResponse);\n return [mockStatus, mockResponse];\n });\n}\n\n/****\n **\n ** Mock Helpers & Utils\n **\n **/\n\nexport function mockAll(mock: MockAdapter) {\n mockGetServerInfo(mock);\n mockGetServerVersionInfo(mock);\n mockStep(mock);\n mockAuthorize(mock);\n mockAccessToken(mock);\n mockGetTrees(mock);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/test/mocks/ForgeRockApiMockEngine.ts"],"names":[],"mappings":"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","file":"ForgeRockApiMockEngine.d.ts","sourcesContent":["import MockAdapter from 'axios-mock-adapter';\nimport fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\nimport { encode, decode } from '../../api/utils/Base64';\nimport { parseQueryString, parseUrl } from '../../api/utils/ApiUtils';\nimport slugify from 'slugify';\nimport { getTypedFilename } from '../../ops/utils/ExportImportUtils';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport function readJsonFile(file: string) {\n const json = JSON.parse(\n fs.readFileSync(path.resolve(__dirname, `${file}`), 'utf8')\n );\n return json;\n}\n\n/****\n **\n ** AM Mocks and Utils\n **\n **/\n\n/**\n * Authentication Mocks\n */\n\nexport function getServerInfo(variation: string = null) {\n const prefix = 'info';\n const infoObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./ServerInfoApi/getServerInfo/${\n variation ? prefix + '-' + variation : prefix\n }.json`\n ),\n 'utf8'\n )\n );\n return infoObject;\n}\n\nexport function getServerVersionInfo(variation: string = null) {\n const prefix = 'version';\n const versionObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./ServerInfoApi/getServerVersionInfo/${\n variation ? prefix + '-' + variation : prefix\n }.json`\n ),\n 'utf8'\n )\n );\n return versionObject;\n}\n\nexport function mockGetServerInfo(mock: MockAdapter, variation: string = null) {\n mock.onGet(/.*?\\/json\\/serverinfo\\/\\*/).reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const id = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getServerInfo(variation);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(id);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetServerVersionInfo(\n mock: MockAdapter,\n variation: string = null\n) {\n mock.onGet(/.*?\\/json\\/serverinfo\\/version/).reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const id = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getServerVersionInfo(variation);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(id);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getTreeStepResponse(\n treeId: string | undefined,\n authId: string | undefined\n) {\n const key = authId ? authId : 'undefined';\n const treeStepsObj = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./AuthenticateApi/step/${treeId ? treeId : 'default'}_steps.json`\n ),\n 'utf8'\n )\n );\n return treeStepsObj[key];\n}\n\nexport function mockStep(mock: MockAdapter) {\n mock\n .onPost(/.*?\\/json\\/realms\\/root\\/authenticate.*/)\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const treeId = parsed.searchParam['authIndexValue'];\n const body = JSON.parse(config.data);\n const authId = body.authId;\n const mockStatus = 200;\n const mockResponse = getTreeStepResponse(treeId, authId);\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockAuthorize(mock: MockAdapter) {\n mock.onPost(/.*?\\/oauth2\\/authorize.*/).reply(function (config) {\n const parsed = parseQueryString(config.data);\n const responseType = parsed['response_type'];\n let mockStatus = 500;\n const mockResponse = undefined;\n const mockHeaders = {};\n if (responseType === 'code') {\n mockStatus = 302;\n const headers = readJsonFile(`./OAuth2OIDCApi/authorize/headers.json`);\n for (const header of headers) {\n mockHeaders[header['key']] = header['value'];\n }\n }\n if (typeof expect !== 'undefined') expect(mockHeaders).toBeTruthy();\n return [mockStatus, mockResponse, mockHeaders];\n });\n}\n\nexport function mockAccessToken(mock: MockAdapter) {\n mock.onPost(/.*?\\/oauth2\\/access_token.*/).reply(function (config) {\n const parsed = parseQueryString(config.data);\n const grantType = parsed['grant_type'];\n const code = parsed['code'];\n let mockStatus = 500;\n let mockResponse = undefined;\n const mockHeaders = {};\n if (grantType === 'authorization_code' && code) {\n mockStatus = 200;\n mockResponse = readJsonFile(`./OAuth2OIDCApi/accessToken/body.json`);\n const headers = readJsonFile(`./OAuth2OIDCApi/accessToken/headers.json`);\n for (const header of Object.entries(headers)) {\n mockHeaders[header['key']] = header['value'];\n }\n }\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse, mockHeaders];\n });\n}\n\n/**\n * Tree Mocks\n */\n\nexport function getTrees() {\n const treeObjects = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './TreeApi/getTrees/trees.json'),\n 'utf8'\n )\n );\n return treeObjects;\n}\n\nexport function mockGetTrees(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getTrees();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getTree(treeId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./TreeApi/getTree/${treeId}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function getJourney(journeyId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./JourneyOps/importJourney/${journeyId}.journey.json`\n ),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function mockGetTree(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const treeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getTree(treeId);\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(treeId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutTree(\n mock: MockAdapter,\n callback: (mockTreeId: string, mockTreeObj) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/trees\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const treeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockTreeObj = JSON.parse(config.data);\n callback(treeId, mockTreeObj);\n return [mockStatus, mockTreeObj];\n });\n}\n\n/**\n * Node Mocks\n */\n\nexport function mockGetNode(mock: MockAdapter) {\n mock\n .onGet(\n /\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/nodes\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const nodeType = elements[elements?.length - 2];\n const nodeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./NodeApi/getNode/${nodeType}/${nodeId}.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(nodeId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutNode(\n mock: MockAdapter,\n callback: (mockNodeId: string, mockNodeObj) => void\n) {\n mock\n .onPut(\n /\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/authentication\\/authenticationtrees\\/nodes\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const nodeId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockNodeObj = JSON.parse(config.data);\n callback(nodeId, mockNodeObj);\n return [mockStatus, mockNodeObj];\n });\n}\n\n/**\n * Script Mocks\n */\n\nexport function getScript(scriptId: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./ScriptApi/getScript/${scriptId}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\nexport function mockGetScript(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/scripts\\/.+/)\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const scriptId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = getScript(scriptId);\n if (typeof expect !== 'undefined')\n expect(mockResponse._id).toBe(scriptId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutScript(\n mock: MockAdapter,\n callback: (mockScriptId: string, mockScriptObj) => void\n) {\n mock\n .onPut(/.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/scripts\\/.+/)\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const scriptId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockScriptObj = JSON.parse(config.data);\n callback(scriptId, mockScriptObj);\n return [mockStatus, mockScriptObj];\n });\n}\n\nexport function getScriptByName(scriptName: string) {\n const treeObject = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, `./ScriptApi/getScriptByName/${scriptName}.json`),\n 'utf8'\n )\n );\n return treeObject;\n}\n\n/**\n * SAML Mocks\n */\nexport function getSaml2ProviderImportData(entityId: string) {\n const importData = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Ops/importSaml2Provider/${getTypedFilename(\n entityId,\n 'saml',\n 'json'\n )}`\n ),\n 'utf8'\n )\n );\n return importData;\n}\n\nexport function getSaml2ProvidersImportData() {\n const importData = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Ops/importSaml2Providers/allAlphaProviders.saml.json`\n ),\n 'utf8'\n )\n );\n return importData;\n}\n\nexport function getSaml2Providers() {\n const providers = JSON.parse(\n fs.readFileSync(\n path.resolve(__dirname, './Saml2Api/getProviders/providers.json'),\n 'utf8'\n )\n );\n return providers;\n}\n\nexport function mockGetSaml2Providers(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getSaml2Providers();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockFindSaml2Providers(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\?_queryFilter=.+?&_fields=.+/\n )\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const filter = parsed.searchParam['_queryFilter'];\n const entityId = filter.match(/entityId eq '(.+?)'/)[1];\n const mockStatus = 200;\n let mockResponse = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'EXACT',\n totalPagedResults: 1,\n remainingPagedResults: -1,\n };\n try {\n mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/findSaml2Providers/${slugify(entityId)}_stub.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined')\n expect(mockResponse.result[0].entityId).toBe(entityId);\n } catch (error) {\n // ignore errors\n }\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function getCirclesOfTrust() {\n const treeObjects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './CirclesOfTrustApi/getCirclesOfTrust/cots.json'\n ),\n 'utf8'\n )\n );\n return treeObjects;\n}\n\nexport function mockGetCirclesOfTrust(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\?_queryFilter=true/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getCirclesOfTrust();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateCircleOfTrust(\n mock: MockAdapter,\n callback: (mockCotId: string, mockCotObj) => void\n) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\/\\?_action=create/\n )\n .reply(function (config) {\n const mockCotObj = JSON.parse(config.data);\n const cotId = mockCotObj._id;\n const mockStatus = 200;\n callback(cotId, mockCotObj);\n return [mockStatus, mockCotObj];\n });\n}\n\nexport function mockUpdateCircleOfTrust(\n mock: MockAdapter,\n callback: (mockCotId: string, mockCotObj) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/federation\\/circlesoftrust\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const cotId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockCotObj = JSON.parse(config.data);\n callback(cotId, mockCotObj);\n return [mockStatus, mockCotObj];\n });\n}\n\nexport function mockGetSaml2ProviderByLocationAndId(mock: MockAdapter) {\n mock\n .onGet(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/.+?\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const location = elements[elements?.length - 2];\n const providerId = elements[elements?.length - 1];\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/getProviderByLocationAndId/${location}/${providerId}.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined')\n expect(mockResponse._id).toBe(providerId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateSaml2Provider(\n mock: MockAdapter,\n callback: (\n mockSaml2ProviderId64: string,\n mockSaml2ProviderLocation: string,\n mockSaml2ProviderObj\n ) => void\n) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/(hosted|remote)\\/\\?_action=(create|importEntity)/\n )\n .reply(function (config) {\n const elements = config.url\n ? parseUrl(config.url).pathname.split('/')\n : [];\n const mockSaml2ProviderLocation = elements[elements?.length - 2];\n const mockSaml2ProviderObj = JSON.parse(config.data);\n let mockSaml2ProviderId64 = '';\n if (mockSaml2ProviderObj._id) {\n mockSaml2ProviderId64 = mockSaml2ProviderObj._id;\n } else {\n const metaDataXml = decode(mockSaml2ProviderObj.standardMetadata);\n mockSaml2ProviderId64 = encode(\n metaDataXml.match(/entityID=\"(.+?)\"/)[1],\n false\n );\n }\n const mockStatus = 200;\n callback(\n mockSaml2ProviderId64,\n mockSaml2ProviderLocation,\n mockSaml2ProviderObj\n );\n return [mockStatus, mockSaml2ProviderObj];\n });\n}\n\nexport function mockUpdateSaml2Provider(\n mock: MockAdapter,\n callback: (\n mockSaml2ProviderId64: string,\n mockSaml2ProviderLocation: string,\n mockSaml2ProviderObj\n ) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/saml2\\/(hosted|remote)\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const mockSaml2ProviderLocation = elements[elements?.length - 2];\n const mockSaml2ProviderId64 = elements[elements?.length - 1];\n const mockSaml2ProviderObj = JSON.parse(config.data);\n const mockStatus = 200;\n callback(\n mockSaml2ProviderId64,\n mockSaml2ProviderLocation,\n mockSaml2ProviderObj\n );\n return [mockStatus, mockSaml2ProviderObj];\n });\n}\n\nexport function mockGetSaml2ProviderMetadata(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/saml2\\/jsp\\/exportmetadata.jsp\\?entityid=.+?&realm=.+/)\n .reply(function (config) {\n const parsed = parseUrl(config.url);\n const realm = parsed.searchParam['realm'];\n const entityId = parsed.searchParam['entityid'];\n const mockStatus = 200;\n const mockResponse = fs.readFileSync(\n path.resolve(\n __dirname,\n `./Saml2Api/getProviderMetadata/${realm}/${encodeURIComponent(\n entityId\n )}.xml`\n ),\n 'utf8'\n );\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\n/**\n * Social Identity Provider Mocks\n */\n\nexport function getSocialProviders() {\n const objects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './SocialIdentityProvidersApi/getSocialIdentityProviders/socialIdentityProviders.json'\n ),\n 'utf8'\n )\n );\n return objects;\n}\n\nexport function mockGetSocialProviders(mock: MockAdapter) {\n mock\n .onPost(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/services\\/SocialIdentityProviders\\?_action=nextdescendents/\n )\n .reply(function () {\n const mockStatus = 200;\n const mockResponse = getSocialProviders();\n if (typeof expect !== 'undefined') expect(mockResponse).toBeTruthy();\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutSocialProviderByTypeAndId(\n mock: MockAdapter,\n callback: (\n mockSocialProviderId: string,\n mockSocialProviderType: string,\n mockSocialProviderObj\n ) => void\n) {\n mock\n .onPut(\n /.*?\\/json\\/realms\\/root\\/realms\\/alpha\\/realm-config\\/services\\/SocialIdentityProviders\\/.+?\\/.+/\n )\n .reply(function (config) {\n const elements = config.url ? config.url.split('/') : [];\n const mockSocialProviderType = elements[elements?.length - 2];\n const mockSocialProviderId = elements[elements?.length - 1];\n const mockSocialProviderObj = JSON.parse(config.data);\n const mockStatus = 200;\n callback(\n mockSocialProviderId,\n mockSocialProviderType,\n mockSocialProviderObj\n );\n return [mockStatus, mockSocialProviderObj];\n });\n}\n\n/**\n * Agent test utils\n */\n\nexport function getAgent(agentType, agentId) {\n const objects = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./AgentApi/getAgentByTypeAndId/${agentType}/${agentId}.json`\n ),\n 'utf8'\n )\n );\n return objects;\n}\n\n/****\n **\n ** IDM Mocks and Utils\n **\n **/\n\n// openidm/system?_action=testConnectorServers\nexport function mockGetAllConnectorServers(mock: MockAdapter) {\n mock.onGet(/.*?\\/openidm\\/system\\.+/).reply(function () {\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n './IdmConfigApi/getAllConnectorServers/openicf.json'\n ),\n 'utf8'\n )\n );\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetAllConfigEntities(mock: MockAdapter) {\n mock.onGet(/.*?\\/openidm\\/config$/).reply(function () {\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getAllConfigEntities/entities.json`\n ),\n 'utf8'\n )\n );\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetConfigEntity(\n mock: MockAdapter,\n variation: string = null\n) {\n mock.onGet(/.*?\\/openidm\\/config\\/.+/).reply(function (config) {\n const entityId = config.url\n ? config.url.substring(config.url.indexOf('/config/') + 8)\n : '';\n const mockStatus = 200;\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getConfigEntity/${\n variation ? entityId + '-' + variation : entityId\n }.json`\n ),\n 'utf8'\n )\n );\n if (typeof expect !== 'undefined') expect(mockResponse._id).toBe(entityId);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockPutConfigEntity(\n mock: MockAdapter,\n callback: (mockEntityId: string, mockEntityObj) => void\n) {\n mock.onPut(/.*?\\/openidm\\/config\\/.+/).reply(function (config) {\n const entityId = config.url\n ? config.url.substring(config.url.indexOf('/config/') + 8)\n : '';\n const mockStatus = 200;\n const mockResponse = JSON.parse(config.data);\n callback(entityId, mockResponse);\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockGetConfigEntitiesByType(mock: MockAdapter) {\n mock\n .onGet(/.*?\\/openidm\\/config\\?_queryFilter=_id%20sw%20'.+?'/)\n .reply(function (config) {\n console.log('config.url=' + config.url);\n const entityType = config.url\n ? config.url.match(\n /.*?\\/openidm\\/config\\?_queryFilter=_id%20sw%20'(.+?)'/\n )[1]\n : '';\n const mockStatus = 200;\n console.log('entityType=' + entityType);\n const mockResponse = JSON.parse(\n fs.readFileSync(\n path.resolve(\n __dirname,\n `./IdmConfigApi/getConfigEntitiesByType/${entityType}.json`\n ),\n 'utf8'\n )\n );\n return [mockStatus, mockResponse];\n });\n}\n\nexport function mockCreateManagedObject(\n mock: MockAdapter,\n callback: (mockManagedObjId: string, mockManagedObj) => void\n) {\n mock\n .onPost(/.*?\\/openidm\\/managed\\/.+?\\?_action=create/)\n .reply(function (config) {\n const mockStatus = 201;\n const mockResponse = JSON.parse(config.data);\n const moId = uuidv4();\n mockResponse._id = moId;\n callback(moId, mockResponse);\n return [mockStatus, mockResponse];\n });\n}\n\n/****\n **\n ** Mock Helpers & Utils\n **\n **/\n\nexport function mockAll(mock: MockAdapter) {\n mockGetServerInfo(mock);\n mockGetServerVersionInfo(mock);\n mockStep(mock);\n mockAuthorize(mock);\n mockAccessToken(mock);\n mockGetTrees(mock);\n}\n"]}
|