-
Notifications
You must be signed in to change notification settings - Fork 1k
/
Copy pathtestQueryHelper.ts
90 lines (81 loc) · 4.18 KB
/
testQueryHelper.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import { expect } from 'vitest';
import { print } from 'graphql/index';
import type { AxiosInstance } from 'axios';
import { adminQuery, createUnauthenticatedClient, executeInternalQuery, queryAsAdmin } from './testQuery';
import { downloadFile, streamConverter } from '../../src/database/file-storage';
import { logApp } from '../../src/config/conf';
import { AUTH_REQUIRED, FORBIDDEN_ACCESS } from '../../src/config/errors';
// Helper for test usage whit expect inside.
// vitest cannot be an import of testQuery, so it must be a separate file.
/**
* Test utility.
* Execute the query and verify that there is no error before returning result.
* @param request
*/
export const queryAsAdminWithSuccess = async (request: { query: any, variables: any }) => {
const requestResult = await queryAsAdmin({
query: request.query,
variables: request.variables,
});
expect(requestResult, `Something is wrong with this query: ${request.query}`).toBeDefined();
expect(requestResult.errors, `This errors should not be there: ${requestResult.errors}`).toBeUndefined();
return requestResult;
};
export const adminQueryWithSuccess = async (request: { query: any, variables: any }) => {
const requestResult = await adminQuery({
query: request.query,
variables: request.variables,
});
expect(requestResult, `Something is wrong with this query: ${request.query}`).toBeDefined();
expect(requestResult.errors, `This errors should not be there: ${requestResult.errors}`).toBeUndefined();
return requestResult;
};
/**
* Execute the query as some User, and verify success and return query result.
* @param client
* @param request
*/
export const queryAsUserWithSuccess = async (client: AxiosInstance, request: { query: any, variables: any }) => {
const requestResult = await executeInternalQuery(client, print(request.query), request.variables);
expect(requestResult, `Something is wrong with this query: ${request.query}`).toBeDefined();
expect(requestResult.errors, `This errors should not be there: ${JSON.stringify(requestResult.errors)}`).toBeUndefined();
return requestResult;
};
/**
* Execute the query as some User, and just return response (no validation).
* @param client
* @param request
*/
export const queryAsUser = async (client: AxiosInstance, request: { query: any, variables: any }) => {
const result = await executeInternalQuery(client, print(request.query), request.variables);
return result;
};
/**
* Execute the query as some User (see testQuery.ts), and verify that access is forbidden.
* @param client
* @param request
*/
export const queryAsUserIsExpectedForbidden = async (client: AxiosInstance, request: any, message?: string) => {
const queryResult = await executeInternalQuery(client, print(request.query), request.variables);
logApp.info('queryAsUserIsExpectedForbidden=> queryResult:', queryResult);
expect(queryResult.errors, 'FORBIDDEN_ACCESS is expected.').toBeDefined();
expect(queryResult.errors?.length, message ?? `FORBIDDEN_ACCESS is expected, but got ${queryResult.errors?.length} errors`).toBe(1);
expect(queryResult.errors[0].extensions.code, `FORBIDDEN_ACCESS is expected but got ${queryResult.errors[0].name}`).toBe(FORBIDDEN_ACCESS);
};
/**
* Call a graphQL request with no authentication / no login and verify that access is forbidden.
* @param request
*/
export const queryUnauthenticatedIsExpectedForbidden = async (request: any) => {
const anonymous = createUnauthenticatedClient();
const queryResult = await executeInternalQuery(anonymous, print(request.query), request.variables);
expect(queryResult.errors, 'AUTH_REQUIRED error is expected but got zero errors.').toBeDefined();
expect(queryResult.errors?.length, `AUTH_REQUIRED is expected, but got ${queryResult.errors?.length} errors`).toBe(1);
expect(queryResult.errors[0].extensions.code, `AUTH_REQUIRED is expected but got ${queryResult.errors[0].name}`).toBe(AUTH_REQUIRED);
};
export const requestFileFromStorageAsAdmin = async (storageId: string) => {
logApp.info(`[TEST] request on storage file ${storageId}`);
const stream = await downloadFile(storageId);
expect(stream, `No stream mean no file found in storage or error for ${storageId}`).not.toBeNull();
return streamConverter(stream);
};