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

refactor(core): get sign-in experience (#426)

* feat(core): getEnabledSocialConnectorIds

* test(core): getEnabledSocialConnectorIds

* refactor(core): get sign-in experience

* test(core): get sign-in experience
This commit is contained in:
IceHe.xyz 2022-03-23 12:44:48 +08:00 committed by GitHub
parent 3998f39db7
commit d9670fd709
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 44 additions and 3 deletions

View file

@ -5,6 +5,7 @@ import {
getConnectorInstanceById,
getConnectorInstanceByType,
getConnectorInstances,
getEnabledSocialConnectorIds,
getSocialConnectorInstanceById,
initConnectors,
} from '@/connectors/index';
@ -118,6 +119,13 @@ describe('getSocialConnectorInstanceById', () => {
});
});
describe('getEnabledSocialConnectorIds', () => {
test('should return the enabled social connectors existing in DB', async () => {
const enabledSocialConnectorIds = await getEnabledSocialConnectorIds();
expect(enabledSocialConnectorIds).toEqual(['facebook', 'github']);
});
});
describe('getConnectorInstanceByType', () => {
test('should return the enabled connector existing in DB', async () => {
const dmEnabledConnectorInstance = await getConnectorInstanceByType(ConnectorType.Email);

View file

@ -59,6 +59,19 @@ export const getSocialConnectorInstanceById = async (
return connector;
};
export const getEnabledSocialConnectorIds = async <T extends ConnectorInstance>(): Promise<
string[]
> => {
const connectorInstances = await getConnectorInstances();
return connectorInstances
.filter<T>(
(instance): instance is T =>
instance.connector.enabled && instance.metadata.type === ConnectorType.Social
)
.map((instance) => instance.metadata.id);
};
export const getConnectorInstanceByType = async <T extends ConnectorInstance>(
type: ConnectorType
): Promise<T> => {

View file

@ -5,6 +5,11 @@ import { createRequester } from '@/utils/test-utils';
import signInExperiencesRoutes from './sign-in-experience';
jest.mock('@/connectors', () => ({
...jest.requireActual('@/connectors'),
getEnabledSocialConnectorIds: jest.fn(async () => ['facebook', 'github']),
}));
jest.mock('@/queries/sign-in-experience', () => ({
findDefaultSignInExperience: jest.fn(async (): Promise<SignInExperience> => mockSignInExperience),
updateSignInExperienceById: jest.fn(

View file

@ -1,6 +1,7 @@
import { SignInExperiences } from '@logto/schemas';
import { object, string } from 'zod';
import { getEnabledSocialConnectorIds } from '@/connectors';
import koaGuard from '@/middleware/koa-guard';
import {
findDefaultSignInExperience,
@ -15,8 +16,22 @@ export default function signInExperiencesRoutes<T extends AuthedRouter>(router:
* always return the default settings in DB for the /sign-in-exp get method
*/
router.get('/sign-in-exp', async (ctx, next) => {
const signInExperience = await findDefaultSignInExperience();
ctx.body = signInExperience;
const [signInExperience, enabledSocialConnectorIds] = await Promise.all([
findDefaultSignInExperience(),
getEnabledSocialConnectorIds(),
]);
const { socialSignInConnectorIds: selectedSocialSignInConnectorIds } = signInExperience;
const enabledSocialConnectorIdSet = new Set(enabledSocialConnectorIds);
const socialSignInConnectorIds = selectedSocialSignInConnectorIds.filter((id) =>
enabledSocialConnectorIdSet.has(id)
);
ctx.body = {
...signInExperience,
socialSignInConnectorIds,
};
return next();
});

View file

@ -181,7 +181,7 @@ export const mockSignInExperience: SignInExperience = {
sms: SignInMethodState.disabled,
social: SignInMethodState.secondary,
},
socialSignInConnectorIds: ['foo', 'bar'],
socialSignInConnectorIds: ['github', 'facebook'],
};
export const mockConnectorList: Connector[] = [