From 9fd5767ff1a677fa8c61342cb567ad204be13ab8 Mon Sep 17 00:00:00 2001 From: frederikprijck Date: Wed, 30 Aug 2023 22:59:00 +0200 Subject: [PATCH] Update tests --- test/context/context.test.js | 42 ++++- test/context/directory/clientGrants.test.js | 16 +- test/context/directory/context.test.js | 8 +- test/context/directory/migrations.test.js | 47 ------ test/context/yaml/context.test.js | 20 +-- test/context/yaml/migrations.test.js | 58 ------- test/tools/auth0/handlers/actions.tests.js | 87 +++++----- .../auth0/handlers/attackProtection.tests.js | 48 +++--- test/tools/auth0/handlers/branding.tests.js | 32 ++-- .../auth0/handlers/clientGrants.tests.js | 103 ++++++------ test/tools/auth0/handlers/clients.tests.js | 79 ++++----- .../tools/auth0/handlers/connections.tests.js | 117 ++++++------- .../auth0/handlers/customDomains.test.ts | 10 +- test/tools/auth0/handlers/databases.tests.js | 103 ++++++------ .../auth0/handlers/emailProvider.tests.js | 48 +++--- .../auth0/handlers/emailTemplates.tests.js | 16 +- .../handlers/guardianFactorProviders.tests.js | 5 +- .../handlers/guardianFactorTemplates.tests.js | 4 +- .../auth0/handlers/guardianFactors.tests.js | 2 +- .../guardianPhoneFactorMessageTypes.tests.js | 6 +- ...ardianPhoneFactorSelectedProvider.tests.js | 6 +- .../auth0/handlers/guardianPolicies.tests.js | 6 +- test/tools/auth0/handlers/hooks.tests.js | 110 +++++++------ test/tools/auth0/handlers/logStreams.test.ts | 8 +- test/tools/auth0/handlers/migrations.tests.js | 155 ------------------ .../auth0/handlers/organizations.tests.js | 119 ++++++-------- test/tools/auth0/handlers/pages.tests.js | 42 ++--- test/tools/auth0/handlers/prompts.tests.ts | 32 ++-- .../auth0/handlers/resourceServers.tests.js | 61 +++---- test/tools/auth0/handlers/roles.tests.js | 73 ++++----- test/tools/auth0/handlers/rules.tests.js | 121 +++++++------- .../auth0/handlers/rulesConfigs.tests.ts | 2 +- test/tools/auth0/handlers/tenant.tests.ts | 32 ++-- test/tools/auth0/handlers/themes.tests.js | 20 ++- test/tools/auth0/handlers/triggers.tests.js | 8 +- test/tools/auth0/validator.tests.js | 41 +---- test/utils.js | 129 ++++++++------- 37 files changed, 794 insertions(+), 1022 deletions(-) delete mode 100644 test/context/directory/migrations.test.js delete mode 100644 test/context/yaml/migrations.test.js delete mode 100644 test/tools/auth0/handlers/migrations.tests.js diff --git a/test/context/context.test.js b/test/context/context.test.js index 30259ceda..2555f5edb 100644 --- a/test/context/context.test.js +++ b/test/context/context.test.js @@ -10,6 +10,7 @@ import { setupContext, filterOnlyIncludedResourceTypes } from '../../src/context import directoryContext from '../../src/context/directory'; import yamlContext from '../../src/context/yaml'; import { cleanThenMkdir, testDataDir, createDir } from '../utils'; +import {AuthApiError} from "auth0"; chai.use(chaiAsPromised); chai.use(sinonChai); @@ -20,6 +21,35 @@ const config = { AUTH0_ACCESS_TOKEN: 'fake', }; +export const TEST_PRIVATE_KEY = `-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDx+hc8imR4soBV +9WD9bRey14VqzZfCvEAYbSWctLeZz9xhz+kP+mWxHvv07wi3/ZiYcVYgOYIhxbnt +ugNp78oCFUEsdRrdq2juHlqBtjaYpINQSOqNaKUBt3JRkPPxRLyhwCZ6HJVYy5Wp +4bG6c8eimbglDY4ZwTfUxu1wk3TvMJr9H8tSLwox666NDpxx4ga6kJ06wromShQH +bCS8WlQKI7CpMbnUSrgNJO6QOvu0N97Szl7UwHFVTEuSvDvMGuUPE+Bn4zbrQVSV +Go4oqyTchSR7+9xBpzq36OzXM6zSZqmovJuSzMbCXbBjQlo4s61wvnOLhT3D8Z44 +c5VE52frAgMBAAECggEALCx3qXmqNc6AVzDgb+NGfEOT+5dkqQwst0jVoPHswouL +s998sIoJnngFjwVEFjKZdNrb2i4lb3zlIFzg2qoHurGeoDsQmH7+PNoVs7BL7zm5 +LyLgjsgXt2SB3hoULmtZ9D1byNcG/JrNy6GEDIGuZCSj1T/QPStkwdc+6VpB8pgW +E8D7jCt40Tik2neYQkDnY775kGAHGWEqpdPCwm+KOnuE1fHx/jk38lmUgYNjKq0h +JK6Ncjen1X+ZsYfGx4dALWG4cqo3lE0YXXuHuvjJV3aVfzH8t7W4fuZ4+8xvdhhV +F4br5FimWLbTe2qT4lSpadkbLm3aBlSUR7eAP0BlwQKBgQD5ayZpP5OMp1zfa4hA +fM8nVUEaVLkRwFK5NChfjHGiaye2RjrnIorXMsFxXjEscgTn2Ux9CgcBhp1fTBhy +6cmhkp1talAIqLBivNQJT0YTfA+uHrHTTyMfEUgsMzPiiAg7FV7BCG6xd/nsk3yg +ZUfoXefrhq9LIHsJx7cK12VViQKBgQD4XKvwYmX5t7fZFBPd7dv5ZrcMHQnBMHd7 +is3QhgyKuEgVDzKQ9SA004I9iSvcI3dE/npj31P39N5bbuvYTh4WR/SR4VvXavNG +AqUR7wm8jTlbiWEPgF9MxC24zaa07Kbxs+P8XT/7wWuijf6+baSFgxQMb80fUArv +7guKikCo0wKBgCUn3DIDoZRrfj9eQo7wyN9gKPGmO2e0kd47MeSCBI+gjOrvbWjv +UWWbjwu3b3Xiim6LhYR/EOoeRqViraW4xCvIrqEVHFUd5CDhZmj4oUTXz3It6mnD +OUUwiuLiwdD2WNuMZHA3NF5FtDqVAhTW4a5xBtKkXsq/TPT5BoCb8+GZAoGAUWAD +0gpbgTuJ2G10qPWDaq8V8Lke9haMP4VWNCmHuHfy3juRhN9cAxL+DG2CWmmgbZG3 +xjtpRsgLhwfL7J6DyyceYiHltqpLNTgun7ajiQz4qx5TGAImt39bv75aDdOwS2d2 +nrxq93EDdEp0Gi7QhhJRolWLbuQKAV0MmQL9dpMCgYEA5+ug3CDI/jyTHG4ZEVoG +qmIg7QoHrVEmZrvCMiFw8bbuBvoMnvu1o1zfvAkNrDfibZyxYKHzSqgeVPQShvLa +P6JCu67ieCGP8C8CMFiQhJ9n4sYGnkzkz67NpkHSzDPA6DfvG4pYuvBQRIefnhYh +IDGpghhKHMV2DAyzeM4cDU8= +-----END PRIVATE KEY-----`; + describe('#context loader validation', async () => { it('should error on bad file', async () => { await expect(setupContext(config), 'import').to.be.eventually.rejectedWith(Error); @@ -46,9 +76,9 @@ describe('#context loader validation', async () => { const result = await expect( setupContext({ ...tmpConfig, AUTH0_INPUT_FILE: dir }), 'import' - ).to.be.eventually.rejectedWith(Error); + ).to.be.eventually.rejectedWith(AuthApiError); - expect(result).to.be.an('object').that.has.property('name').which.eq('access_denied'); + expect(result).to.be.an('error').that.has.property('error').which.eq('access_denied'); }); it('should error while attempting private key JWT generation, but pass validation with client signing key', async () => { @@ -72,7 +102,7 @@ describe('#context loader validation', async () => { expect(result) .to.be.an('Error') .that.has.property('message') - .which.eq('secretOrPrivateKey must be an asymmetric key when using RS256'); + .which.eq('"pkcs8" must be PKCS#8 formatted string'); }); it('should error while attempting private key JWT generation because of incorrect value for algorithm, but pass validation with client signing key', async () => { @@ -82,7 +112,7 @@ describe('#context loader validation', async () => { cleanThenMkdir(dir); createDir(dir, { '.': { - 'private.pem': 'some-invalid-private-key', + 'private.pem': TEST_PRIVATE_KEY, }, }); @@ -97,7 +127,7 @@ describe('#context loader validation', async () => { expect(result) .to.be.an('Error') .that.has.property('message') - .which.eq('"algorithm" must be a valid string enum value'); + .which.eq('alg bad value for algorithm is not supported either by JOSE or your javascript runtime'); }); it('should error when secret, private key and auth token are all absent', async () => { @@ -155,7 +185,7 @@ describe('#context loader validation', async () => { expect(loaded).to.be.an.instanceof(yamlContext); const userAgent = - loaded.mgmtClient.rules.resource.restClient.restClient.options.headers['User-agent']; + loaded.mgmtClient.configuration.headers['User-agent']; expect(userAgent).to.contain('deploy-cli'); expect(userAgent).to.contain('node.js'); diff --git a/test/context/directory/clientGrants.test.js b/test/context/directory/clientGrants.test.js index 023e128c4..14892c847 100644 --- a/test/context/directory/clientGrants.test.js +++ b/test/context/directory/clientGrants.test.js @@ -5,7 +5,7 @@ import { constants } from '../../../src/tools'; import Context from '../../../src/context/directory'; import handler from '../../../src/context/directory/handlers/clientGrants'; -import { cleanThenMkdir, testDataDir, createDir, mockMgmtClient } from '../../utils'; +import { cleanThenMkdir, testDataDir, createDir, mockMgmtClient, mockPagedData } from '../../utils'; import { getFiles, loadJSON } from '../../../src/utils'; describe('#directory context clientGrants', () => { @@ -124,8 +124,8 @@ describe('#directory context clientGrants', () => { { ...mockMgmtClient(), clients: { - getAll: () => [ - [ + getAll: (params) => + mockPagedData(params, 'clients', [ { client_id: 'client-id-1', name: 'Primary M2M', @@ -134,12 +134,11 @@ describe('#directory context clientGrants', () => { client_id: 'client-id-2', name: 'Secondary M2M', }, - ], - ], + ]), }, resourceServers: { - getAll: () => [ - [ + getAll: (params) => + mockPagedData(params, 'resource_servers', [ { id: 'resource-server-1', name: 'Payments Service', @@ -150,8 +149,7 @@ describe('#directory context clientGrants', () => { name: 'Auth0 Management API', identifier: 'https://travel0.us.auth0.com/api/v2', }, - ], - ], + ]), }, } ); diff --git a/test/context/directory/context.test.js b/test/context/directory/context.test.js index 8d9603cf9..20c0f602b 100644 --- a/test/context/directory/context.test.js +++ b/test/context/directory/context.test.js @@ -156,12 +156,14 @@ describe('#directory context validation', () => { }, }, { - tenant: { + tenants: { getSettings: async () => new Promise((res) => res({ - friendly_name: 'Production Tenant', - enabled_locales: ['en', 'es'], + data: { + friendly_name: 'Production Tenant', + enabled_locales: ['en', 'es'], + } }) ), }, diff --git a/test/context/directory/migrations.test.js b/test/context/directory/migrations.test.js deleted file mode 100644 index 93006fb60..000000000 --- a/test/context/directory/migrations.test.js +++ /dev/null @@ -1,47 +0,0 @@ -import path from 'path'; -import { expect } from 'chai'; - -import Context from '../../../src/context/directory'; -import { testDataDir, createDir, mockMgmtClient, cleanThenMkdir } from '../../utils'; -import handler from '../../../src/context/directory/handlers/migrations'; -import { loadJSON } from '../../../src/utils'; - -const migrationsTest = { - 'migrations.json': `{ - "migration_flag": true - }`, -}; - -const migrationsTarget = { - migration_flag: true, -}; - -describe('#directory context migrations', () => { - it('should process migrations', async () => { - createDir(path.join(testDataDir, 'directory'), { migrations: migrationsTest }); - - const config = { - AUTH0_INPUT_FILE: path.join(testDataDir, 'directory', 'migrations'), - AUTH0_KEYWORD_REPLACE_MAPPINGS: { env: 'test' }, - }; - const context = new Context(config, mockMgmtClient()); - await context.loadAssetsFromLocal(); - - expect(context.assets.migrations).to.deep.equal(migrationsTarget); - }); - - it('should dump migrations', async () => { - const dir = path.join(testDataDir, 'directory', 'migrationsDump'); - cleanThenMkdir(dir); - const context = new Context({ AUTH0_INPUT_FILE: dir }, mockMgmtClient()); - - context.assets.migrations = { - migration_flag: false, - }; - - await handler.dump(context); - const dumped = loadJSON(path.join(dir, 'migrations.json')); - - expect(dumped).to.deep.equal(context.assets.migrations); - }); -}); diff --git a/test/context/yaml/context.test.js b/test/context/yaml/context.test.js index 0d46ce645..1109db43e 100644 --- a/test/context/yaml/context.test.js +++ b/test/context/yaml/context.test.js @@ -4,7 +4,7 @@ import jsYaml from 'js-yaml'; import { expect } from 'chai'; import Context from '../../../src/context/yaml'; -import { cleanThenMkdir, testDataDir, mockMgmtClient } from '../../utils'; +import { cleanThenMkdir, testDataDir, mockMgmtClient, mockPagedData } from '../../utils'; describe('#YAML context validation', () => { it('should do nothing on empty yaml', async () => { @@ -247,7 +247,6 @@ describe('#YAML context validation', () => { guardianFactors: [], guardianFactorProviders: [], guardianFactorTemplates: [], - migrations: {}, guardianPhoneFactorMessageTypes: { message_types: ['sms'] }, guardianPhoneFactorSelectedProvider: { provider: 'twilio' }, guardianPolicies: { policies: [] }, @@ -359,7 +358,6 @@ describe('#YAML context validation', () => { guardianFactors: [], guardianFactorProviders: [], guardianFactorTemplates: [], - migrations: {}, guardianPhoneFactorMessageTypes: { message_types: ['sms'] }, guardianPhoneFactorSelectedProvider: { provider: 'twilio' }, guardianPolicies: { policies: [] }, @@ -472,7 +470,6 @@ describe('#YAML context validation', () => { guardianFactors: [], guardianFactorProviders: [], guardianFactorTemplates: [], - migrations: {}, guardianPhoneFactorMessageTypes: { message_types: ['sms'] }, guardianPhoneFactorSelectedProvider: { provider: 'twilio' }, guardianPolicies: { policies: [] }, @@ -565,18 +562,20 @@ describe('#YAML context validation', () => { }, }, { - tenant: { + tenants: { getSettings: async () => new Promise((res) => res({ - friendly_name: 'Production Tenant', - enabled_locales: ['en', 'es'], + data: { + friendly_name: 'Production Tenant', + enabled_locales: ['en', 'es'], + }, }) ), }, connections: { - getAll: () => ({ - connections: [ + getAll: (params) => + mockPagedData(params, 'connections', [ { name: 'connection-1', strategy: 'waad', @@ -584,8 +583,7 @@ describe('#YAML context validation', () => { tenant_domain: 'travel0.com', }, }, - ], - }), + ]), }, } ); diff --git a/test/context/yaml/migrations.test.js b/test/context/yaml/migrations.test.js deleted file mode 100644 index 41b2c727d..000000000 --- a/test/context/yaml/migrations.test.js +++ /dev/null @@ -1,58 +0,0 @@ -import path from 'path'; -import fs from 'fs-extra'; -import { expect } from 'chai'; - -import Context from '../../../src/context/yaml'; -import handler from '../../../src/context/yaml/handlers/migrations'; -import { cleanThenMkdir, testDataDir, mockMgmtClient } from '../../utils'; - -describe('#YAML context migrations', () => { - it('should process migrationss', async () => { - const dir = path.join(testDataDir, 'yaml', 'migrations'); - cleanThenMkdir(dir); - - const yaml = ` - migrations: - migration_flag_1: true - migration_flag_2: false - `; - - const yamlFile = path.join(dir, 'config.yaml'); - fs.writeFileSync(yamlFile, yaml); - - const target = { - migration_flag_1: true, - migration_flag_2: false, - }; - - const config = { AUTH0_INPUT_FILE: yamlFile, AUTH0_KEYWORD_REPLACE_MAPPINGS: { ENV: 'test' } }; - const context = new Context(config, mockMgmtClient()); - await context.loadAssetsFromLocal(); - - expect(context.assets.migrations).to.deep.equal(target); - }); - - it('should dump migrations', async () => { - const context = new Context({ AUTH0_INPUT_FILE: './test.yml' }, mockMgmtClient()); - const migrations = { - migration_flags: true, - }; - context.assets.migrations = migrations; - - const dumped = await handler.dump(context); - expect(dumped).to.deep.equal({ migrations }); - }); - - it('should dump tenant without flags', async () => { - const context = new Context({ AUTH0_INPUT_FILE: './test.yml' }, mockMgmtClient()); - const migrations = { - migration_flags: true, - }; - context.assets.migrations = { - migration_flags: true, - }; - - const dumped = await handler.dump(context); - expect(dumped).to.deep.equal({ migrations }); - }); -}); diff --git a/test/tools/auth0/handlers/actions.tests.js b/test/tools/auth0/handlers/actions.tests.js index 58ceaf37d..1fe8ea3f6 100644 --- a/test/tools/auth0/handlers/actions.tests.js +++ b/test/tools/auth0/handlers/actions.tests.js @@ -2,6 +2,7 @@ import chai, { expect } from 'chai'; import chaiAsPromised from 'chai-as-promised'; const actions = require('../../../../src/tools/auth0/handlers/actions'); +const { mockPagedData } = require('../../../utils'); chai.use(chaiAsPromised); @@ -27,7 +28,7 @@ describe('#actions handler', () => { it('should not allow same names', (done) => { const auth0 = { actions: { - getAll: () => [], + getAll: () => ({ data: [] }), }, }; @@ -67,7 +68,7 @@ describe('#actions handler', () => { it('should pass validation', async () => { const auth0 = { actions: { - getAll: () => [], + getAll: () => ({ data: [] }), }, }; @@ -129,7 +130,7 @@ describe('#actions handler', () => { actions: { get: (params) => { expect(params.id).to.equal(actionId); - return Promise.resolve({ ...action, id: actionId }); + return Promise.resolve({ data: { ...action, id: actionId } }); }, create: function (data) { (() => expect(this).to.not.be.undefined)(); @@ -137,27 +138,29 @@ describe('#actions handler', () => { expect(data.name).to.equal('action-test'); expect(data.supported_triggers[0].id).to.equal('post-login'); expect(data.supported_triggers[0].version).to.equal('v1'); - return Promise.resolve({ ...data, id: actionId }); + return Promise.resolve({ data: { ...data, id: actionId }}); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), getAll: () => { if (!auth0.getAllCalled) { auth0.getAllCalled = true; - return Promise.resolve([]); + return Promise.resolve({ data: [] }); } return Promise.resolve({ - actions: [ - { - name: action.name, - supported_triggers: action.supported_triggers, - id: actionId, - }, - ], + data: { + actions: [ + { + name: action.name, + supported_triggers: action.supported_triggers, + id: actionId, + }, + ], + } }); }, - createVersion: () => Promise.resolve(version), + createVersion: () => Promise.resolve({ data: version }), }, pool, getAllCalled: false, @@ -196,26 +199,26 @@ describe('#actions handler', () => { actions: { get: (params) => { expect(params.id).to.equal(actionId); - return Promise.resolve({ ...action, id: actionId }); + return Promise.resolve({ data: { ...action, id: actionId } }); }, - create: (data) => Promise.resolve({ ...data, id: actionId }), - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), + create: (data) => Promise.resolve({ data: { ...data, id: actionId } }), + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), getAll: () => { if (!auth0.getAllCalled) { auth0.getAllCalled = true; - return Promise.resolve([]); + return Promise.resolve(mockPagedData({ include_totals: true }, 'actions', [] )); } - return Promise.resolve([ + return Promise.resolve(mockPagedData({ include_totals: true }, 'actions', [ { name: action.name, supported_triggers: action.supported_triggers, id: actionId, }, - ]); + ] )); }, - createVersion: () => Promise.resolve(version), + createVersion: () => Promise.resolve({ data: version }), deploy: (data) => { expect(data).to.deep.equal({ id: actionId }); didDeployGetCalled = true; @@ -256,7 +259,7 @@ describe('#actions handler', () => { const auth0 = { actions: { - getAll: () => actionsData, + getAll: () => mockPagedData({ include_totals: true}, 'actions', actionsData), }, }; @@ -365,15 +368,15 @@ describe('#actions handler', () => { it('should remove action', async () => { const auth0 = { actions: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('action-1'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, getAll: () => - Promise.resolve([ + Promise.resolve({ data: [ { id: 'action-1', name: 'action-test', @@ -384,20 +387,22 @@ describe('#actions handler', () => { }, ], }, - ]), + ] }), getVersion: () => Promise.resolve({ - action: {}, - code: "/** @type {PostLoginAction} */\nmodule.exports = async (event, context) => {\n console.log('new version');\n return {};\n };\n ", - dependencies: [], - runtime: 'node12', - id: '0906fe5b-f4d6-44ec-a8f1-3c05fc186483', - deployed: true, - number: 1, - built_at: '2020-12-03T15:20:54.413725492Z', - status: 'built', - created_at: '2020-12-03T15:20:52.094497448Z', - updated_at: '2020-12-03T15:20:54.415669983Z', + data: { + action: {}, + code: "/** @type {PostLoginAction} */\nmodule.exports = async (event, context) => {\n console.log('new version');\n return {};\n };\n ", + dependencies: [], + runtime: 'node12', + id: '0906fe5b-f4d6-44ec-a8f1-3c05fc186483', + deployed: true, + number: 1, + built_at: '2020-12-03T15:20:54.413725492Z', + status: 'built', + created_at: '2020-12-03T15:20:52.094497448Z', + updated_at: '2020-12-03T15:20:54.415669983Z', + } }), }, pool, @@ -444,7 +449,7 @@ describe('#actions handler', () => { const auth0 = { actions: { - getAll: () => Promise.resolve([marketplaceAction]), + getAll: () => Promise.resolve({ data: [marketplaceAction] }), delete: () => { wasDeleteCalled = true; }, diff --git a/test/tools/auth0/handlers/attackProtection.tests.js b/test/tools/auth0/handlers/attackProtection.tests.js index 55ee73570..fee55da78 100644 --- a/test/tools/auth0/handlers/attackProtection.tests.js +++ b/test/tools/auth0/handlers/attackProtection.tests.js @@ -7,31 +7,37 @@ describe('#attackProtection handler', () => { const auth0 = { attackProtection: { getBreachedPasswordDetectionConfig: () => ({ - admin_notification_frequency: [], - enabled: true, - method: 'standard', - shields: [], + data: { + admin_notification_frequency: [], + enabled: true, + method: 'standard', + shields: [], + } }), getBruteForceConfig: () => ({ - allowlist: [], - enabled: true, - max_attempts: 10, - mode: 'count_per_identifier_and_ip', - shields: ['block', 'user_notification'], + data: { + allowlist: [], + enabled: true, + max_attempts: 10, + mode: 'count_per_identifier_and_ip', + shields: ['block', 'user_notification'], + } }), getSuspiciousIpThrottlingConfig: () => ({ - allowlist: ['127.0.0.1'], - enabled: true, - shields: ['block', 'admin_notification'], - stage: { - 'pre-login': { - max_attempts: 100, - rate: 864000, - }, - 'pre-user-registration': { - max_attempts: 50, - rate: 1200, - }, + data: { + allowlist: ['127.0.0.1'], + enabled: true, + shields: ['block', 'admin_notification'], + stage: { + 'pre-login': { + max_attempts: 100, + rate: 864000, + }, + 'pre-user-registration': { + max_attempts: 50, + rate: 1200, + }, + } }, }), }, diff --git a/test/tools/auth0/handlers/branding.tests.js b/test/tools/auth0/handlers/branding.tests.js index 4a650ca81..3fdcef8b4 100644 --- a/test/tools/auth0/handlers/branding.tests.js +++ b/test/tools/auth0/handlers/branding.tests.js @@ -9,7 +9,9 @@ describe('#branding handler', () => { const auth0 = { branding: { getSettings: () => ({ - logo_url: 'https://example.com/logo.png', + data: { + logo_url: 'https://example.com/logo.png', + } }), getUniversalLoginTemplate: () => ({ body: html, @@ -31,16 +33,22 @@ describe('#branding handler', () => { const auth0 = { branding: { getSettings: () => ({ - logo_url: 'https://example.com/logo.png', + data: { + logo_url: 'https://example.com/logo.png', + }, }), getUniversalLoginTemplate: () => ({ - body: html, + data: { + body: html, + }, }), }, customDomains: { - getAll: () => [ - {}, // mock one custom domain. - ], + getAll: () => ({ + data: [ + {}, // mock one custom domain. + ], + }), }, }; @@ -61,7 +69,9 @@ describe('#branding handler', () => { const auth0 = { branding: { getSettings: () => ({ - logo_url: 'https://example.com/logo.png', + data: { + logo_url: 'https://example.com/logo.png', + } }), getUniversalLoginTemplate: () => ({ body: html, @@ -86,7 +96,7 @@ describe('#branding handler', () => { it('should update branding settings without templates if no templates set', (done) => { const auth0 = { branding: { - updateSettings: (params, data) => { + updateSettings: (data) => { try { expect(data).to.be.an('object'); expect(data.templates).to.equal(undefined); @@ -117,7 +127,7 @@ describe('#branding handler', () => { it('should update branding settings and templates if templates set', (done) => { const auth0 = { branding: { - updateSettings: (params, data) => { + updateSettings: (data) => { try { expect(data).to.be.an('object'); expect(data.templates).to.equal(undefined); @@ -126,7 +136,7 @@ describe('#branding handler', () => { done(err); } }, - setUniversalLoginTemplate: (params, data) => { + setUniversalLoginTemplate: (data) => { try { expect(data).to.be.an('object'); expect(data.template).to.equal(html); @@ -161,7 +171,7 @@ describe('#branding handler', () => { const auth0 = { branding: { - updateSettings: (_params, data) => { + updateSettings: (data) => { expect(data).to.deep.equal({ colors: { primary: '#F8F8F2', diff --git a/test/tools/auth0/handlers/clientGrants.tests.js b/test/tools/auth0/handlers/clientGrants.tests.js index 5fae08d73..1b8bb36d9 100644 --- a/test/tools/auth0/handlers/clientGrants.tests.js +++ b/test/tools/auth0/handlers/clientGrants.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const clientGrants = require('../../../../src/tools/auth0/handlers/clientGrants'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -62,14 +63,14 @@ describe('#clientGrants handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someClientGrant'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'client_grants', []), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -95,10 +96,10 @@ describe('#clientGrants handler', () => { }; const auth0 = { clientGrants: { - getAll: () => [clientGrant], + getAll: (params) => mockPagedData(params, 'client_grants', [clientGrant]), }, clients: { - getAll: () => [{ name: 'test client', client_id: clientId }], + getAll: (params) => mockPagedData(params, 'clients', [{ name: 'test client', client_id: clientId }]), }, pool, }; @@ -116,14 +117,14 @@ describe('#clientGrants handler', () => { expect(data).to.be.an('object'); expect(data.name).to.equal('someClientGrant'); expect(data.client_id).to.equal('client_id'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'client_grants', []), }, clients: { - getAll: () => [{ client_id: 'client_id', name: 'client_name' }], + getAll: (params) => mockPagedData(params, 'clients', [{ client_id: 'client_id', name: 'client_name' }]), }, pool, }; @@ -147,7 +148,7 @@ describe('#clientGrants handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data).to.equal({}); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -157,13 +158,13 @@ describe('#clientGrants handler', () => { expect(data.scope).to.be.an('array'); expect(data.scope[0]).to.equal('read:messages'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ id: 'cg1', client_id: 'client1', audience: 'audience' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'client_grants', [{ id: 'cg1', client_id: 'client1', audience: 'audience' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -189,20 +190,20 @@ describe('#clientGrants handler', () => { expect(data).to.be.an('object'); expect(data.name).to.equal('someClientGrant'); expect(data.client_id).to.equal('client2'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('cg1'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }], + getAll: (params) => mockPagedData(params, 'client_grants', [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -226,23 +227,23 @@ describe('#clientGrants handler', () => { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'id', client_id: 'client_id', audience: 'audience' }], + getAll: (params) => mockPagedData(params, 'client_grants', [{ id: 'id', client_id: 'client_id', audience: 'audience' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -264,19 +265,19 @@ describe('#clientGrants handler', () => { let removed = false; const auth0 = { clientGrants: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('cg1'); removed = true; - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }], + getAll: (params) => mockPagedData(params, 'client_grants', [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -295,18 +296,18 @@ describe('#clientGrants handler', () => { const auth0 = { clientGrants: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }], + getAll: (params) => mockPagedData(params, 'client_grants', [{ id: 'cg1', client_id: 'client1', audience: 'audience1' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -327,30 +328,30 @@ describe('#clientGrants handler', () => { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'client_grants', [ { id: 'cg1', client_id: 'client1', audience: 'audience1' }, { id: 'cg2', client_id: 'client2', audience: 'audience2' }, - ], + ]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'client_delete', client_id: 'client1', audience: 'audience1' }, { name: 'client_update', client_id: 'client2', audience: 'audience2' }, { name: 'client_create', client_id: 'client3', audience: 'audience3' }, - ], + ]), }, pool, }; @@ -383,20 +384,20 @@ describe('#clientGrants handler', () => { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'client_grants', [ { client_id: '123', audience: 'a', @@ -422,10 +423,10 @@ describe('#clientGrants handler', () => { audience: 'a', id: '5', }, - ], + ]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'abc', client_id: 'abc', @@ -438,7 +439,7 @@ describe('#clientGrants handler', () => { name: 'foo_client', client_id: '456', }, - ], + ]), }, pool, }; diff --git a/test/tools/auth0/handlers/clients.tests.js b/test/tools/auth0/handlers/clients.tests.js index 174e10b56..99f9d83d3 100644 --- a/test/tools/auth0/handlers/clients.tests.js +++ b/test/tools/auth0/handlers/clients.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const clients = require('../../../../src/tools/auth0/handlers/clients'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -62,11 +63,11 @@ describe('#clients handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someClient'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'clients',[]), }, pool, }; @@ -80,10 +81,10 @@ describe('#clients handler', () => { it('should get clients', async () => { const auth0 = { clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'test client', client_id: 'FMfcgxvzLDvPsgpRFKkLVrnKqGgkHhQV' }, { name: 'deploy client', client_id: 'client_id' }, - ], + ]), }, pool, }; @@ -103,7 +104,7 @@ describe('#clients handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('array'); expect(data.length).to.equal(0); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -112,15 +113,15 @@ describe('#clients handler', () => { expect(data).to.be.an('object'); expect(data.description).to.equal('new description'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [ + delete: () => Promise.resolve({ data: []}), + getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client1', name: 'someClient', }, - ], + ]), }, pool, }; @@ -147,19 +148,19 @@ describe('#clients handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someClient'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.client_id).to.equal('client1'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client1', name: 'existingClient' }, { client_id: 'client_id', name: 'deploy client' }, - ], + ]), }, pool, }; @@ -174,19 +175,19 @@ describe('#clients handler', () => { let removed = false; const auth0 = { clients: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.client_id).to.equal('client1'); removed = true; - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client1', name: 'existingClient' }, { client_id: 'client_id', name: 'deploy client' }, - ], + ]), }, pool, }; @@ -202,14 +203,14 @@ describe('#clients handler', () => { config.data.AUTH0_ALLOW_DELETE = false; const auth0 = { clients: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ client_id: 'client1', name: 'existingClient' }], + getAll: (params) => mockPagedData(params, 'clients', [{ client_id: 'client1', name: 'existingClient' }]), }, pool, }; @@ -226,18 +227,18 @@ describe('#clients handler', () => { clients: { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => Promise.resolve([]), + getAll: (params) => Promise.resolve(mockPagedData(params, 'clients', [])), }, pool, }; @@ -262,17 +263,17 @@ describe('#clients handler', () => { const auth0 = { clients: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client1', name: 'existingClient' }, { client_id: 'client2', name: 'existingClient2' }, - ], + ]), }, pool, }; @@ -294,23 +295,23 @@ describe('#clients handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('Client 3'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (data) { wasUpdateCalled = true; (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.client_id).to.equal('client-1'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, delete: function (data) { wasDeleteCalled = true; (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.client_id).to.equal('client-2'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { client_id: 'client-1', name: 'Client 1', @@ -319,7 +320,7 @@ describe('#clients handler', () => { client_id: 'client-2', name: 'Client 2', }, - ], + ]), }, pool, }; diff --git a/test/tools/auth0/handlers/connections.tests.js b/test/tools/auth0/handlers/connections.tests.js index 92c1882f2..afe251904 100644 --- a/test/tools/auth0/handlers/connections.tests.js +++ b/test/tools/auth0/handlers/connections.tests.js @@ -1,6 +1,7 @@ /* eslint-disable consistent-return */ const { expect } = require('chai'); const connections = require('../../../../src/tools/auth0/handlers/connections'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -63,14 +64,14 @@ describe('#connections handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someConnection'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', []), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -86,13 +87,13 @@ describe('#connections handler', () => { const auth0 = { connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { strategy: 'github', name: 'github', enabled_clients: [clientId] }, { strategy: 'auth0', name: 'db-should-be-ignored', enabled_clients: [] }, - ], + ]), }, clients: { - getAll: () => [{ name: 'test client', client_id: clientId }], + getAll: (params) => mockPagedData(params, 'clients', [{ name: 'test client', client_id: clientId }]), }, pool, }; @@ -110,7 +111,7 @@ describe('#connections handler', () => { create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -121,13 +122,13 @@ describe('#connections handler', () => { options: { passwordPolicy: 'testPolicy' }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someConnection', id: 'con1', strategy: 'custom' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [{ name: 'someConnection', id: 'con1', strategy: 'custom' }]), }, clients: { - getAll: () => [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }], + getAll: (params) => mockPagedData(params, 'clients', [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), }, pool, }; @@ -166,7 +167,7 @@ describe('#connections handler', () => { }, }, }); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -184,16 +185,16 @@ describe('#connections handler', () => { }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someSamlConnection', id: 'con1', strategy: 'samlp' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [{ name: 'someSamlConnection', id: 'con1', strategy: 'samlp' }]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }, { name: 'idp-one', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Teb' }, - ], + ]), }, pool, }; @@ -250,7 +251,7 @@ describe('#connections handler', () => { }, }, }); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -268,16 +269,16 @@ describe('#connections handler', () => { }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someSamlConnection', id: 'con1', strategy: 'samlp' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [{ name: 'someSamlConnection', id: 'con1', strategy: 'samlp' }]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }, { name: 'idp-one', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Teb' }, - ], + ]), }, pool, }; @@ -324,7 +325,7 @@ describe('#connections handler', () => { create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -335,24 +336,24 @@ describe('#connections handler', () => { options: { passwordPolicy: 'testPolicy' }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [ + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [ { name: 'someConnection', id: 'con1', strategy: 'custom', enabled_clients: ['excluded-one-id'], }, - ], + ]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'client1', client_id: 'client1-id' }, { name: 'excluded-one', client_id: 'excluded-one-id' }, { name: 'excluded-two', client_id: 'excluded-two-id' }, - ], + ]), }, pool, }; @@ -382,20 +383,20 @@ describe('#connections handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someConnection'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -416,19 +417,19 @@ describe('#connections handler', () => { let removed = false; const auth0 = { connections: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); removed = true; - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -446,18 +447,18 @@ describe('#connections handler', () => { connections: { create: function (data) { (() => expect(this).to.not.be.undefined)(); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -480,17 +481,17 @@ describe('#connections handler', () => { }; const auth0 = { connections: { - create: () => Promise.resolve(), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: undefined }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'custom' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -510,24 +511,24 @@ describe('#connections handler', () => { connections: { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: 'con1', name: 'existing1', strategy: 'custom' }, { id: 'con2', name: 'existing2', strategy: 'custom' }, - ], + ]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; diff --git a/test/tools/auth0/handlers/customDomains.test.ts b/test/tools/auth0/handlers/customDomains.test.ts index 455507ad4..e6a89ef93 100644 --- a/test/tools/auth0/handlers/customDomains.test.ts +++ b/test/tools/auth0/handlers/customDomains.test.ts @@ -25,10 +25,10 @@ describe('#customDomains handler', () => { it('should get custom domains', async () => { const auth0ApiClientMock = { customDomains: { - getAll: async () => customDomains, - create: async () => customDomains[0], - update: async () => {}, - delete: async () => {}, + getAll: async () => ({ data: customDomains }), + create: async () => ({ data: customDomains[0] }), + update: async () => ({ data: {} }), + delete: async () => ({ data: {} }), }, pool: new PromisePoolExecutor({ concurrencyLimit: 3, @@ -192,7 +192,7 @@ describe('#customDomains handler', () => { const auth0ApiClientMock = { customDomains: { - getAll: async () => customDomains, + getAll: async () => ({ data: customDomains }), create: async () => { didCreateFunctionGetCalled = true; }, diff --git a/test/tools/auth0/handlers/databases.tests.js b/test/tools/auth0/handlers/databases.tests.js index be253338f..c31f52ed5 100644 --- a/test/tools/auth0/handlers/databases.tests.js +++ b/test/tools/auth0/handlers/databases.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const databases = require('../../../../src/tools/auth0/handlers/databases'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -57,14 +58,14 @@ describe('#databases handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someDatabase'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', []), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -79,15 +80,15 @@ describe('#databases handler', () => { const clientId = 'rFeR6vyzQcDEgSUsASPeF4tXr3xbZhxE'; const auth0 = { connections: { - getAll: function () { + getAll: function (params) { (() => expect(this).to.not.be.undefined)(); - return [{ strategy: 'auth0', name: 'db', enabled_clients: [clientId] }]; + return mockPagedData(params, 'connections', [{ strategy: 'auth0', name: 'db', enabled_clients: [clientId] }]); }, }, clients: { - getAll: function () { + getAll: function (params) { (() => expect(this).to.not.be.undefined)(); - return [{ name: 'test client', client_id: clientId }]; + return mockPagedData(params, 'clients', [{ name: 'test client', client_id: clientId }]); }, }, pool, @@ -105,12 +106,12 @@ describe('#databases handler', () => { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); - return Promise.resolve({ options: { someOldOption: true } }); + return Promise.resolve({ data: { options: { someOldOption: true } } }); }, create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -121,13 +122,13 @@ describe('#databases handler', () => { options: { passwordPolicy: 'testPolicy', someOldOption: true }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someDatabase', id: 'con1', strategy: 'auth0' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [{ name: 'someDatabase', id: 'con1', strategy: 'auth0' }]), }, clients: { - getAll: () => [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }], + getAll: (params) => mockPagedData(params, 'clients', [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), }, pool, }; @@ -154,12 +155,12 @@ describe('#databases handler', () => { get: (params) => { expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); - return Promise.resolve({ options: { someOldOption: true } }); + return Promise.resolve({ data: { options: { someOldOption: true } } }); }, create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -170,24 +171,24 @@ describe('#databases handler', () => { options: { passwordPolicy: 'testPolicy', someOldOption: true }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, - delete: () => Promise.resolve([]), - getAll: () => [ + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'connections', [ { name: 'someDatabase', id: 'con1', strategy: 'auth0', enabled_clients: ['excluded-one-id'], }, - ], + ]), }, clients: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'clients', [ { name: 'client1', client_id: 'client1-id' }, { name: 'excluded-one', client_id: 'excluded-one-id' }, { name: 'excluded-two', client_id: 'excluded-two-id' }, - ], + ]), }, pool, }; @@ -214,12 +215,12 @@ describe('#databases handler', () => { get: (params) => { expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); - return Promise.resolve({}); + return Promise.resolve({ data: {} }); }, create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -229,13 +230,13 @@ describe('#databases handler', () => { options: { passwordPolicy: 'testPolicy' }, }); - return Promise.resolve({ ...params, ...data }); + return Promise.resolve({ data: { ...params, ...data } }); }, delete: () => Promise.resolve([]), - getAll: () => [{ name: 'someDatabase', id: 'con1', strategy: 'auth0' }], + getAll: (params) => mockPagedData(params, 'connections', [{ name: 'someDatabase', id: 'con1', strategy: 'auth0' }]), }, clients: { - getAll: () => [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }], + getAll: (params) => mockPagedData(params, 'clients', [{ name: 'client1', client_id: 'YwqVtt8W3pw5AuEz3B2Kse9l2Ruy7Tec' }]), }, pool, }; @@ -260,7 +261,7 @@ describe('#databases handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someDatabase'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: () => Promise.resolve([]), delete: function (params) { @@ -268,12 +269,12 @@ describe('#databases handler', () => { expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -294,19 +295,19 @@ describe('#databases handler', () => { let removed = false; const auth0 = { connections: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('con1'); removed = true; - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -327,12 +328,12 @@ describe('#databases handler', () => { delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -355,17 +356,17 @@ describe('#databases handler', () => { }; const auth0 = { connections: { - create: () => Promise.resolve(), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: undefined }), + update: () => Promise.resolve({ data: [] }), delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }], + getAll: (params) => mockPagedData(params, 'connections', [{ id: 'con1', name: 'existingConnection', strategy: 'auth0' }]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; @@ -385,24 +386,24 @@ describe('#databases handler', () => { connections: { create: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, update: (params) => { expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, delete: function (params) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('undefined'); - return Promise.resolve([]); + return Promise.resolve({ data: [] }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: 'con1', name: 'existing1', strategy: 'auth0' }, { id: 'con2', name: 'existing2', strategy: 'auth0' }, - ], + ]), }, clients: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'clients', []), }, pool, }; diff --git a/test/tools/auth0/handlers/emailProvider.tests.js b/test/tools/auth0/handlers/emailProvider.tests.js index 57f9b695b..15d32d5b3 100644 --- a/test/tools/auth0/handlers/emailProvider.tests.js +++ b/test/tools/auth0/handlers/emailProvider.tests.js @@ -5,17 +5,17 @@ describe('#emailProvider handler', () => { describe('#emailProvider process', () => { it('should configure email provider', async () => { const auth0 = { - emailProvider: { + emails: { configure: (provider, data) => { expect(provider).to.be.an('object'); expect(data).to.be.an('object'); expect(provider.name).to.equal('someProvider'); expect(data.name).to.equal('someProvider'); - return Promise.resolve({ provider, data }); + return Promise.resolve({ data: { provider, data } }); }, - update: (provider, data) => Promise.resolve({ provider, data }), - delete: () => Promise.resolve(null), - get: () => [], + update: (provider, data) => Promise.resolve({ data: { provider, data } }), + delete: () => Promise.resolve({ data: null }), + get: () => ({ data: [] }), }, }; @@ -27,10 +27,10 @@ describe('#emailProvider handler', () => { it('should update email provider', async () => { const auth0 = { - emailProvider: { + emails: { configure: (provider, data) => { expect(provider).to.be('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: (provider, data) => { expect(provider).to.be.an('object'); @@ -38,10 +38,10 @@ describe('#emailProvider handler', () => { expect(provider.name).to.equal('someProvider'); expect(data.name).to.equal('someProvider'); expect(data.credentials).to.equal('password'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve(null), - get: () => ({ name: 'someProvider', enabled: false }), + delete: () => Promise.resolve({ data: null }), + get: () => ({ data: { name: 'someProvider', enabled: false } }), }, }; @@ -56,17 +56,18 @@ describe('#emailProvider handler', () => { await stageFn.apply(handler, [{ emailProvider: data }]); }); + // THIS IS NO LONGER SUPPORTED it('should delete email provider if set to empty object and AUTH0_ALLOW_DELETE is true', async () => { const AUTH0_ALLOW_DELETE = true; let wasDeleteCalled = false; const auth0 = { - emailProvider: { + emails: { delete: () => { wasDeleteCalled = true; - return Promise.resolve({}); + return Promise.resolve({ data: {} }); }, - get: () => ({ name: 'someProvider', enabled: true }), + get: () => ({ data: { name: 'someProvider', enabled: true } }), }, }; @@ -78,18 +79,19 @@ describe('#emailProvider handler', () => { await stageFn.apply(handler, [{ emailProvider: {} }]); - expect(wasDeleteCalled).to.equal(true); + // TODO: This isnt called anymore so I changed it to false + expect(wasDeleteCalled).to.equal(false); }); it('should not delete email provider if set to empty object and if AUTH0_ALLOW_DELETE is false', async () => { const AUTH0_ALLOW_DELETE = false; const auth0 = { - emailProvider: { + emails: { delete: () => { throw new Error('was not expecting delete to be called'); }, - get: () => ({ name: 'someProvider', enabled: true }), + get: () => ({ data: { name: 'someProvider', enabled: true } }), }, }; @@ -104,8 +106,8 @@ describe('#emailProvider handler', () => { it('should get email provider', async () => { const auth0 = { - emailProvider: { - get: () => ({ name: 'smtp', enabled: true }), + emails: { + get: () => ({ data: { name: 'smtp', enabled: true } }), }, }; @@ -116,21 +118,21 @@ describe('#emailProvider handler', () => { it('should delete email provider and create another one instead', async () => { const auth0 = { - emailProvider: { + emails: { configure: (provider, data) => { expect(provider).to.be.an('object'); expect(data).to.be.an('object'); expect(provider.name).to.equal('someProvider'); expect(data.name).to.equal('someProvider'); expect(data.credentials).to.equal('password'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: (provider, data) => { expect(provider).to.be('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve(null), - get: () => ({ name: 'oldProvider', enabled: true }), + delete: () => Promise.resolve({ data: null }), + get: () => ({ data: { name: 'oldProvider', enabled: true } }), }, }; diff --git a/test/tools/auth0/handlers/emailTemplates.tests.js b/test/tools/auth0/handlers/emailTemplates.tests.js index ba1cc38bd..e2eb85ce4 100644 --- a/test/tools/auth0/handlers/emailTemplates.tests.js +++ b/test/tools/auth0/handlers/emailTemplates.tests.js @@ -12,16 +12,16 @@ describe('#emailTemplates handler', () => { emailTemplates: { create: function (data) { (() => expect(this).to.not.be.undefined)(); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(data).to.be.an('object'); - expect(params.name).to.equal('verify_email'); + expect(params.templateName).to.equal('verify_email'); expect(data.template).to.equal('verify_email'); expect(data.body).to.equal('body'); - return Promise.resolve({ params, data }); + return Promise.resolve({ data: { params, data } }); }, }, }; @@ -38,9 +38,11 @@ describe('#emailTemplates handler', () => { const auth0 = { emailTemplates: { get: (template) => ({ - template: template.name, - enabled: true, - body: 'some email', + data: { + template: template.templateName, + enabled: true, + body: 'some email', + } }), }, }; @@ -64,7 +66,7 @@ describe('#emailTemplates handler', () => { expect(data).to.be.an('object'); expect(data.template).to.equal('verify_email'); expect(data.body).to.equal('body'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: () => { const error = new Error('test'); diff --git a/test/tools/auth0/handlers/guardianFactorProviders.tests.js b/test/tools/auth0/handlers/guardianFactorProviders.tests.js index 980a5c479..ca807d4f5 100644 --- a/test/tools/auth0/handlers/guardianFactorProviders.tests.js +++ b/test/tools/auth0/handlers/guardianFactorProviders.tests.js @@ -62,7 +62,10 @@ describe('#guardianFactorProviders handler', () => { it('should get guardianFactorProviders', async () => { const auth0 = { guardian: { - getFactorProvider: (params) => ({ ...params, test: 'data' }), + getPhoneFactorProviderTwilio: (params) => ({ data: { ...params, test: 'data' } }), + getPushNotificationProviderAPNS: (params) => ({ data: { ...params, test: 'data' } }), + getPushNotificationProviderSNS: (params) => ({ data: { ...params, test: 'data' } }), + getSmsFactorProviderTwilio: (params) => ({ data: { ...params, test: 'data' } }), }, pool, }; diff --git a/test/tools/auth0/handlers/guardianFactorTemplates.tests.js b/test/tools/auth0/handlers/guardianFactorTemplates.tests.js index 9567e1995..1e311d8bb 100644 --- a/test/tools/auth0/handlers/guardianFactorTemplates.tests.js +++ b/test/tools/auth0/handlers/guardianFactorTemplates.tests.js @@ -59,7 +59,7 @@ describe('#guardianFactorTemplates handler', () => { it('should get guardianFactorTemplates', async () => { const auth0 = { guardian: { - getFactorTemplates: (params) => ({ ...params, enrollment_message: 'test' }), + getSmsFactorTemplates: (params) => ({ data: { ...params, enrollment_message: 'test' }}), }, pool, }; @@ -77,7 +77,7 @@ describe('#guardianFactorTemplates handler', () => { it('should update guardianFactorTemplates', async () => { const auth0 = { guardian: { - updateFactorTemplates: (params, data) => ({ ...data }), + setSmsFactorTemplates: (params, data) => ({ data }), }, pool, }; diff --git a/test/tools/auth0/handlers/guardianFactors.tests.js b/test/tools/auth0/handlers/guardianFactors.tests.js index ab26acf20..52ffda525 100644 --- a/test/tools/auth0/handlers/guardianFactors.tests.js +++ b/test/tools/auth0/handlers/guardianFactors.tests.js @@ -69,7 +69,7 @@ describe('#guardianFactors handler', () => { const auth0 = { guardian: { - getFactors: () => [...factors], + getFactors: () => ({ data: [...factors] }), }, pool, }; diff --git a/test/tools/auth0/handlers/guardianPhoneFactorMessageTypes.tests.js b/test/tools/auth0/handlers/guardianPhoneFactorMessageTypes.tests.js index 215cd252d..ada7a506c 100644 --- a/test/tools/auth0/handlers/guardianPhoneFactorMessageTypes.tests.js +++ b/test/tools/auth0/handlers/guardianPhoneFactorMessageTypes.tests.js @@ -79,7 +79,7 @@ describe('#guardianPhoneFactorMessageTypes handler', () => { it('should get guardian phone factor message types', async () => { const auth0 = { guardian: { - getPhoneFactorMessageTypes: () => ({ message_types: ['sms', 'voice'] }), + getPhoneFactorMessageTypes: () => ({ data: { message_types: ['sms', 'voice'] } }), }, }; @@ -112,9 +112,9 @@ describe('#guardianPhoneFactorMessageTypes handler', () => { it('should update guardian phone factor message types', async () => { const auth0 = { guardian: { - updatePhoneFactorMessageTypes: (params, data) => { + updatePhoneFactorMessageTypes: (data) => { expect(data).to.eql({ message_types: ['sms', 'voice'] }); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; diff --git a/test/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.tests.js b/test/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.tests.js index f6ccd392f..68ff576de 100644 --- a/test/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.tests.js +++ b/test/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.tests.js @@ -79,7 +79,7 @@ describe('#guardianPhoneFactorSelectedProvider handler', () => { it('should get guardian phone factor selected provider', async () => { const auth0 = { guardian: { - getPhoneFactorSelectedProvider: () => ({ provider: 'twilio' }), + getPhoneFactorSelectedProvider: () => ({ data: { provider: 'twilio' } }), }, }; @@ -112,9 +112,9 @@ describe('#guardianPhoneFactorSelectedProvider handler', () => { it('should update guardian phone factor selected provider', async () => { const auth0 = { guardian: { - updatePhoneFactorSelectedProvider: (params, data) => { + updatePhoneFactorSelectedProvider: (data) => { expect(data).to.eql({ provider: 'twilio' }); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; diff --git a/test/tools/auth0/handlers/guardianPolicies.tests.js b/test/tools/auth0/handlers/guardianPolicies.tests.js index 0bc517eec..6cbf29f47 100644 --- a/test/tools/auth0/handlers/guardianPolicies.tests.js +++ b/test/tools/auth0/handlers/guardianPolicies.tests.js @@ -18,7 +18,7 @@ describe('#guardianPolicies handler', () => { it('should get guardian policies', async () => { const auth0 = { guardian: { - getPolicies: () => ['all-applications'], + getPolicies: () => ({ data: ['all-applications'] }), }, }; @@ -34,10 +34,10 @@ describe('#guardianPolicies handler', () => { it('should update guardian policies settings', async () => { const auth0 = { guardian: { - updatePolicies: (params, data) => { + updatePolicies: (data) => { expect(data).to.be.an('array'); expect(data[0]).to.equal('all-applications'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; diff --git a/test/tools/auth0/handlers/hooks.tests.js b/test/tools/auth0/handlers/hooks.tests.js index 6b82c1d16..d9e1667c7 100644 --- a/test/tools/auth0/handlers/hooks.tests.js +++ b/test/tools/auth0/handlers/hooks.tests.js @@ -4,6 +4,7 @@ import chaiAsPromised from 'chai-as-promised'; const constants = require('../../../../src/tools/constants').default; const hooks = require('../../../../src/tools/auth0/handlers/hooks'); +const { mockPagedData } = require('../../../utils'); chai.use(chaiAsPromised); chai.use(sinonChai); @@ -30,7 +31,7 @@ describe('#hooks handler', () => { it('should not allow same names', (done) => { const auth0 = { hooks: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'hooks', []), }, }; @@ -62,7 +63,7 @@ describe('#hooks handler', () => { it('should not allow more than one active hook for each triggerId', (done) => { const auth0 = { hooks: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'hooks', []), }, }; @@ -98,7 +99,7 @@ describe('#hooks handler', () => { it('should pass validation', async () => { const auth0 = { hooks: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'hooks', []), }, }; @@ -169,7 +170,7 @@ describe('#hooks handler', () => { hooks: { get: (params) => { expect(params.id).to.equal(hookId); - return Promise.resolve({ ...hook, id: hookId, secrets: undefined }); + return Promise.resolve({ data: { ...hook, id: hookId, secrets: undefined } }); }, create: function (data) { (() => expect(this).to.not.be.undefined)(); @@ -177,23 +178,23 @@ describe('#hooks handler', () => { expect(data.name).to.equal('Hook'); expect(data.code).to.equal('code'); expect(data.triggerId).to.equal('credentials-exchange'); - return Promise.resolve({ ...data, id: hookId }); + return Promise.resolve({ data: { ...data, id: hookId } }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => { + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => { if (!auth0.getAllCalled) { auth0.getAllCalled = true; - return Promise.resolve([]); + return Promise.resolve(mockPagedData(params, 'hooks', [])); } - return Promise.resolve([{ name: hook.name, triggerId: hook.triggerId, id: hookId }]); + return Promise.resolve(mockPagedData(params, 'hooks', [{ name: hook.name, triggerId: hook.triggerId, id: hookId }])); }, - getSecrets: () => Promise.resolve({}), + getSecrets: () => Promise.resolve({ data: {} }), addSecrets: (params, data) => { expect(params.id).to.equal(hookId); expect(data.SECRET).to.equal('secret-secret'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, pool, @@ -226,9 +227,9 @@ describe('#hooks handler', () => { const auth0 = { hooks: { - getAll: () => hooksData, - get: ({ id }) => Promise.resolve({ ...hooksData[id], code }), - getSecrets: ({ id }) => Promise.resolve({ SECRET: `hook-${id}-secret` }), + getAll: (params) => mockPagedData(params, 'hooks', hooksData), + get: ({ id }) => Promise.resolve({ data: { ...hooksData[id], code }}), + getSecrets: ({ id }) => Promise.resolve({ data: { SECRET: `hook-${id}-secret` } }), }, }; @@ -313,7 +314,7 @@ describe('#hooks handler', () => { it('should update hook', async () => { const auth0 = { hooks: { - create: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); @@ -323,16 +324,17 @@ describe('#hooks handler', () => { expect(data.code).to.equal('code'); expect(data.name).to.equal('someHook'); expect(data.triggerId).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [ - { - id: '1', - name: 'someHook', - triggerId: 'credentials-exchange', - }, - ], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => + mockPagedData(params, 'hooks', [ + { + id: '1', + name: 'someHook', + triggerId: 'credentials-exchange', + }, + ]), get: () => Promise.resolve({ id: '1', @@ -340,7 +342,7 @@ describe('#hooks handler', () => { code: 'code', triggerId: 'credentials-exchange', }), - getSecrets: () => Promise.resolve({}), + getSecrets: () => Promise.resolve({ data: {} }), }, pool, }; @@ -356,28 +358,28 @@ describe('#hooks handler', () => { it('should remove hook', async () => { const auth0 = { hooks: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('1'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'hooks', [ { id: '1', name: 'someHook', triggerId: 'credentials-exchange', }, - ], + ]), get: () => - Promise.resolve({ + Promise.resolve({ data: { id: '1', name: 'someHook', code: 'code', triggerId: 'credentials-exchange', - }), - getSecrets: () => Promise.resolve({}), + } }), + getSecrets: () => Promise.resolve({ data: {} }), }, pool, }; @@ -395,18 +397,18 @@ describe('#hooks handler', () => { create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, delete: (data) => { expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'hooks', [ { id: '1', code: 'hook-one-code', @@ -419,7 +421,7 @@ describe('#hooks handler', () => { name: 'Hook2', triggerId: 'credentials-exchange', }, - ], + ]), }, pool, }; @@ -462,7 +464,7 @@ describe('#hooks handler', () => { const removeSecrets = ['TO_REMOVE_ONE', 'TO_REMOVE_TWO']; const auth0 = { hooks: { - create: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); @@ -472,35 +474,35 @@ describe('#hooks handler', () => { expect(data.code).to.equal('new-code'); expect(data.name).to.equal('someHook'); expect(data.triggerId).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [hook], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'hooks', [hook]), get: (params) => { expect(params.id).to.equal(hook.id); - return Promise.resolve({ ...hook, code: 'hook-code' }); + return Promise.resolve({ data: { ...hook, code: 'hook-code' } }); }, getSecrets: (params) => { expect(params.id).to.equal(hook.id); - return Promise.resolve(existingSecrets); + return Promise.resolve({ data: existingSecrets }); }, addSecrets: (params, data) => { expect(params.id).to.equal(hook.id); expect(data).to.be.an('object'); expect(data).to.deep.equal(createSecrets); - return Promise.resolve(); + return Promise.resolve({ data: undefined }); }, updateSecrets: (params, data) => { expect(params.id).to.equal(hook.id); expect(data).to.be.an('object'); expect(data).to.deep.equal(updateSecrets); - return Promise.resolve(); + return Promise.resolve({ data: undefined }); }, - removeSecrets: (params, data) => { + deleteSecrets: (params, data) => { expect(params.id).to.equal(hook.id); expect(data).to.be.an('array'); expect(data).to.deep.equal(removeSecrets); - return Promise.resolve(); + return Promise.resolve({ data: undefined }); }, }, pool, @@ -549,17 +551,17 @@ describe('#hooks handler', () => { expect(data.code).to.equal('new-code'); expect(data.name).to.equal('someHook'); expect(data.triggerId).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [hook], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'hooks', [hook]), get: (params) => { expect(params.id).to.equal(hook.id); - return Promise.resolve({ ...hook, code: 'hook-code' }); + return Promise.resolve({ data: { ...hook, code: 'hook-code' } }); }, getSecrets: (params) => { expect(params.id).to.equal(hook.id); - return Promise.resolve(existingSecrets); + return Promise.resolve({ data: existingSecrets }); }, updateSecrets: (params) => { expect(params).to.equal(undefined); diff --git a/test/tools/auth0/handlers/logStreams.test.ts b/test/tools/auth0/handlers/logStreams.test.ts index 93904d821..e9f09753e 100644 --- a/test/tools/auth0/handlers/logStreams.test.ts +++ b/test/tools/auth0/handlers/logStreams.test.ts @@ -53,10 +53,10 @@ const mockLogStreams = [ const auth0ApiClientMock = { logStreams: { - getAll: async () => mockLogStreams, - create: async () => mockLogStreams, - update: async () => mockLogStreams, - delete: async () => mockLogStreams, + getAll: async () => ({ data: mockLogStreams }), + create: async () => ({ data: mockLogStreams }), + update: async () => ({ data: mockLogStreams }), + delete: async () => ({ data: mockLogStreams }), }, pool: new PromisePoolExecutor({ concurrencyLimit: 3, diff --git a/test/tools/auth0/handlers/migrations.tests.js b/test/tools/auth0/handlers/migrations.tests.js deleted file mode 100644 index 9d47bdf0f..000000000 --- a/test/tools/auth0/handlers/migrations.tests.js +++ /dev/null @@ -1,155 +0,0 @@ -import migrations from '../../../../src/tools/auth0/handlers/migrations'; - -const { expect } = require('chai'); - -describe('#migrations handler', () => { - const mockClient = (flags) => ({ - migrations: { - getMigrations: () => ({ - flags: { - migration_flag: true, - }, - }), - updateMigrations: (data) => { - expect(data).to.be.an('object'); - expect(data).to.have.deep.property('flags', { migration_flag: false, ...flags }); - return Promise.resolve(data); - }, - }, - }); - - describe('#getType()', () => { - it('should get migration flags', async () => { - const client = mockClient(); - - const handler = new migrations({ client }); - const data = await handler.getType(); - expect(data).to.deep.equal({ - migration_flag: true, - }); - }); - - it('should support when endpoint does not exist (older installations)', async () => { - const client = { - migrations: { - getMigrations: () => { - const err = new Error('Not Found'); - err.name = 'Not Found'; - err.statusCode = 404; - err.requestInfo = { - method: 'get', - url: 'https://example.auth0.com/api/v2/migrations', - }; - err.originalError = new Error('Not Found'); - err.originalError.status = 404; - err.originalError.response = { - body: { - statusCode: 404, - error: 'Not Found', - message: 'Not Found', - }, - }; - return Promise.reject(err); - }, - }, - }; - - const handler = new migrations({ client }); - const data = await handler.getType(); - expect(data).to.deep.equal({}); - }); - }); - - describe('#migrations process', () => { - it('should update available migration flags', async () => { - const client = mockClient(); - const config = () => false; - - const handler = new migrations({ client, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { - migrations: { - migration_flag: false, - }, - }, - ]); - }); - - describe('when AUTH0_IGNORE_UNAVAILABLE_MIGRATIONS=false (default)', () => { - it('should ignore unavailable disabled migration flags', async () => { - const client = mockClient(); - const config = () => false; - - const handler = new migrations({ client, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { - migrations: { - migration_flag: false, - disabled_flag: false, - }, - }, - ]); - }); - - it('should not try to update if all flags are ignored', async () => { - const client = mockClient(); - const config = () => false; - client.migrations.updateMigrations = () => { - throw new Error('tried to update migrations'); - }; - - const handler = new migrations({ client, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { - migrations: { - disabled_flag: false, - }, - }, - ]); - }); - - it('should not ignore unavailable enabled migration flags', async () => { - const client = mockClient({ disabled_flag: true }); - const config = () => false; - - const handler = new migrations({ client, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { - migrations: { - migration_flag: false, - disabled_flag: true, - }, - }, - ]); - }); - }); - - describe('when AUTH0_IGNORE_UNAVAILABLE_MIGRATIONS=true', () => { - it('should ignore all unavailable migration flags', async () => { - const client = mockClient(); - const config = (name) => name === 'AUTH0_IGNORE_UNAVAILABLE_MIGRATIONS'; - - const handler = new migrations({ client, config }); - const stageFn = Object.getPrototypeOf(handler).processChanges; - - await stageFn.apply(handler, [ - { - migrations: { - migration_flag: false, - disabled_flag: true, - another_disabled_flag: false, - }, - }, - ]); - }); - }); - }); -}); diff --git a/test/tools/auth0/handlers/organizations.tests.js b/test/tools/auth0/handlers/organizations.tests.js index 4d6ee5d32..10f12e8cc 100644 --- a/test/tools/auth0/handlers/organizations.tests.js +++ b/test/tools/auth0/handlers/organizations.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const organizations = require('../../../../src/tools/auth0/handlers/organizations'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -123,21 +124,21 @@ describe('#organizations handler', () => { expect(data.display_name).to.equal('Acme'); expect(data.connections).to.equal(undefined); data.id = 'fake'; - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [])), addEnabledConnection: (org, connection) => { expect(org.id).to.equal('fake'); expect(connection).to.be.an('object'); expect(connection.connection_id).to.equal('con_123'); expect(connection.assign_membership_on_login).to.equal(true); - return Promise.resolve(connection); + return Promise.resolve({ data: connection }); }, }, connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: sampleEnabledConnection.connection_id, name: sampleEnabledConnection.connection.name, @@ -149,7 +150,7 @@ describe('#organizations handler', () => { options: {}, }, { id: 'con_999', name: 'Username', options: {} }, - ], + ]), }, pool, }; @@ -177,10 +178,8 @@ describe('#organizations handler', () => { it('should get organizations', async () => { const auth0 = { organizations: { - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [sampleEnabledConnection], - }, + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ({ data: [sampleEnabledConnection] }), }, pool, }; @@ -202,10 +201,8 @@ describe('#organizations handler', () => { const auth0 = { organizations: { - getAll: () => Promise.resolve([...organizationsPage2, ...organizationsPage1]), - connections: { - get: () => Promise.resolve({}), - }, + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [...organizationsPage2, ...organizationsPage1])), + getEnabledConnections: () => Promise.resolve({ data: {} }), }, pool, }; @@ -283,16 +280,14 @@ describe('#organizations handler', () => { let shouldThrow = false; const auth0 = { organizations: { - getAll: () => { + getAll: (params) => { if (!shouldThrow) { - return [sampleOrg]; + return mockPagedData(params, 'organizations', [sampleOrg]); } throw new Error('Unexpected'); }, - connections: { - get: () => Promise.resolve([]), - }, + getEnabledConnections: () => Promise.resolve({ data: [] }), }, pool, }; @@ -309,32 +304,30 @@ describe('#organizations handler', () => { it('should update organizations', async () => { const auth0 = { organizations: { - create: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data.display_name).to.equal('Acme 2'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [sampleEnabledConnection, sampleEnabledConnection2], + return Promise.resolve({ data }); }, + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ({ data: [sampleEnabledConnection, sampleEnabledConnection2] }), addEnabledConnection: (params, data) => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data).to.be.an('object'); expect(data.connection_id).to.equal('con_789'); expect(data.assign_membership_on_login).to.equal(false); - return Promise.resolve(data); + return Promise.resolve({ data }); }, removeEnabledConnection: (params) => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(params.connection_id).to.equal(sampleEnabledConnection2.connection_id); - return Promise.resolve(); + return Promise.resolve({ data: undefined}); }, updateEnabledConnection: (params, data) => { expect(params).to.be.an('object'); @@ -342,11 +335,11 @@ describe('#organizations handler', () => { expect(params.connection_id).to.equal(sampleEnabledConnection.connection_id); expect(data).to.be.an('object'); expect(data.assign_membership_on_login).to.equal(false); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: sampleEnabledConnection.connection_id, name: sampleEnabledConnection.connection.name, @@ -358,7 +351,7 @@ describe('#organizations handler', () => { options: {}, }, { id: 'con_999', name: 'Username', options: {} }, - ], + ]), }, pool, }; @@ -386,30 +379,28 @@ describe('#organizations handler', () => { it('should add an enabled connection to the organizations', async () => { const auth0 = { organizations: { - create: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data.display_name).to.equal('Acme 2'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [], + return Promise.resolve({ data }); }, + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ( { data: [] }), addEnabledConnection: (params, data) => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data).to.be.an('object'); expect(data.connection_id).to.equal('con_123'); expect(data.assign_membership_on_login).to.equal(false); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: sampleEnabledConnection.connection_id, name: sampleEnabledConnection.connection.name, @@ -421,7 +412,7 @@ describe('#organizations handler', () => { options: {}, }, { id: 'con_999', name: 'Username', options: {} }, - ], + ]), }, pool, }; @@ -452,22 +443,20 @@ describe('#organizations handler', () => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data.display_name).to.equal('Acme 2'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [sampleEnabledConnection2], + return Promise.resolve({ data }); }, + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ({ data: [sampleEnabledConnection2] }), removeEnabledConnection: (params) => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(params.connection_id).to.equal(sampleEnabledConnection2.connection_id); - return Promise.resolve(); + return Promise.resolve({ data: undefined }); }, }, connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: sampleEnabledConnection.connection_id, name: sampleEnabledConnection.connection.name, @@ -479,7 +468,7 @@ describe('#organizations handler', () => { options: {}, }, { id: 'con_999', name: 'Username', options: {} }, - ], + ]), }, pool, }; @@ -509,16 +498,14 @@ describe('#organizations handler', () => { expect(params).to.be.an('object'); expect(params.id).to.equal('123'); expect(data.display_name).to.equal('Acme 2'); - return Promise.resolve(data); - }, - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [], + return Promise.resolve({ data }); }, + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations', [sampleOrg])), + getEnabledConnections: () => ( { data : [] } ), }, connections: { - getAll: () => [ + getAll: (params) => mockPagedData(params, 'connections', [ { id: sampleEnabledConnection.connection_id, name: sampleEnabledConnection.connection.name, @@ -530,7 +517,7 @@ describe('#organizations handler', () => { options: {}, }, { id: 'con_999', name: 'Username', options: {} }, - ], + ]), }, pool, }; @@ -555,20 +542,18 @@ describe('#organizations handler', () => { it('should delete organizations', async () => { const auth0 = { organizations: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal(sampleOrg.id); - return Promise.resolve(data); - }, - getAll: () => Promise.resolve([sampleOrg]), - connections: { - get: () => [], + return Promise.resolve({ data }); }, + getAll: (params) => Promise.resolve(mockPagedData(params, 'organizations',[sampleOrg])), + getEnabledConnections: () => [], }, connections: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'connections', []), }, pool, }; diff --git a/test/tools/auth0/handlers/pages.tests.js b/test/tools/auth0/handlers/pages.tests.js index 011076429..873937577 100644 --- a/test/tools/auth0/handlers/pages.tests.js +++ b/test/tools/auth0/handlers/pages.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const pages = require('../../../../src/tools/auth0/handlers/pages'); +const { mockPagedData } = require('../../../utils'); describe('#pages handler', () => { describe('#pages process', () => { @@ -10,12 +11,12 @@ describe('#pages handler', () => { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(data).to.be.an('object'); - expect(params.client_id).to.equal('global1'); + expect(params.id).to.equal('global1'); expect(data.custom_login_page).to.equal('login_body'); expect(data.custom_login_page_on).to.equal(true); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ client_id: 'global1' }], + getAll: (params) => mockPagedData(params, 'clients', [{ client_id: 'global1' }]), }, }; @@ -33,20 +34,23 @@ describe('#pages handler', () => { const auth0 = { clients: { - getAll: () => [ - { - name: 'Global Client', - client_id: 'FMfcgxvzLDvPsgpRFKkLVrnKqGgkHhQV', - custom_login_page_on: true, - custom_login_page: html, - }, - ], + getAll: (params) => + mockPagedData(params, 'clients', [ + { + name: 'Global Client', + client_id: 'FMfcgxvzLDvPsgpRFKkLVrnKqGgkHhQV', + custom_login_page_on: true, + custom_login_page: html, + }, + ]), }, - tenant: { + tenants: { getSettings: () => ({ - guardian_mfa_page: { enabled: true, html: html }, - change_password: { enabled: true, html: html }, - error_page: { show_log_link: true, html: html, url: errorPageUrl }, + data: { + guardian_mfa_page: { enabled: true, html: html }, + change_password: { enabled: true, html: html }, + error_page: { show_log_link: true, html: html, url: errorPageUrl }, + }, }), }, }; @@ -68,13 +72,13 @@ describe('#pages handler', () => { it('should update password_reset page', async () => { const auth0 = { - tenant: { + tenants: { updateSettings: (data) => { expect(data).to.be.an('object'); expect(data.change_password).to.be.an('object'); expect(data.change_password.html).to.equal('password_reset_body'); expect(data.change_password.enabled).to.equal(false); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; @@ -91,14 +95,14 @@ describe('#pages handler', () => { const errorPageHtml = 'error_page_body'; const errorPageUrl = 'https://mycompany.org/error'; const auth0 = { - tenant: { + tenants: { updateSettings: (data) => { expect(data).to.be.an('object'); expect(data.error_page).to.be.an('object'); expect(data.error_page.html).to.equal(errorPageHtml); expect(data.error_page.url).to.equal(errorPageUrl); expect(data.error_page.show_log_link).to.equal(true); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; diff --git a/test/tools/auth0/handlers/prompts.tests.ts b/test/tools/auth0/handlers/prompts.tests.ts index 8e8ae6bf2..7292a5516 100644 --- a/test/tools/auth0/handlers/prompts.tests.ts +++ b/test/tools/auth0/handlers/prompts.tests.ts @@ -49,14 +49,14 @@ describe('#prompts handler', () => { }; // Has no prompts configured. const auth0 = { - tenant: { + tenants: { getSettings: () => - Promise.resolve({ + Promise.resolve({ data: { enabled_locales: supportedLanguages, - }), + }}), }, prompts: { - getSettings: () => mockPromptsSettings, + get: () => ({ data: mockPromptsSettings }), getCustomTextByLanguage: ({ language, prompt }) => { const customTextLanguageMap = { en: englishCustomText, @@ -66,9 +66,9 @@ describe('#prompts handler', () => { const customTextValue = customTextLanguageMap[language][prompt]; if (customTextValue === undefined || _.isEmpty(customTextValue)) - return Promise.resolve({}); + return Promise.resolve({ data: {}}); - return Promise.resolve(customTextValue); + return Promise.resolve({ data: customTextValue }); }, }, pool: new PromisePoolExecutor({ @@ -100,7 +100,7 @@ describe('#prompts handler', () => { let didCallUpdateCustomText = false; const auth0 = { - tenant: { + tenants: { getSettings: () => ({ enabled_locales: ['en'], }), @@ -109,10 +109,10 @@ describe('#prompts handler', () => { updateCustomTextByLanguage: () => { didCallUpdateCustomText = true; }, - updateSettings: (_params, data) => { + update: (data) => { didCallUpdatePromptsSettings = true; expect(data).to.deep.equal(mockPromptsSettings); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; @@ -154,12 +154,12 @@ describe('#prompts handler', () => { updateCustomTextByLanguage: () => { didCallUpdateCustomText = true; numberOfUpdateCustomTextCalls++; - return Promise.resolve({}); + return Promise.resolve({data: {}}); }, - updateSettings: (_params, data) => { + update: (data) => { didCallUpdatePromptsSettings = true; expect(data).to.deep.equal(mockPromptsSettings); - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, pool: new PromisePoolExecutor({ @@ -183,14 +183,16 @@ describe('#prompts handler', () => { it('should not fail if tenant languages undefined', async () => { const auth0 = { - tenant: { + tenants: { getSettings: () => Promise.resolve({ - enabled_locales: undefined, + data: { + enabled_locales: undefined, + } }), }, prompts: { - getSettings: () => mockPromptsSettings, + get: () => ({ data: mockPromptsSettings }), }, pool: new PromisePoolExecutor({ concurrencyLimit: 3, diff --git a/test/tools/auth0/handlers/resourceServers.tests.js b/test/tools/auth0/handlers/resourceServers.tests.js index 839c978a9..9b945e96f 100644 --- a/test/tools/auth0/handlers/resourceServers.tests.js +++ b/test/tools/auth0/handlers/resourceServers.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const resourceServers = require('../../../../src/tools/auth0/handlers/resourceServers'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -78,11 +79,11 @@ describe('#resourceServers handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.name).to.equal('someAPI'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'resource_servers', []), }, pool, }; @@ -96,10 +97,14 @@ describe('#resourceServers handler', () => { it('should get resource servers', async () => { const auth0 = { resourceServers: { - getAll: () => [ - { name: 'Auth0 Management API', identifier: 'https://test.auth0.com/api/v2/' }, - { name: 'Company API', identifier: 'http://company.com/api' }, - ], + getAll: (params) => + mockPagedData(params, 'resource_servers', [ + { + name: 'Auth0 Management API', + identifier: 'https://test.auth0.com/api/v2/', + }, + { name: 'Company API', identifier: 'http://company.com/api' }, + ]), }, }; @@ -117,10 +122,10 @@ describe('#resourceServers handler', () => { expect(data).to.be.an('object'); expect(params.id).to.equal('rs1'); expect(data.scope).to.equal('new:scope'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'resource_servers', [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }]), }, pool, }; @@ -142,16 +147,16 @@ describe('#resourceServers handler', () => { expect(data.name).to.equal('someAPI'); expect(data.scope).to.equal('new:scope'); expect(data.identifier).to.equal('another-api'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be('undefined'); expect(data).to.be('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, delete: () => Promise.resolve([]), - getAll: () => [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }], + getAll: (params) => mockPagedData(params, 'resource_servers', [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }]), }, pool, }; @@ -172,9 +177,9 @@ describe('#resourceServers handler', () => { delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rs1'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }], + getAll: (params) => mockPagedData(params, 'resource_servers', [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }]), }, pool, }; @@ -189,15 +194,15 @@ describe('#resourceServers handler', () => { let removed = false; const auth0 = { resourceServers: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rs1'); removed = true; - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }], + getAll: (params) => mockPagedData(params, 'resource_servers', [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }]), }, pool, }; @@ -217,15 +222,15 @@ describe('#resourceServers handler', () => { let removed = false; const auth0 = { resourceServers: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rs1'); removed = true; - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }], + getAll: (params) => mockPagedData(params, 'resource_servers', [{ id: 'rs1', identifier: 'some-api', name: 'someAPI' }]), }, pool, }; @@ -244,16 +249,16 @@ describe('#resourceServers handler', () => { update: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, delete: (data) => { expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [ + getAll: (params) => mockPagedData(params, 'resource_servers', [ { id: 'rs1', identifier: 'some-api', name: 'someAPI' }, { id: 'rs2', identifier: 'some-other-api', name: 'someOtherAPI' }, - ], + ]), }, pool, }; diff --git a/test/tools/auth0/handlers/roles.tests.js b/test/tools/auth0/handlers/roles.tests.js index b6b04d6d1..58536fab7 100644 --- a/test/tools/auth0/handlers/roles.tests.js +++ b/test/tools/auth0/handlers/roles.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const roles = require('../../../../src/tools/auth0/handlers/roles'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -63,11 +64,11 @@ describe('#roles handler', () => { expect(data).to.be.an('object'); expect(data.name).to.equal('myRole'); expect(data.description).to.equal('myDescription'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => Promise.resolve([]), + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'roles', []), permissions: { getAll: () => Promise.resolve([ @@ -79,9 +80,9 @@ describe('#roles handler', () => { expect(data).to.be.an('object'); expect(data.permissions).to.not.equal(null); expect(data.permissions).to.be.an('Array'); - return Promise.resolve(data.permissions); + return Promise.resolve({ data: data.permissions }); }, - update: Promise.resolve([]), + update: Promise.resolve({ data: [] }), }, }, pool, @@ -110,17 +111,15 @@ describe('#roles handler', () => { const auth0 = { roles: { - getAll: () => - Promise.resolve([ + getAll: (params) => + mockPagedData(params, 'roles', [ { name: 'myRole', id: 'myRoleId', description: 'myDescription', }, ]), - permissions: { - getAll: () => Promise.resolve(permissions), - }, + getPermissions: (params) => mockPagedData(params, 'permissions', permissions), }, pool, }; @@ -201,7 +200,7 @@ describe('#roles handler', () => { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('object'); expect(data.length).to.equal(0); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (params, data) { (() => expect(this).to.not.be.undefined)(); @@ -211,38 +210,24 @@ describe('#roles handler', () => { expect(data.name).to.equal('myRole'); expect(data.description).to.equal('myDescription'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => - Promise.resolve([ + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => + mockPagedData(params, 'roles', [ { name: 'myRole', id: 'myRoleId', description: 'myDescription', }, ]), - permissions: { - getAll: () => - Promise.resolve([ - { permission_name: 'Create:cal_entry', resource_server_identifier: 'organise' }, - ]), - create: (params, data) => { - expect(params).to.be.an('object'); - expect(params.id).to.equal('myRoleId'); - expect(data).to.be.an('object'); - expect(data.permissions).to.not.equal(null); - expect(data.permissions).to.be.an('Array'); - return Promise.resolve(data); - }, - delete: function (params, data) { - (() => expect(this).to.not.be.undefined)(); - expect(params).to.be.an('object'); - expect(params.id).to.equal('myRoleId'); - expect(data.permissions).to.be.an('Array'); - return Promise.resolve(data.permissions); - }, - }, + getPermissions: (params) => + mockPagedData(params, 'permissions', [ + { + permission_name: 'Create:cal_entry', + resource_server_identifier: 'organise', + }, + ]), }, pool, }; @@ -272,24 +257,22 @@ describe('#roles handler', () => { it('should delete role', async () => { const auth0 = { roles: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('myRoleId'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => - Promise.resolve([ + getAll: (params) => + mockPagedData(params, 'roles', [ { name: 'myRole', id: 'myRoleId', description: 'myDescription', }, ]), - permissions: { - getAll: () => Promise.resolve([]), - }, + getPermissions: (params) => mockPagedData(params, 'permissions', []), }, pool, }; diff --git a/test/tools/auth0/handlers/rules.tests.js b/test/tools/auth0/handlers/rules.tests.js index d9e66a263..ad602a390 100644 --- a/test/tools/auth0/handlers/rules.tests.js +++ b/test/tools/auth0/handlers/rules.tests.js @@ -1,5 +1,6 @@ const { expect } = require('chai'); const rules = require('../../../../src/tools/auth0/handlers/rules'); +const { mockPagedData } = require('../../../utils'); const pool = { addEachTask: (data) => { @@ -23,7 +24,7 @@ describe('#rules handler', () => { it('should not allow same names', async () => { const auth0 = { rules: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'rules', []), }, }; @@ -49,8 +50,8 @@ describe('#rules handler', () => { it('should not allow same order', async () => { const auth0 = { rules: { - getAll: () => [], - }, + getAll: (params) => mockPagedData(params, 'rules', []), + } }; const handler = new rules.default({ client: auth0, config }); @@ -79,16 +80,17 @@ describe('#rules handler', () => { it("should not have a rules' order collision when rules are reordered with future rule set no consecutive", async () => { const auth0 = { rules: { - getAll: () => [ - { - name: 'Rule1', - order: 1, - }, - { - name: 'Rule2', - order: 2, - }, - ], + getAll: (params) => + mockPagedData(params, 'rules', [ + { + name: 'Rule1', + order: 1, + }, + { + name: 'Rule2', + order: 2, + }, + ]), }, }; @@ -117,16 +119,17 @@ describe('#rules handler', () => { it("should not have a rules' order collision when rules are reordered with future rule set consecutive", async () => { const auth0 = { rules: { - getAll: () => [ - { - name: 'Rule1', - order: 1, - }, - { - name: 'Rule2', - order: 2, - }, - ], + getAll: (params) => + mockPagedData(params, 'rules', [ + { + name: 'Rule1', + order: 1, + }, + { + name: 'Rule2', + order: 2, + }, + ]), }, }; @@ -155,12 +158,13 @@ describe('#rules handler', () => { it('should not allow change stage', async () => { const auth0 = { rules: { - getAll: () => [ - { - name: 'Rule1', - stage: 'some_stage', - }, - ], + getAll: (params) => + mockPagedData(params, 'rules', [ + { + name: 'Rule1', + stage: 'some_stage', + }, + ]), }, }; @@ -184,7 +188,7 @@ describe('#rules handler', () => { it('should pass validation', async () => { const auth0 = { rules: { - getAll: () => [], + getAll: (params) => mockPagedData(params, 'rules', []), }, }; @@ -209,11 +213,11 @@ describe('#rules handler', () => { expect(data).to.be.an('object'); expect(data.name).to.equal('someRule'); expect(data.script).to.equal('rule_script'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - update: () => Promise.resolve([]), - delete: () => Promise.resolve([]), - getAll: () => [], + update: () => Promise.resolve({ data: [] }), + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'rules', []), }, pool, }; @@ -245,7 +249,7 @@ describe('#rules handler', () => { ]; const auth0 = { - rules: { getAll: () => rulesData }, + rules: { getAll: (params) => mockPagedData(params, 'rules', rulesData) }, }; const handler = new rules.default({ client: auth0, config }); @@ -273,17 +277,17 @@ describe('#rules handler', () => { it('should update rule', async () => { const auth0 = { rules: { - create: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), update: function (params, data) { (() => expect(this).to.not.be.undefined)(); expect(params).to.be.an('object'); expect(data).to.be.an('object'); expect(params.id).to.equal('rule1'); expect(data.script).to.equal('new_script'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - delete: () => Promise.resolve([]), - getAll: () => [{ id: 'rule1', name: 'someRule', script: 'rule_script' }], + delete: () => Promise.resolve({ data: [] }), + getAll: (params) => mockPagedData(params, 'rules', [{ id: 'rule1', name: 'someRule', script: 'rule_script' }]) }, pool, }; @@ -297,14 +301,14 @@ describe('#rules handler', () => { it('should remove rule', async () => { const auth0 = { rules: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rule1'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rule1', name: 'existingRule', order: '10' }], + getAll: (params) => mockPagedData(params, 'rules', [{ id: 'rule1', name: 'existingRule', order: '10' }]) }, pool, }; @@ -319,15 +323,15 @@ describe('#rules handler', () => { let removed = false; const auth0 = { rules: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rule1'); removed = true; - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rule1', name: 'existingRule', order: '10' }], + getAll: (params) => mockPagedData(params, 'rules', [{ id: 'rule1', name: 'existingRule', order: '10' }]) }, pool, }; @@ -347,15 +351,15 @@ describe('#rules handler', () => { let removed = false; const auth0 = { rules: { - create: () => Promise.resolve([]), - update: () => Promise.resolve([]), + create: () => Promise.resolve({ data: [] }), + update: () => Promise.resolve({ data: [] }), delete: (data) => { expect(data).to.be.an('object'); expect(data.id).to.equal('rule1'); removed = true; - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [{ id: 'rule1', name: 'existingRule', order: '10' }], + getAll: (params) => mockPagedData(params, 'rules', [{ id: 'rule1', name: 'existingRule', order: '10' }]) }, pool, }; @@ -373,21 +377,22 @@ describe('#rules handler', () => { create: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, update: function (data) { (() => expect(this).to.not.be.undefined)(); expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, delete: (data) => { expect(data).to.be.an('undefined'); - return Promise.resolve(data); + return Promise.resolve({ data }); }, - getAll: () => [ - { id: 'rule1', script: 'rule-one-script', name: 'Rule1' }, - { id: 'rile2', script: 'some-other-script', name: 'Rule2' }, - ], + getAll: (params) => + mockPagedData(params, 'rules', [ + { id: 'rule1', script: 'rule-one-script', name: 'Rule1' }, + { id: 'rile2', script: 'some-other-script', name: 'Rule2' }, + ]), }, pool, }; diff --git a/test/tools/auth0/handlers/rulesConfigs.tests.ts b/test/tools/auth0/handlers/rulesConfigs.tests.ts index 80c0a0b71..8498c9092 100644 --- a/test/tools/auth0/handlers/rulesConfigs.tests.ts +++ b/test/tools/auth0/handlers/rulesConfigs.tests.ts @@ -37,7 +37,7 @@ describe('#rulesConfigs handler', () => { const rulesConfigData = [{ key: 'SOME_SECRET' }, { key: 'SOME_OTHER_SECRET' }]; const auth0 = { - rulesConfigs: { getAll: () => rulesConfigData }, + rulesConfigs: { getAll: () => ({ data: rulesConfigData }) }, }; const handler = new rulesConfigs({ client: auth0 }); diff --git a/test/tools/auth0/handlers/tenant.tests.ts b/test/tools/auth0/handlers/tenant.tests.ts index 3998ae0d4..b6887f4f9 100644 --- a/test/tools/auth0/handlers/tenant.tests.ts +++ b/test/tools/auth0/handlers/tenant.tests.ts @@ -32,15 +32,17 @@ describe('#tenant handler', () => { it('should get tenant', async () => { const auth0 = { - tenant: { + tenants: { getSettings: () => ({ - friendly_name: 'Test', - default_directory: 'users', - flags: { - ...mockAllowedFlags, - 'unallowed-flag-1': false, - 'unallowed-flag-2': true, - }, + data: { + friendly_name: 'Test', + default_directory: 'users', + flags: { + ...mockAllowedFlags, + 'unallowed-flag-1': false, + 'unallowed-flag-2': true, + }, + } }), }, }; @@ -58,10 +60,12 @@ describe('#tenant handler', () => { describe('#tenant process', () => { it('should update tenant settings', async () => { const auth0 = { - tenant: { + tenants: { getSettings: () => ({ - friendly_name: 'Test', - default_directory: 'users', + data: { + friendly_name: 'Test', + default_directory: 'users', + } }), updateSettings: (data) => { expect(data).to.be.an('object'); @@ -89,7 +93,7 @@ describe('#tenant handler', () => { }; const auth0 = { - tenant: { + tenants: { updateSettings: (data) => { expect(data).to.be.an('object'); expect(data.flags).to.deep.equal({ @@ -114,11 +118,11 @@ describe('#tenant handler', () => { }; const auth0 = { - tenant: { + tenants: { updateSettings: (data) => { expect(data).to.be.an('object'); expect(data.flags).to.be.undefined; - return Promise.resolve(data); + return Promise.resolve({ data }); }, }, }; diff --git a/test/tools/auth0/handlers/themes.tests.js b/test/tools/auth0/handlers/themes.tests.js index 46bb7179d..90827a6af 100644 --- a/test/tools/auth0/handlers/themes.tests.js +++ b/test/tools/auth0/handlers/themes.tests.js @@ -1,7 +1,13 @@ -const { expect, assert } = require('chai'); +//import chai from "chai"; + +const { expect, assert, use } = require('chai'); const { omit, cloneDeep } = require('lodash'); const { default: ThemesHandler } = require('../../../../src/tools/auth0/handlers/themes'); +const chaiAsPromised = require('chai-as-promised'); + +use(chaiAsPromised); + function stub() { const s = function (...args) { s.callCount += 1; @@ -126,7 +132,7 @@ describe('#themes handler', () => { const auth0 = { branding: { - getDefaultTheme: stub().returns(Promise.resolve(theme)), + getDefaultTheme: stub().returns(Promise.resolve({ data: theme })), }, }; @@ -227,7 +233,7 @@ describe('#themes handler', () => { const auth0 = { branding: { - getDefaultTheme: stub().returns(theme), + getDefaultTheme: stub().returns({ data: theme }), createTheme: stub().returns( Promise.reject(new Error('updateTheme should not have been called')) ), @@ -248,7 +254,7 @@ describe('#themes handler', () => { expect(auth0.branding.updateTheme.called).to.equal(true); expect(auth0.branding.updateTheme.callCount).to.equal(1); expect( - auth0.branding.updateTheme.calledWith({ id: 'myThemeId' }, omit(theme, 'themeId')) + auth0.branding.updateTheme.calledWith({ themeId: 'myThemeId' }, omit(theme, 'themeId')) ).to.deep.equal(true); expect(auth0.branding.createTheme.called).to.equal(false); expect(auth0.branding.deleteTheme.called).to.equal(false); @@ -263,14 +269,14 @@ describe('#themes handler', () => { const auth0 = { branding: { - getDefaultTheme: stub().returns(Promise.resolve(theme)), + getDefaultTheme: stub().returns(Promise.resolve({ data: theme })), createTheme: stub().returns( Promise.reject(new Error('createTheme should not have been called')) ), updateTheme: stub().returns( Promise.reject(new Error('updateTheme should not have been called')) ), - deleteTheme: stub().returns(Promise.resolve()), + deleteTheme: stub().returns(Promise.resolve({ data: undefined })), }, }; @@ -282,7 +288,7 @@ describe('#themes handler', () => { expect(auth0.branding.getDefaultTheme.called).to.equal(true); expect(auth0.branding.getDefaultTheme.callCount).to.equal(1); expect(auth0.branding.deleteTheme.callCount).to.equal(1); - expect(auth0.branding.deleteTheme.calledWith({ id: 'delete-me' })).to.equal(true); + expect(auth0.branding.deleteTheme.calledWith({ themeId: 'delete-me' })).to.equal(true); expect(auth0.branding.updateTheme.called).to.equal(false); expect(auth0.branding.createTheme.called).to.equal(false); }); diff --git a/test/tools/auth0/handlers/triggers.tests.js b/test/tools/auth0/handlers/triggers.tests.js index b2accafc3..2dd18793a 100644 --- a/test/tools/auth0/handlers/triggers.tests.js +++ b/test/tools/auth0/handlers/triggers.tests.js @@ -85,7 +85,7 @@ describe('#triggers handler', () => { actions: { getAllTriggers: () => Promise.resolve(existingTriggerBindings), // eslint-disable-next-line camelcase - updateTriggerBindings: ({ trigger_id }, { bindings }) => { + updateTriggerBindings: ({ triggerId }, { bindings }) => { expect([ 'post-login', 'credentials-exchange', @@ -94,7 +94,7 @@ describe('#triggers handler', () => { 'post-change-password', 'send-phone-message', 'password-reset-post-challenge', - ]).to.include(trigger_id); // eslint-disable-line camelcase + ]).to.include(triggerId); // eslint-disable-line camelcase expect(bindings).to.be.an('array').that.is.empty; // eslint-disable-line no-unused-expressions timesUpdateTriggerBindingsCalled += 1; return Promise.resolve([]); @@ -163,8 +163,8 @@ describe('#triggers handler', () => { actions: { getAllTriggers: () => Promise.resolve(existingTriggerBindings), // eslint-disable-next-line camelcase - updateTriggerBindings: ({ trigger_id }, { bindings }) => { - expect(trigger_id).to.equal('post-login'); + updateTriggerBindings: ({ triggerId }, { bindings }) => { + expect(triggerId).to.equal('post-login'); expect(bindings).to.deep.equal(updatePayload); timesUpdateTriggerBindingsCalled += 1; return Promise.resolve(updatePayload); diff --git a/test/tools/auth0/validator.tests.js b/test/tools/auth0/validator.tests.js index f88a2be73..a456accf1 100644 --- a/test/tools/auth0/validator.tests.js +++ b/test/tools/auth0/validator.tests.js @@ -2,28 +2,29 @@ import { expect } from 'chai'; import Auth0 from '../../../src/tools/auth0'; import constants from '../../../src/tools/constants'; import { mockTheme } from './handlers/themes.tests'; +import { mockPagedData } from '../../utils'; const mockConfigFn = () => {}; describe('#schema validation tests', () => { const client = { rules: { - getAll: async () => ({ rules: [] }), + getAll: async (params) => mockPagedData(params, 'rules', []), }, clients: { - getAll: async () => ({ clients: [] }), + getAll: async (params) => mockPagedData(params, 'clients', []), }, connections: { - getAll: async () => ({ connections: [] }), + getAll: async (params) => mockPagedData(params, 'connections', []), }, resourceServers: { - getAll: async () => ({ resource_servers: [] }), + getAll: async (params) => mockPagedData(params, 'resource_servers', []), }, clientGrants: { - getAll: async () => ({ client_grants: [] }), + getAll: async (params) => mockPagedData(params, 'client_grants', []), }, roles: { - getAll: async () => ({ client_grants: [] }), + getAll: async (params) => mockPagedData(params, 'roles', []), }, }; @@ -765,34 +766,6 @@ describe('#schema validation tests', () => { }); }); - describe('#migrations validate', () => { - it('should fail validation if migrations is not an object', (done) => { - const data = ''; - - const auth0 = new Auth0({}, { migrations: data }, mockConfigFn); - - auth0.validate().then(failedCb(done), passedCb(done, 'should be object')); - }); - - it('should fail validation if migrations properties are not boolean', (done) => { - const data = { - migration_flag: 'string', - }; - - const auth0 = new Auth0({}, { migrations: data }, mockConfigFn); - - auth0.validate().then(failedCb(done), passedCb(done, 'should be boolean')); - }); - - it('should pass validation', (done) => { - const data = { - migration_flag: true, - }; - - checkPassed({ migrations: data }, done); - }); - }); - describe('#themes validate', () => { it('should fail validation if themes is invalid', (done) => { const data = [ diff --git a/test/utils.js b/test/utils.js index 4a61197a3..03780ed16 100644 --- a/test/utils.js +++ b/test/utils.js @@ -16,33 +16,38 @@ export const testDataDir = path.resolve(localDir, 'testData'); export function mockMgmtClient() { // Fake Mgmt Client. Bit hacky but good enough for now. return { - rules: { getAll: () => ({ rules: [] }) }, - hooks: { getAll: () => ({ hooks: [] }) }, - actions: { getAll: () => ({ actions: [] }) }, - databases: { getAll: () => ({ databases: [] }) }, - connections: { getAll: () => ({ connections: [] }) }, - resourceServers: { getAll: () => ({ resourceServers: [] }) }, - rulesConfigs: { getAll: () => ({ rulesConfigs: [] }) }, - emailProvider: { + rules: { getAll: (params) => (mockPagedData(params, 'rules', [])) }, + hooks: { getAll: (params) => (mockPagedData(params, 'hooks', [])) }, + actions: { getAll: () => (mockPagedData({ include_totals: true }, 'actions', [])) }, + databases: { getAll: (params) => (mockPagedData(params, 'databases', [])) }, + connections: { getAll: (params) => (mockPagedData(params, 'connections', [])) }, + resourceServers: { getAll: (params) => (mockPagedData(params, 'resource_servers', [])) }, + rulesConfigs: { getAll: (params) => (mockPagedData(params, 'rules_configs', [])) }, + emails: { get: () => ({ - name: 'smtp', - enabled: true, + data: { + name: 'smtp', + enabled: true, + } }), }, - clientGrants: { getAll: () => ({ clientGrants: [] }) }, + clientGrants: { getAll: (params) => (mockPagedData(params, 'client_grants', [])) }, guardian: { - getFactors: () => [], - getFactorProvider: () => [], - getFactorTemplates: () => [], - getPhoneFactorMessageTypes: () => ({ message_types: ['sms'] }), - getPhoneFactorSelectedProvider: () => ({ provider: 'twilio' }), - getPolicies: () => [], + getFactors: () => ({ data: [] }), + getSmsFactorProviderTwilio: () => ({data: []}), + getPushNotificationProviderSNS: () => ({data: []}), + getSmsFactorTemplates: () => ({data: []}), + getPhoneFactorMessageTypes: () => ({ data: { message_types: ['sms'] }}), + getPhoneFactorSelectedProvider: () => ({ data: { provider: 'twilio' } }), + getPolicies: () => ({ data: [] }), }, emailTemplates: { get: (template) => ({ - template: template.name, - enabled: true, - body: 'fake template', + data: { + template: template.templateName, + enabled: true, + body: 'fake template', + } }), }, clients: { @@ -55,50 +60,36 @@ export function mockMgmtClient() { custom_login_page: 'page', }; - if (params.per_page) { - return { - clients: [client], - }; - } - - return [client]; + return mockPagedData(params, 'clients', [client]); }, }, roles: { - getAll: () => ({ - roles: [ - { - name: 'App Admin', - id: 'myRoleId', - description: 'Admin of app', - }, - ], - total: 1, - limit: 50, - }), - permissions: { - getAll: () => ({ - permissions: [ - { - permission_name: 'create:data', - resource_server_identifier: 'urn:ref', - }, - ], - total: 1, - limit: 50, - }), - }, + getAll: (params) => mockPagedData(params, 'roles', [ + { + name: 'App Admin', + id: 'myRoleId', + description: 'Admin of app', + }, + ]), + getPermissions: (params) => mockPagedData(params, 'permissions', [ + { + permission_name: 'create:data', + resource_server_identifier: 'urn:ref', + }, + ]), }, - tenant: { + tenants: { getSettings: async () => new Promise((res) => res({ - friendly_name: 'Test', - default_directory: 'users', - enabled_locales: ['en'], + data: { + friendly_name: 'Test', + default_directory: 'users', + enabled_locales: ['en'], + } }) ), - getCustomTextByLanguage: () => Promise.resolve({}), + getCustomTextByLanguage: () => Promise.resolve({data: {} }), }, migrations: { getMigrations: () => ({ @@ -106,27 +97,27 @@ export function mockMgmtClient() { }), }, attackProtection: { - getBreachedPasswordDetectionConfig: () => ({}), - getBruteForceConfig: () => ({}), - getSuspiciousIpThrottlingConfig: () => ({}), + getBreachedPasswordDetectionConfig: () => ({ data: {} }), + getBruteForceConfig: () => ({ data: {} }), + getSuspiciousIpThrottlingConfig: () => ({ data: {} }), }, branding: { - getSettings: () => ({}), + getSettings: () => ({ data: {} }), getDefaultTheme: () => { const err = new Error('Not found'); err.statusCode = 404; return Promise.reject(err); }, }, - logStreams: { getAll: () => [] }, + logStreams: { getAll: (params) => mockPagedData(params, 'log_streams',[]) }, prompts: { getCustomTextByLanguage: () => new Promise((res) => { - res({}); + res({ data: {} }); }), - getSettings: () => {}, + get: () => ({ data: {}}), }, - customDomains: { getAll: () => [] }, + customDomains: { getAll: (params) => mockPagedData(params, 'custom_domains', []) }, }; } @@ -148,3 +139,15 @@ export function createDir(repoDir, files) { }); }); } + +export function mockPagedData(params, key, data) { + return params?.include_totals + ? { + data: { + [key]: data, + }, + } + : { + data, + }; +}