@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 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.4...HEAD
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 _getAllConfigEntities.apply(this, arguments);
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 _getAllConfigEntities() {
27
- _getAllConfigEntities = _asyncToGenerator(function* () {
28
+ function _getAllConfigEntities2() {
29
+ _getAllConfigEntities2 = _asyncToGenerator(function* () {
28
30
  return (0, _IdmConfigApi.getAllConfigEntities)();
29
31
  });
30
- return _getAllConfigEntities.apply(this, arguments);
32
+ return _getAllConfigEntities2.apply(this, arguments);
31
33
  }
32
34
  function getConfigEntitiesByType(_x) {
33
- return _getConfigEntitiesByType.apply(this, arguments);
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 _getConfigEntitiesByType() {
41
- _getConfigEntitiesByType = _asyncToGenerator(function* (type) {
42
+ function _getConfigEntitiesByType2() {
43
+ _getConfigEntitiesByType2 = _asyncToGenerator(function* (type) {
42
44
  return (0, _IdmConfigApi.getConfigEntitiesByType)(type);
43
45
  });
44
- return _getConfigEntitiesByType.apply(this, arguments);
46
+ return _getConfigEntitiesByType2.apply(this, arguments);
45
47
  }
46
48
  function getConfigEntity(_x2) {
47
- return _getConfigEntity.apply(this, arguments);
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 _getConfigEntity() {
56
- _getConfigEntity = _asyncToGenerator(function* (entityId) {
57
+ function _getConfigEntity2() {
58
+ _getConfigEntity2 = _asyncToGenerator(function* (entityId) {
57
59
  return (0, _IdmConfigApi.getConfigEntity)(entityId);
58
60
  });
59
- return _getConfigEntity.apply(this, arguments);
61
+ return _getConfigEntity2.apply(this, arguments);
60
62
  }
61
63
  function putConfigEntity(_x3, _x4) {
62
- return _putConfigEntity.apply(this, arguments);
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 _putConfigEntity() {
72
- _putConfigEntity = _asyncToGenerator(function* (entityId, entityData) {
73
+ function _putConfigEntity2() {
74
+ _putConfigEntity2 = _asyncToGenerator(function* (entityId, entityData) {
73
75
  return (0, _IdmConfigApi.putConfigEntity)(entityId, entityData);
74
76
  });
75
- return _putConfigEntity.apply(this, arguments);
77
+ return _putConfigEntity2.apply(this, arguments);
76
78
  }
77
79
  function queryAllManagedObjectsByType(_x5, _x6, _x7) {
78
- return _queryAllManagedObjectsByType.apply(this, arguments);
80
+ return _queryAllManagedObjectsByType2.apply(this, arguments);
79
81
  }
80
- function _queryAllManagedObjectsByType() {
81
- _queryAllManagedObjectsByType = _asyncToGenerator(function* (type, fields, pageCookie) {
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 _queryAllManagedObjectsByType.apply(this, arguments);
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
@@ -1 +1 @@
1
- {"version":3,"file":"IdmOps.js","names":["getAllConfigEntities","getAllConfigEntitiesRaw","getConfigEntitiesByType","type","getConfigEntitiesByTypeRaw","getConfigEntity","entityId","getConfigEntityRaw","putConfigEntity","entityData","putConfigEntityRaw","queryAllManagedObjectsByType","fields","pageCookie","queryAllManagedObjectsByTypeRaw"],"sources":["ops/IdmOps.ts"],"sourcesContent":["import {\n getAllConfigEntities as getAllConfigEntitiesRaw,\n getConfigEntity as getConfigEntityRaw,\n putConfigEntity as putConfigEntityRaw,\n getConfigEntitiesByType as getConfigEntitiesByTypeRaw,\n queryAllManagedObjectsByType as queryAllManagedObjectsByTypeRaw,\n} from '../api/IdmConfigApi';\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 getAllConfigEntitiesRaw();\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 getConfigEntitiesByTypeRaw(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 getConfigEntityRaw(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 putConfigEntityRaw(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 queryAllManagedObjectsByTypeRaw(type, fields, pageCookie);\n}\n"],"mappings":";;;;;;;;;;AAAA;AAM6B;AAAA;AAE7B;AACA;AACA;AACA;AAHA,SAIsBA,oBAAoB;EAAA;AAAA;AAI1C;AACA;AACA;AACA;AACA;AAJA;EAAA,0CAJO,aAAsC;IAC3C,OAAO,IAAAC,kCAAuB,GAAE;EAClC,CAAC;EAAA;AAAA;AAAA,SAOqBC,uBAAuB;EAAA;AAAA;AAI7C;AACA;AACA;AACA;AACA;AAJA;EAAA,6CAJO,WAAuCC,IAAI,EAAE;IAClD,OAAO,IAAAC,qCAA0B,EAACD,IAAI,CAAC;EACzC,CAAC;EAAA;AAAA;AAAA,SAOqBE,eAAe;EAAA;AAAA;AAIrC;AACA;AACA;AACA;AACA;AACA;AALA;EAAA,qCAJO,WAA+BC,QAAQ,EAAE;IAC9C,OAAO,IAAAC,6BAAkB,EAACD,QAAQ,CAAC;EACrC,CAAC;EAAA;AAAA;AAAA,SAQqBE,eAAe;EAAA;AAAA;AAOrC;AACA;AACA;AACA;AACA;AACA;AACA;AANA;EAAA,qCAPO,WACLF,QAAgB,EAChBG,UAA2B,EAC3B;IACA,OAAO,IAAAC,6BAAkB,EAACJ,QAAQ,EAAEG,UAAU,CAAC;EACjD,CAAC;EAAA;AAAA;AAAA,SASqBE,4BAA4B;EAAA;AAAA;AAAA;EAAA,kDAA3C,WACLR,IAAI,EACJS,MAAM,EACNC,UAAU,EAQT;IACD,OAAO,IAAAC,0CAA+B,EAACX,IAAI,EAAES,MAAM,EAAEC,UAAU,CAAC;EAClE,CAAC;EAAA;AAAA"}
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,14 @@
1
+ {
2
+ "openicf": [
3
+ {
4
+ "name": "online_rcs",
5
+ "type": "remoteConnectorClient",
6
+ "ok": true
7
+ },
8
+ {
9
+ "name": "offline_rcs",
10
+ "type": "remoteConnectorClient",
11
+ "ok": false
12
+ }
13
+ ]
14
+ }
@@ -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
@@ -1,11 +1,12 @@
1
- import { getAllConfigEntities as getAllConfigEntitiesRaw, getConfigEntity as getConfigEntityRaw, putConfigEntity as putConfigEntityRaw, getConfigEntitiesByType as getConfigEntitiesByTypeRaw, queryAllManagedObjectsByType as queryAllManagedObjectsByTypeRaw } from '../api/IdmConfigApi';
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 getAllConfigEntitiesRaw();
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 getConfigEntitiesByTypeRaw(type);
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 getConfigEntityRaw(entityId);
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 putConfigEntityRaw(entityId, entityData);
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 queryAllManagedObjectsByTypeRaw(type, fields, pageCookie);
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
@@ -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 conflicting non-destructive tests - Import all
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 3 of DESTRUCTIVE tests - Delete all
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 and update ESM snapshots, you must call the test:record
19
- * script and override all the connection state variables required
20
- * to connect to the env to record from and also indicate the phase:
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 AGENTS!!!
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 by running:
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;
@@ -0,0 +1,14 @@
1
+ {
2
+ "openicf": [
3
+ {
4
+ "name": "online_rcs",
5
+ "type": "remoteConnectorClient",
6
+ "ok": true
7
+ },
8
+ {
9
+ "name": "offline_rcs",
10
+ "type": "remoteConnectorClient",
11
+ "ok": false
12
+ }
13
+ ]
14
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-lib",
3
- "version": "0.17.4",
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"]}
@@ -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":"AAQA;;;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","file":"IdmOps.d.ts","sourcesContent":["import {\n getAllConfigEntities as getAllConfigEntitiesRaw,\n getConfigEntity as getConfigEntityRaw,\n putConfigEntity as putConfigEntityRaw,\n getConfigEntitiesByType as getConfigEntitiesByTypeRaw,\n queryAllManagedObjectsByType as queryAllManagedObjectsByTypeRaw,\n} from '../api/IdmConfigApi';\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 getAllConfigEntitiesRaw();\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 getConfigEntitiesByTypeRaw(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 getConfigEntityRaw(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 putConfigEntityRaw(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 queryAllManagedObjectsByTypeRaw(type, fields, pageCookie);\n}\n"]}
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":"AAAA,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAY7C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,OAKxC;AAED;;;;IAII;AAEJ;;GAEG;AAEH,wBAAgB,aAAa,CAAC,SAAS,GAAE,MAAa,OAcrD;AAED,wBAAgB,oBAAoB,CAAC,SAAS,GAAE,MAAa,OAc5D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,GAAE,MAAa,QAS5E;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,WAAW,EACjB,SAAS,GAAE,MAAa,QAUzB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,OAa3B;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,QAazC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,QAiB9C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,QAmBhD;AAED;;GAEG;AAEH,wBAAgB,QAAQ,QAQvB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,QAW7C;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,OAQrC;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,OAW3C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,QAa5C;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,KAAA,KAAK,IAAI,QAcpD;AAED;;GAEG;AAEH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,QAsB5C;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,KAAA,KAAK,IAAI,QAcpD;AAED;;GAEG;AAEH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,OAQzC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,QAY9C;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,KAAA,KAAK,IAAI,QAYxD;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,OAQjD;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,OAe1D;AAED,wBAAgB,2BAA2B,QAW1C;AAED,wBAAgB,iBAAiB,QAQhC;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,QAWtD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,QAoCvD;AAED,wBAAgB,iBAAiB,QAWhC;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,QAWtD;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,KAAA,KAAK,IAAI,QAalD;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,KAAA,KAAK,IAAI,QAclD;AAED,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,WAAW,QAuBpE;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CACR,qBAAqB,EAAE,MAAM,EAC7B,yBAAyB,EAAE,MAAM,EACjC,oBAAoB,KAAA,KACjB,IAAI,QA8BV;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CACR,qBAAqB,EAAE,MAAM,EAC7B,yBAAyB,EAAE,MAAM,EACjC,oBAAoB,KAAA,KACjB,IAAI,QAmBV;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,WAAW,QAoB7D;AAED;;GAEG;AAEH,wBAAgB,kBAAkB,QAWjC;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,QAWvD;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CACR,oBAAoB,EAAE,MAAM,EAC5B,sBAAsB,EAAE,MAAM,EAC9B,qBAAqB,KAAA,KAClB,IAAI,QAmBV;AAED;;GAEG;AAEH,wBAAgB,QAAQ,CAAC,SAAS,KAAA,EAAE,OAAO,KAAA,OAW1C;AAED;;;;IAII;AAGJ,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,WAAW,QAc3D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,QAczD;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,SAAS,GAAE,MAAa,QAqBzB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,KAAA,KAAK,IAAI,QAWxD;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,WAAW,QAuB5D;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,cAAc,KAAA,KAAK,IAAI,QAY7D;AAED;;;;IAII;AAEJ,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,QAOxC","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"]}