75 lines
2.5 KiB
JavaScript
75 lines
2.5 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import { allow } from 'graphql-shield';
|
|
import { isAuthenticated, authenticationRules } from './authentication.js';
|
|
import { createUser } from '../../test/factories/user.js';
|
|
import createAuthTokenByUserId from '../helpers/create-auth-token-by-user-id.js';
|
|
|
|
describe('isAuthenticated', () => {
|
|
it('should return false if no token is provided', async () => {
|
|
const req = { headers: {} };
|
|
expect(await isAuthenticated(null, null, req)).toBe(false);
|
|
});
|
|
|
|
it('should return false if token is invalid', async () => {
|
|
const req = { headers: { authorization: 'invalidToken' } };
|
|
expect(await isAuthenticated(null, null, req)).toBe(false);
|
|
});
|
|
|
|
it('should return true if token is valid and there is a user', async () => {
|
|
const user = await createUser();
|
|
const token = await createAuthTokenByUserId(user.id);
|
|
|
|
const req = { headers: { authorization: token } };
|
|
expect(await isAuthenticated(null, null, req)).toBe(true);
|
|
});
|
|
|
|
it('should return false if token is valid and but there is no user', async () => {
|
|
const user = await createUser();
|
|
const token = await createAuthTokenByUserId(user.id);
|
|
await user.$query().delete();
|
|
|
|
const req = { headers: { authorization: token } };
|
|
expect(await isAuthenticated(null, null, req)).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('authentication rules', () => {
|
|
const getQueryAndMutationNames = (rules) => {
|
|
const queries = Object.keys(rules.Query || {});
|
|
const mutations = Object.keys(rules.Mutation || {});
|
|
return { queries, mutations };
|
|
};
|
|
|
|
const { queries, mutations } = getQueryAndMutationNames(authenticationRules);
|
|
|
|
if (queries.length) {
|
|
describe('for queries', () => {
|
|
queries.forEach((query) => {
|
|
it(`should apply correct rule for query: ${query}`, () => {
|
|
const ruleApplied = authenticationRules.Query[query];
|
|
|
|
if (query === '*') {
|
|
expect(ruleApplied.func).toBe(isAuthenticated);
|
|
} else {
|
|
expect(ruleApplied).toEqual(allow);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
describe('for mutations', () => {
|
|
mutations.forEach((mutation) => {
|
|
it(`should apply correct rule for mutation: ${mutation}`, () => {
|
|
const ruleApplied = authenticationRules.Mutation[mutation];
|
|
|
|
if (mutation === '*') {
|
|
expect(ruleApplied.func).toBe(isAuthenticated);
|
|
} else {
|
|
expect(ruleApplied).toBe(allow);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|