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:
parent
3998f39db7
commit
d9670fd709
5 changed files with 44 additions and 3 deletions
|
@ -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);
|
||||
|
|
|
@ -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> => {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
|
|
|
@ -181,7 +181,7 @@ export const mockSignInExperience: SignInExperience = {
|
|||
sms: SignInMethodState.disabled,
|
||||
social: SignInMethodState.secondary,
|
||||
},
|
||||
socialSignInConnectorIds: ['foo', 'bar'],
|
||||
socialSignInConnectorIds: ['github', 'facebook'],
|
||||
};
|
||||
|
||||
export const mockConnectorList: Connector[] = [
|
||||
|
|
Loading…
Add table
Reference in a new issue