@accounter/server
Version:
Accounter GraphQL server
69 lines • 2.81 kB
JavaScript
import { describe, expect, it, vi } from 'vitest';
import { viewerResolvers } from '../resolvers/viewer.resolver.js';
async function runResolver(authContext, jwtIdentity) {
const authProvider = {
getAuthContext: vi.fn().mockResolvedValue(authContext),
getJwtIdentity: vi.fn().mockResolvedValue(jwtIdentity),
};
const injector = { get: vi.fn(() => authProvider) };
const resolver = viewerResolvers.Query.viewer;
return {
result: await resolver(undefined, undefined, { injector }, undefined),
authProvider,
};
}
const linkedContext = {
authType: 'jwt',
user: { email: 'member@example.com', emailVerified: true },
};
describe('viewer resolver', () => {
it('reports ACTIVE when the identity resolves to an auth context', async () => {
const { result, authProvider } = await runResolver(linkedContext, null);
expect(result).toEqual({
email: 'member@example.com',
emailVerified: true,
status: 'ACTIVE',
});
// An active member must not pay for a second JWT verification.
expect(authProvider.getJwtIdentity).not.toHaveBeenCalled();
});
it('reports NO_WORKSPACE for a verified identity with no membership', async () => {
const { result } = await runResolver(null, {
auth0UserId: 'auth0|new-user',
email: 'new@example.com',
emailVerified: true,
});
expect(result).toEqual({
email: 'new@example.com',
emailVerified: true,
status: 'NO_WORKSPACE',
});
});
it('reports EMAIL_UNVERIFIED before the email is verified', async () => {
const { result } = await runResolver(null, {
auth0UserId: 'auth0|new-user',
email: 'new@example.com',
emailVerified: false,
});
expect(result).toEqual({
email: 'new@example.com',
emailVerified: false,
status: 'EMAIL_UNVERIFIED',
});
});
it('keeps a linked member ACTIVE even when their email is unverified', async () => {
// Membership decides: the API already serves this caller's data, so routing
// them to /welcome would lock out a working account over a claim that is not
// enforced anywhere else.
const { result } = await runResolver({
authType: 'jwt',
user: { email: 'member@example.com', emailVerified: false },
}, null);
expect(result).toMatchObject({ status: 'ACTIVE', emailVerified: false });
});
it('returns null when the request carries no valid credentials', async () => {
const { result } = await runResolver(null, null);
expect(result).toBeNull();
});
});
//# sourceMappingURL=viewer.resolver.test.js.map