@rockcarver/frodo-lib 0.17.5-0 → 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,8 @@ 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
+
10
12
  ## [0.17.5-0] - 2023-01-07
11
13
 
12
14
  ## [0.17.4] - 2023-01-05
@@ -905,7 +907,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
905
907
  - Fixed problem with adding connection profiles
906
908
  - Miscellaneous bug fixes
907
909
 
908
- [Unreleased]: https://github.com/rockcarver/frodo-lib/compare/v0.17.5-0...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
909
913
 
910
914
  [0.17.5-0]: https://github.com/rockcarver/frodo-lib/compare/v0.17.4...v0.17.5-0
911
915
 
@@ -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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"}
@@ -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
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-lib",
3
- "version": "0.17.5-0",
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"