0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-04-07 23:01:25 -05:00

test(core): guard terms of use and language info ()

* test(core): terms-of-use guard of sign-in experience

* test(core): add null test cases for guards of sign-in experience

* test(core): language-info guard of sign-in experience
This commit is contained in:
IceHe.xyz 2022-04-07 12:04:09 +08:00 committed by GitHub
parent 9e25a097bb
commit 9d15b584ca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 92 additions and 5 deletions
packages/core/src

View file

@ -1,6 +1,6 @@
import { BrandingStyle, CreateSignInExperience, SignInExperience } from '@logto/schemas';
import { BrandingStyle, CreateSignInExperience, Language, SignInExperience } from '@logto/schemas';
import { mockBranding, mockSignInExperience } from '@/utils/mock';
import { mockBranding, mockLanguageInfo, mockSignInExperience, mockTermsOfUse } from '@/utils/mock';
import { createRequester } from '@/utils/test-utils';
import signInExperiencesRoutes from './sign-in-experience';
@ -21,11 +21,15 @@ const expectPatchResponseStatus = async (signInExperience: any, status: number)
expect(response.status).toEqual(status);
};
const validBooleans = [true, false];
const invalidBooleans = [undefined, null, 0, 1, '0', '1', 'true', 'false'];
describe('branding', () => {
const colorKeys = ['primaryColor', 'backgroundColor', 'darkPrimaryColor', 'darkBackgroundColor'];
const invalidColors = [
undefined,
null,
'',
'#',
'#1',
@ -82,7 +86,7 @@ describe('branding', () => {
}
);
test.each([undefined, '', 'invalid'])('%p should fail', async (logoUrl) => {
test.each([undefined, null, '', 'invalid'])('%p should fail', async (logoUrl) => {
const signInExperience = { branding: { ...mockBranding, logoUrl } };
await expectPatchResponseStatus(signInExperience, 400);
});
@ -103,12 +107,12 @@ describe('branding', () => {
}
);
it('should fail when it is empty string', async () => {
test.each([null, ''])('%p should fail', async (slogan) => {
const signInExperience = {
branding: {
...mockBranding,
style: BrandingStyle.Logo,
slogan: '',
slogan,
},
};
await expectPatchResponseStatus(signInExperience, 400);
@ -123,6 +127,76 @@ describe('branding', () => {
});
});
describe('terms of use', () => {
describe('enabled', () => {
test.each(validBooleans)('%p should success', async (enabled) => {
const signInExperience = { termsOfUse: { ...mockTermsOfUse, enabled } };
await expectPatchResponseStatus(signInExperience, 200);
});
test.each(invalidBooleans)('%p should fail', async (enabled) => {
const signInExperience = { termsOfUse: { ...mockTermsOfUse, enabled } };
await expectPatchResponseStatus(signInExperience, 400);
});
});
describe('contentUrl', () => {
test.each([undefined, 'http://silverhand.com/terms', 'https://logto.dev/terms'])(
'%p should success',
async (contentUrl) => {
const signInExperience = { termsOfUse: { ...mockTermsOfUse, enabled: false, contentUrl } };
await expectPatchResponseStatus(signInExperience, 200);
}
);
test.each([null, '', ' \t\n\r', 'non-url'])('%p should fail', async (contentUrl) => {
const signInExperience = { termsOfUse: { ...mockTermsOfUse, enabled: false, contentUrl } };
await expectPatchResponseStatus(signInExperience, 400);
});
});
});
describe('languageInfo', () => {
describe('autoDetect', () => {
test.each(validBooleans)('%p should success', async (autoDetect) => {
const signInExperience = { languageInfo: { ...mockLanguageInfo, autoDetect } };
await expectPatchResponseStatus(signInExperience, 200);
});
test.each(invalidBooleans)('%p should fail', async (autoDetect) => {
const signInExperience = { languageInfo: { ...mockLanguageInfo, autoDetect } };
await expectPatchResponseStatus(signInExperience, 400);
});
});
const validLanguages = Object.values(Language);
const invalidLanguages = [undefined, null, '', ' \t\n\r', 'abc'];
describe('fallbackLanguage', () => {
test.each(validLanguages)('%p should success', async (fallbackLanguage) => {
const signInExperience = { languageInfo: { ...mockLanguageInfo, fallbackLanguage } };
await expectPatchResponseStatus(signInExperience, 200);
});
test.each(invalidLanguages)('%p should fail', async (fallbackLanguage) => {
const signInExperience = { languageInfo: { ...mockLanguageInfo, fallbackLanguage } };
await expectPatchResponseStatus(signInExperience, 400);
});
});
describe('fixedLanguage', () => {
test.each(validLanguages)('%p should success', async (fixedLanguage) => {
const signInExperience = { languageInfo: { ...mockLanguageInfo, fixedLanguage } };
await expectPatchResponseStatus(signInExperience, 200);
});
test.each(invalidLanguages)('%p should fail', async (fixedLanguage) => {
const signInExperience = { languageInfo: { ...mockLanguageInfo, fixedLanguage } };
await expectPatchResponseStatus(signInExperience, 400);
});
});
});
describe('socialSignInConnectorIds', () => {
it('should throw when the type of social connector IDs is wrong', async () => {
const socialSignInConnectorIds = [123, 456];

View file

@ -22,6 +22,8 @@ import {
SignInMethodState,
Branding,
SignInMethods,
TermsOfUse,
LanguageInfo,
} from '@logto/schemas';
import pick from 'lodash.pick';
@ -398,6 +400,17 @@ export const mockBranding: Branding = {
slogan: 'Silverhand.',
};
export const mockTermsOfUse: TermsOfUse = {
enabled: true,
contentUrl: 'http://silverhand.com/terms',
};
export const mockLanguageInfo: LanguageInfo = {
autoDetect: true,
fallbackLanguage: Language.english,
fixedLanguage: Language.chinese,
};
export const mockSignInMethods: SignInMethods = {
username: SignInMethodState.primary,
email: SignInMethodState.disabled,