From fe97a657e28d09bec2c1b21e6f8a4c1c1678cc67 Mon Sep 17 00:00:00 2001 From: Xiao Yijun Date: Tue, 26 Jul 2022 16:00:12 +0800 Subject: [PATCH] test: integration tests for setting up sign-in methods (#1669) --- .../integration-tests/src/connectors-mock.ts | 100 ++++++++++++++++ .../tests/connectors.test.ts | 112 ++---------------- .../tests/sign-in-experience.test.ts | 53 ++++++++- 3 files changed, 164 insertions(+), 101 deletions(-) create mode 100644 packages/integration-tests/src/connectors-mock.ts diff --git a/packages/integration-tests/src/connectors-mock.ts b/packages/integration-tests/src/connectors-mock.ts new file mode 100644 index 000000000..64af8e6b1 --- /dev/null +++ b/packages/integration-tests/src/connectors-mock.ts @@ -0,0 +1,100 @@ +export const facebookConnectorId = 'facebook-universal'; +export const facebookConnectorTarget = 'facebook'; +export const facebookConnectorConfig = { + clientId: 'application_foo', + clientSecret: 'secret_bar', +}; + +export const aliyunSmsConnectorId = 'aliyun-short-message-service'; +export const aliyunSmsConnectorConfig = { + accessKeyId: 'access-key-id-value', + accessKeySecret: 'access-key-secret-value', + signName: 'sign-name-value', + templates: [ + { + usageType: 'SignIn', + templateCode: 'template-code-value', + }, + { + usageType: 'Register', + templateCode: 'template-code-value', + }, + { + usageType: 'Test', + templateCode: 'template-code-value', + }, + ], +}; + +export const twilioSmsConnectorId = 'twilio-short-message-service'; +export const twilioSmsConnectorConfig = { + accountSID: 'account-sid-value', + authToken: 'auth-token-value', + fromMessagingServiceSID: 'from-messaging-service-sid-value', + templates: [ + { + content: 'This is for sign-in purposes only. Your passcode is {{code}}.', + usageType: 'SignIn', + }, + { + content: 'This is for registering purposes only. Your passcode is {{code}}.', + usageType: 'Register', + }, + { + content: 'This is for testing purposes only. Your passcode is {{code}}.', + usageType: 'Test', + }, + ], +}; + +export const aliyunEmailConnectorId = 'aliyun-direct-mail'; +export const aliyunEmailConnectorConfig = { + accessKeyId: 'your-access-key-id-value', + accessKeySecret: 'your-access-key-secret-value', + accountName: 'noreply@logto.io', + fromAlias: 'from-alias-value', + templates: [ + { + subject: 'register-template-subject-value', + content: 'Logto: Your passcode is {{code}}. (regitser template)', + usageType: 'Register', + }, + { + subject: 'sign-in-template-subject-value', + content: 'Logto: Your passcode is {{code}}. (sign-in template)', + usageType: 'SignIn', + }, + { + subject: 'test-template-subject-value', + content: 'Logto: Your passcode is {{code}}. (test template)', + usageType: 'Test', + }, + ], +}; + +export const sendgridEmailConnectorId = 'sendgrid-email-service'; +export const sendgridEmailConnectorConfig = { + apiKey: 'api-key-value', + fromEmail: 'noreply@logto.test.io', + fromName: 'from-name-value', + templates: [ + { + usageType: 'SignIn', + type: 'text/plain', + subject: 'Logto SignIn Template', + content: 'This is for sign-in purposes only. Your passcode is {{code}}.', + }, + { + usageType: 'Register', + type: 'text/plain', + subject: 'Logto Register Template', + content: 'This is for registering purposes only. Your passcode is {{code}}.', + }, + { + usageType: 'Test', + type: 'text/plain', + subject: 'Logto Test Template', + content: 'This is for testing purposes only. Your passcode is {{code}}.', + }, + ], +}; diff --git a/packages/integration-tests/tests/connectors.test.ts b/packages/integration-tests/tests/connectors.test.ts index 299f4e03a..08456f0a9 100644 --- a/packages/integration-tests/tests/connectors.test.ts +++ b/packages/integration-tests/tests/connectors.test.ts @@ -8,106 +8,18 @@ import { listConnectors, updateConnectorConfig, } from '@/connector-api'; - -const facebookConnectorId = 'facebook-universal'; -const facebookConnectorConfig = { - clientId: 'application_foo', - clientSecret: 'secret_bar', -}; - -const aliyunSmsConnectorId = 'aliyun-short-message-service'; -const aliyunSmsConnectorConfig = { - accessKeyId: 'access-key-id-value', - accessKeySecret: 'access-key-secret-value', - signName: 'sign-name-value', - templates: [ - { - usageType: 'SignIn', - templateCode: 'template-code-value', - }, - { - usageType: 'Register', - templateCode: 'template-code-value', - }, - { - usageType: 'Test', - templateCode: 'template-code-value', - }, - ], -}; - -const twilioSmsConnectorId = 'twilio-short-message-service'; -const twilioSmsConnectorConfig = { - accountSID: 'account-sid-value', - authToken: 'auth-token-value', - fromMessagingServiceSID: 'from-messaging-service-sid-value', - templates: [ - { - content: 'This is for sign-in purposes only. Your passcode is {{code}}.', - usageType: 'SignIn', - }, - { - content: 'This is for registering purposes only. Your passcode is {{code}}.', - usageType: 'Register', - }, - { - content: 'This is for testing purposes only. Your passcode is {{code}}.', - usageType: 'Test', - }, - ], -}; - -const aliyunEmailConnectorId = 'aliyun-direct-mail'; -const aliyunEmailConnectorConfig = { - accessKeyId: 'your-access-key-id-value', - accessKeySecret: 'your-access-key-secret-value', - accountName: 'noreply@logto.io', - fromAlias: 'from-alias-value', - templates: [ - { - subject: 'register-template-subject-value', - content: 'Logto: Your passcode is {{code}}. (regitser template)', - usageType: 'Register', - }, - { - subject: 'sign-in-template-subject-value', - content: 'Logto: Your passcode is {{code}}. (sign-in template)', - usageType: 'SignIn', - }, - { - subject: 'test-template-subject-value', - content: 'Logto: Your passcode is {{code}}. (test template)', - usageType: 'Test', - }, - ], -}; - -const sendgridEmailConnectorId = 'sendgrid-email-service'; -const sendgridEmailConnectorConfig = { - apiKey: 'api-key-value', - fromEmail: 'noreply@logto.test.io', - fromName: 'from-name-value', - templates: [ - { - usageType: 'SignIn', - type: 'text/plain', - subject: 'Logto SignIn Template', - content: 'This is for sign-in purposes only. Your passcode is {{code}}.', - }, - { - usageType: 'Register', - type: 'text/plain', - subject: 'Logto Register Template', - content: 'This is for registering purposes only. Your passcode is {{code}}.', - }, - { - usageType: 'Test', - type: 'text/plain', - subject: 'Logto Test Template', - content: 'This is for testing purposes only. Your passcode is {{code}}.', - }, - ], -}; +import { + facebookConnectorId, + facebookConnectorConfig, + aliyunSmsConnectorId, + aliyunSmsConnectorConfig, + twilioSmsConnectorId, + twilioSmsConnectorConfig, + aliyunEmailConnectorId, + aliyunEmailConnectorConfig, + sendgridEmailConnectorId, + sendgridEmailConnectorConfig, +} from '@/connectors-mock'; test('connector flow', async () => { /* diff --git a/packages/integration-tests/tests/sign-in-experience.test.ts b/packages/integration-tests/tests/sign-in-experience.test.ts index 1046ec346..08e39f2cc 100644 --- a/packages/integration-tests/tests/sign-in-experience.test.ts +++ b/packages/integration-tests/tests/sign-in-experience.test.ts @@ -1,6 +1,16 @@ -import { BrandingStyle, SignInExperience } from '@logto/schemas'; +import { BrandingStyle, SignInExperience, SignInMethods, SignInMethodState } from '@logto/schemas'; import { authedAdminApi } from '@/api'; +import { updateConnectorConfig, enableConnector, disableConnector } from '@/connector-api'; +import { + facebookConnectorId, + facebookConnectorConfig, + twilioSmsConnectorConfig, + twilioSmsConnectorId, + sendgridEmailConnectorConfig, + sendgridEmailConnectorId, + facebookConnectorTarget, +} from '@/connectors-mock'; describe('admin console sign-in experience', () => { it('should get sign-in experience successfully', async () => { @@ -36,4 +46,45 @@ describe('admin console sign-in experience', () => { expect(updatedSignInExperience).toMatchObject(newSignInExperience); }); + + it('should be able to setup sign in methods after connectors are enabled', async () => { + // Setup connectors for tests + await Promise.all([ + updateConnectorConfig(facebookConnectorId, facebookConnectorConfig), + updateConnectorConfig(twilioSmsConnectorId, twilioSmsConnectorConfig), + updateConnectorConfig(sendgridEmailConnectorId, sendgridEmailConnectorConfig), + ]); + + await Promise.all([ + enableConnector(facebookConnectorId), + enableConnector(twilioSmsConnectorId), + enableConnector(sendgridEmailConnectorId), + ]); + + // Set up sign-in methods + const newSignInMethods: Partial = { + username: SignInMethodState.Primary, + sms: SignInMethodState.Secondary, + email: SignInMethodState.Secondary, + social: SignInMethodState.Secondary, + }; + + const updatedSignInExperience = await authedAdminApi + .patch('sign-in-exp', { + json: { + socialSignInConnectorTargets: [facebookConnectorTarget], + signInMethods: newSignInMethods, + }, + }) + .json(); + + expect(updatedSignInExperience.signInMethods).toMatchObject(newSignInMethods); + + // Reset connectors + await Promise.all([ + disableConnector(facebookConnectorId), + disableConnector(twilioSmsConnectorId), + disableConnector(sendgridEmailConnectorId), + ]); + }); });