mirror of
https://github.com/Kong/insomnia.git
synced 2026-06-03 05:35:56 -04:00
Move insomnia-data models, services, database code, and common utilities into a dedicated workspace package. Update consumers to import from the new package entrypoints and declare workspace dependencies for the extracted package.
836 lines
24 KiB
TypeScript
836 lines
24 KiB
TypeScript
/**
|
|
* @fileoverview Comprehensive tests for Request Model functionality
|
|
*
|
|
* This test suite covers all the authentication types and request body structures
|
|
* we added comments to in request.ts, ensuring they work correctly.
|
|
*/
|
|
|
|
import type {
|
|
AuthTypeAPIKey,
|
|
AuthTypeAsap,
|
|
AuthTypeAwsIam,
|
|
AuthTypeBasic,
|
|
AuthTypeBearer,
|
|
AuthTypeDigest,
|
|
AuthTypeHawk,
|
|
AuthTypeNetrc,
|
|
AuthTypeNTLM,
|
|
AuthTypeOAuth1,
|
|
AuthTypeOAuth2,
|
|
AuthTypeSingleToken,
|
|
RequestBody,
|
|
RequestHeader,
|
|
RequestParameter,
|
|
} from 'insomnia-data';
|
|
import { services } from 'insomnia-data';
|
|
import { v4 as uuidv4 } from 'uuid';
|
|
import { beforeEach, describe, expect, it } from 'vitest';
|
|
|
|
// @vitest-environment jsdom
|
|
describe('Request Model - Comprehensive Tests', () => {
|
|
beforeEach(async () => {
|
|
await services.settings.getOrCreate();
|
|
|
|
// Create test project for all tests
|
|
try {
|
|
await services.project.create({
|
|
_id: `proj_test_${uuidv4()}`,
|
|
name: 'Test Project',
|
|
});
|
|
} catch {
|
|
// Project might already exist, that's okay
|
|
}
|
|
});
|
|
|
|
describe('Basic Request Creation', () => {
|
|
it('should create a basic HTTP request', async () => {
|
|
const workspace = await services.workspace.create({
|
|
_id: 'wrk_basic_test',
|
|
name: 'Basic Test Workspace',
|
|
parentId: 'proj_test',
|
|
scope: 'collection',
|
|
});
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_basic',
|
|
name: 'Basic Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/test',
|
|
method: 'GET',
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request).toMatchObject({
|
|
_id: 'req_basic',
|
|
name: 'Basic Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/test',
|
|
method: 'GET',
|
|
type: 'Request',
|
|
});
|
|
});
|
|
|
|
it('should create a request with headers', async () => {
|
|
const workspace = await services.workspace.create({
|
|
_id: 'wrk_headers',
|
|
name: 'Headers Test Workspace',
|
|
parentId: 'proj_test',
|
|
scope: 'collection',
|
|
});
|
|
|
|
const headers: RequestHeader[] = [
|
|
{ name: 'Content-Type', value: 'application/json' },
|
|
{ name: 'Authorization', value: 'Bearer token123' },
|
|
{ name: 'X-Custom-Header', value: 'custom-value' },
|
|
];
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_headers',
|
|
name: 'Request with Headers',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/headers',
|
|
method: 'POST',
|
|
headers,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.headers).toEqual(headers);
|
|
});
|
|
|
|
it('should create a request with parameters', async () => {
|
|
const workspace = await services.workspace.create({
|
|
_id: 'wrk_params',
|
|
name: 'Parameters Test Workspace',
|
|
parentId: 'proj_test',
|
|
scope: 'collection',
|
|
});
|
|
|
|
const parameters: RequestParameter[] = [
|
|
{ name: 'page', value: '1' },
|
|
{ name: 'limit', value: '10' },
|
|
{ name: 'sort', value: 'created_at' },
|
|
];
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_params',
|
|
name: 'Request with Parameters',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/params',
|
|
method: 'GET',
|
|
parameters,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.parameters).toEqual(parameters);
|
|
});
|
|
});
|
|
|
|
describe('Authentication Types', () => {
|
|
let workspace: any;
|
|
|
|
beforeEach(async () => {
|
|
workspace = await services.workspace.create({
|
|
_id: `wrk_auth_${uuidv4()}`,
|
|
name: 'Auth Test Workspace',
|
|
parentId: `proj_test_${uuidv4()}`,
|
|
scope: 'collection',
|
|
});
|
|
});
|
|
|
|
describe('Basic Authentication', () => {
|
|
it('should create request with basic auth', async () => {
|
|
const basicAuth: AuthTypeBasic = {
|
|
type: 'basic',
|
|
username: 'testuser',
|
|
password: 'testpass',
|
|
useISO88591: false,
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_basic_auth',
|
|
name: 'Basic Auth Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/basic',
|
|
method: 'GET',
|
|
authentication: basicAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(basicAuth);
|
|
});
|
|
|
|
it('should create request with basic auth and ISO-8859-1 encoding', async () => {
|
|
const basicAuth: AuthTypeBasic = {
|
|
type: 'basic',
|
|
username: 'testuser',
|
|
password: 'testpass',
|
|
useISO88591: true,
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_basic_auth_iso',
|
|
name: 'Basic Auth ISO Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/basic-iso',
|
|
method: 'GET',
|
|
authentication: basicAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(basicAuth);
|
|
});
|
|
});
|
|
|
|
describe('API Key Authentication', () => {
|
|
it('should create request with API key in header', async () => {
|
|
const apiKeyAuth: AuthTypeAPIKey = {
|
|
type: 'apikey',
|
|
key: 'X-API-Key',
|
|
value: 'api-key-123',
|
|
addTo: 'header',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_apikey_header',
|
|
name: 'API Key Header Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/apikey',
|
|
method: 'GET',
|
|
authentication: apiKeyAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(apiKeyAuth);
|
|
});
|
|
|
|
it('should create request with API key in query params', async () => {
|
|
const apiKeyAuth: AuthTypeAPIKey = {
|
|
type: 'apikey',
|
|
key: 'api_key',
|
|
value: 'api-key-123',
|
|
addTo: 'query',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_apikey_query',
|
|
name: 'API Key Query Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/apikey',
|
|
method: 'GET',
|
|
authentication: apiKeyAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(apiKeyAuth);
|
|
});
|
|
});
|
|
|
|
describe('OAuth 2.0 Authentication', () => {
|
|
it('should create request with OAuth 2.0 authorization code flow', async () => {
|
|
const oauth2Auth: AuthTypeOAuth2 = {
|
|
type: 'oauth2',
|
|
grantType: 'authorization_code',
|
|
accessTokenUrl: 'https://auth.example.com/token',
|
|
authorizationUrl: 'https://auth.example.com/authorize',
|
|
clientId: 'test-client',
|
|
clientSecret: 'test-secret',
|
|
scope: 'read write',
|
|
redirectUrl: 'https://app.example.com/callback',
|
|
state: 'random-state',
|
|
audience: 'https://api.example.com',
|
|
resource: 'https://api.example.com',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_oauth2_auth_code',
|
|
name: 'OAuth2 Auth Code Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/oauth2',
|
|
method: 'GET',
|
|
authentication: oauth2Auth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(oauth2Auth);
|
|
});
|
|
|
|
it('should create request with OAuth 2.0 client credentials flow', async () => {
|
|
const oauth2Auth: AuthTypeOAuth2 = {
|
|
type: 'oauth2',
|
|
grantType: 'client_credentials',
|
|
accessTokenUrl: 'https://auth.example.com/token',
|
|
clientId: 'test-client',
|
|
clientSecret: 'test-secret',
|
|
scope: 'read write',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_oauth2_client_creds',
|
|
name: 'OAuth2 Client Creds Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/oauth2',
|
|
method: 'GET',
|
|
authentication: oauth2Auth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(oauth2Auth);
|
|
});
|
|
|
|
it('should create request with OAuth 2.0 password flow', async () => {
|
|
const oauth2Auth: AuthTypeOAuth2 = {
|
|
type: 'oauth2',
|
|
grantType: 'password',
|
|
accessTokenUrl: 'https://auth.example.com/token',
|
|
clientId: 'test-client',
|
|
clientSecret: 'test-secret',
|
|
username: 'testuser',
|
|
password: 'testpass',
|
|
scope: 'read write',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_oauth2_password',
|
|
name: 'OAuth2 Password Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/oauth2',
|
|
method: 'GET',
|
|
authentication: oauth2Auth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(oauth2Auth);
|
|
});
|
|
});
|
|
|
|
describe('Digest Authentication', () => {
|
|
it('should create request with digest auth', async () => {
|
|
const digestAuth: AuthTypeDigest = {
|
|
type: 'digest',
|
|
username: 'testuser',
|
|
password: 'testpass',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_digest_auth',
|
|
name: 'Digest Auth Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/digest',
|
|
method: 'GET',
|
|
authentication: digestAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(digestAuth);
|
|
});
|
|
});
|
|
|
|
describe('NTLM Authentication', () => {
|
|
it('should create request with NTLM auth', async () => {
|
|
const ntlmAuth: AuthTypeNTLM = {
|
|
type: 'ntlm',
|
|
username: 'testuser',
|
|
password: 'testpass',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_ntlm_auth',
|
|
name: 'NTLM Auth Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/ntlm',
|
|
method: 'GET',
|
|
authentication: ntlmAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(ntlmAuth);
|
|
});
|
|
});
|
|
|
|
describe('AWS IAM Authentication', () => {
|
|
it('should create request with AWS IAM auth', async () => {
|
|
const awsIamAuth: AuthTypeAwsIam = {
|
|
type: 'iam',
|
|
accessKeyId: 'AKIAIOSFODNN7EXAMPLE',
|
|
secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
|
|
sessionToken: 'session-token-example',
|
|
region: 'us-east-1',
|
|
service: 'execute-api',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_aws_iam_auth',
|
|
name: 'AWS IAM Auth Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/aws',
|
|
method: 'GET',
|
|
authentication: awsIamAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(awsIamAuth);
|
|
});
|
|
});
|
|
|
|
describe('Hawk Authentication', () => {
|
|
it('should create request with Hawk auth', async () => {
|
|
const hawkAuth: AuthTypeHawk = {
|
|
type: 'hawk',
|
|
id: 'test-auth-id',
|
|
key: 'test-auth-key',
|
|
algorithm: 'sha256',
|
|
ext: 'test-ext',
|
|
validatePayload: true,
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_hawk_auth',
|
|
name: 'Hawk Auth Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/hawk',
|
|
method: 'GET',
|
|
authentication: hawkAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(hawkAuth);
|
|
});
|
|
});
|
|
|
|
describe('Bearer Token Authentication', () => {
|
|
it('should create request with Bearer token auth', async () => {
|
|
const bearerAuth: AuthTypeBearer = {
|
|
type: 'bearer',
|
|
token: 'test-bearer-token',
|
|
prefix: 'Bearer',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_bearer_auth',
|
|
name: 'Bearer Auth Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/bearer',
|
|
method: 'GET',
|
|
authentication: bearerAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(bearerAuth);
|
|
});
|
|
});
|
|
|
|
describe('OAuth 1.0 Authentication', () => {
|
|
it('should create request with OAuth 1.0 auth', async () => {
|
|
const oauth1Auth: AuthTypeOAuth1 = {
|
|
type: 'oauth1',
|
|
consumerKey: 'test-consumer-key',
|
|
consumerSecret: 'test-consumer-secret',
|
|
tokenKey: 'test-token-key',
|
|
tokenSecret: 'test-token-secret',
|
|
signatureMethod: 'HMAC-SHA1',
|
|
realm: 'test-realm',
|
|
timestamp: '1234567890',
|
|
nonce: 'test-nonce',
|
|
version: '1.0',
|
|
callback: 'https://app.example.com/callback',
|
|
verifier: 'test-verifier',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_oauth1_auth',
|
|
name: 'OAuth 1.0 Auth Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/oauth1',
|
|
method: 'GET',
|
|
authentication: oauth1Auth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(oauth1Auth);
|
|
});
|
|
});
|
|
|
|
describe('ASAP Authentication', () => {
|
|
it('should create request with ASAP auth', async () => {
|
|
const asapAuth: AuthTypeAsap = {
|
|
type: 'asap',
|
|
issuer: 'test-issuer',
|
|
subject: 'test-subject',
|
|
audience: 'test-audience',
|
|
keyId: 'test-key-id',
|
|
privateKey: 'test-private-key',
|
|
additionalClaims: '{"customClaim": "custom-value"}',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_asap_auth',
|
|
name: 'ASAP Auth Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/asap',
|
|
method: 'GET',
|
|
authentication: asapAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(asapAuth);
|
|
});
|
|
});
|
|
|
|
describe('Single Token Authentication', () => {
|
|
it('should create request with Single Token auth', async () => {
|
|
const singleTokenAuth: AuthTypeSingleToken = {
|
|
type: 'singleToken',
|
|
token: 'test-single-token',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_single_token_auth',
|
|
name: 'Single Token Auth Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/single-token',
|
|
method: 'GET',
|
|
authentication: singleTokenAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(singleTokenAuth);
|
|
});
|
|
});
|
|
|
|
describe('Netrc Authentication', () => {
|
|
it('should create request with Netrc auth', async () => {
|
|
const netrcAuth: AuthTypeNetrc = {
|
|
type: 'netrc',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_netrc_auth',
|
|
name: 'Netrc Auth Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/netrc',
|
|
method: 'GET',
|
|
authentication: netrcAuth,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.authentication).toEqual(netrcAuth);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Request Body Types', () => {
|
|
let workspace: any;
|
|
|
|
beforeEach(async () => {
|
|
workspace = await services.workspace.create({
|
|
_id: `wrk_body_${uuidv4()}`,
|
|
name: 'Body Test Workspace',
|
|
parentId: `proj_test_${uuidv4()}`,
|
|
scope: 'collection',
|
|
});
|
|
});
|
|
|
|
describe('JSON Body', () => {
|
|
it('should create request with JSON body', async () => {
|
|
const jsonBody: RequestBody = {
|
|
mimeType: 'application/json',
|
|
text: '{"name": "test", "value": 123}',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_json_body',
|
|
name: 'JSON Body Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/json',
|
|
method: 'POST',
|
|
body: jsonBody,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.body).toEqual(jsonBody);
|
|
});
|
|
});
|
|
|
|
describe('Form Data Body', () => {
|
|
it('should create request with form data body', async () => {
|
|
const formDataBody: RequestBody = {
|
|
mimeType: 'application/x-www-form-urlencoded',
|
|
params: [
|
|
{ name: 'field1', value: 'value1' },
|
|
{ name: 'field2', value: 'value2' },
|
|
],
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_form_data_body',
|
|
name: 'Form Data Body Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/form',
|
|
method: 'POST',
|
|
body: formDataBody,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.body).toEqual(formDataBody);
|
|
});
|
|
});
|
|
|
|
describe('Multipart Form Data Body', () => {
|
|
it('should create request with multipart form data body', async () => {
|
|
const multipartBody: RequestBody = {
|
|
mimeType: 'multipart/form-data',
|
|
params: [
|
|
{ name: 'text_field', value: 'text_value', type: 'text' },
|
|
{ name: 'file_field', value: 'file_content', type: 'file', fileName: 'test.txt' },
|
|
],
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_multipart_body',
|
|
name: 'Multipart Body Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/multipart',
|
|
method: 'POST',
|
|
body: multipartBody,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.body).toEqual(multipartBody);
|
|
});
|
|
});
|
|
|
|
describe('Raw Text Body', () => {
|
|
it('should create request with raw text body', async () => {
|
|
const rawTextBody: RequestBody = {
|
|
mimeType: 'text/plain',
|
|
text: 'This is raw text content',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_raw_text_body',
|
|
name: 'Raw Text Body Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/raw',
|
|
method: 'POST',
|
|
body: rawTextBody,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.body).toEqual(rawTextBody);
|
|
});
|
|
});
|
|
|
|
describe('XML Body', () => {
|
|
it('should create request with XML body', async () => {
|
|
const xmlBody: RequestBody = {
|
|
mimeType: 'application/xml',
|
|
text: '<?xml version="1.0"?><root><item>value</item></root>',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_xml_body',
|
|
name: 'XML Body Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/xml',
|
|
method: 'POST',
|
|
body: xmlBody,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.body).toEqual(xmlBody);
|
|
});
|
|
});
|
|
|
|
describe('Binary Body', () => {
|
|
it('should create request with binary body', async () => {
|
|
const binaryBody: RequestBody = {
|
|
mimeType: 'application/octet-stream',
|
|
fileName: 'test.bin',
|
|
};
|
|
|
|
const request = await services.request.create({
|
|
_id: 'req_binary_body',
|
|
name: 'Binary Body Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/binary',
|
|
method: 'POST',
|
|
body: binaryBody,
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.body).toEqual(binaryBody);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('GraphQL Operations', () => {
|
|
let workspace: any;
|
|
|
|
beforeEach(async () => {
|
|
workspace = await services.workspace.create({
|
|
_id: `wrk_graphql_${uuidv4()}`,
|
|
name: 'GraphQL Test Workspace',
|
|
parentId: `proj_test_${uuidv4()}`,
|
|
scope: 'collection',
|
|
});
|
|
});
|
|
|
|
it('should detect GraphQL query operation', async () => {
|
|
const request = await services.request.create({
|
|
_id: 'req_graphql_query',
|
|
name: 'GraphQL Query',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/graphql',
|
|
method: 'POST',
|
|
body: {
|
|
mimeType: 'application/json',
|
|
text: '{"query": "query { user { name } }"}',
|
|
},
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
// The GraphQL operation type detection would be tested here
|
|
// This is a placeholder for the actual implementation
|
|
expect(request.body?.text).toContain('query');
|
|
});
|
|
|
|
it('should detect GraphQL mutation operation', async () => {
|
|
const request = await services.request.create({
|
|
_id: 'req_graphql_mutation',
|
|
name: 'GraphQL Mutation',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/graphql',
|
|
method: 'POST',
|
|
body: {
|
|
mimeType: 'application/json',
|
|
text: '{"query": "mutation { createUser(input: {name: \"test\"}) { id } }"}',
|
|
},
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.body?.text).toContain('mutation');
|
|
});
|
|
|
|
it('should detect GraphQL subscription operation', async () => {
|
|
const request = await services.request.create({
|
|
_id: 'req_graphql_subscription',
|
|
name: 'GraphQL Subscription',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/graphql',
|
|
method: 'POST',
|
|
body: {
|
|
mimeType: 'application/json',
|
|
text: '{"query": "subscription { userUpdated { id name } }"}',
|
|
},
|
|
metaSortKey: 0,
|
|
});
|
|
|
|
expect(request.body?.text).toContain('subscription');
|
|
});
|
|
});
|
|
|
|
describe('Request Updates', () => {
|
|
let workspace: any;
|
|
let request: any;
|
|
|
|
beforeEach(async () => {
|
|
workspace = await services.workspace.create({
|
|
_id: `wrk_update_${uuidv4()}`,
|
|
name: 'Update Test Workspace',
|
|
parentId: `proj_test_${uuidv4()}`,
|
|
scope: 'collection',
|
|
});
|
|
|
|
request = await services.request.create({
|
|
_id: `req_update_${uuidv4()}`,
|
|
name: 'Update Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/update',
|
|
method: 'GET',
|
|
metaSortKey: 0,
|
|
});
|
|
});
|
|
|
|
it('should update request name', async () => {
|
|
const updatedRequest = await services.request.update(request, {
|
|
name: 'Updated Request Name',
|
|
});
|
|
|
|
expect(updatedRequest.name).toBe('Updated Request Name');
|
|
});
|
|
|
|
it('should update request URL', async () => {
|
|
const updatedRequest = await services.request.update(request, {
|
|
url: 'https://api.example.com/updated',
|
|
});
|
|
|
|
expect(updatedRequest.url).toBe('https://api.example.com/updated');
|
|
});
|
|
|
|
it('should update request method', async () => {
|
|
const updatedRequest = await services.request.update(request, {
|
|
method: 'POST',
|
|
});
|
|
|
|
expect(updatedRequest.method).toBe('POST');
|
|
});
|
|
|
|
it('should update request headers', async () => {
|
|
const newHeaders: RequestHeader[] = [
|
|
{ name: 'Content-Type', value: 'application/json' },
|
|
{ name: 'Authorization', value: 'Bearer new-token' },
|
|
];
|
|
|
|
const updatedRequest = await services.request.update(request, {
|
|
headers: newHeaders,
|
|
});
|
|
|
|
expect(updatedRequest.headers).toEqual(newHeaders);
|
|
});
|
|
|
|
it('should update request authentication', async () => {
|
|
const newAuth: AuthTypeBasic = {
|
|
type: 'basic',
|
|
username: 'newuser',
|
|
password: 'newpass',
|
|
};
|
|
|
|
const updatedRequest = await services.request.update(request, {
|
|
authentication: newAuth,
|
|
});
|
|
|
|
expect(updatedRequest.authentication).toEqual(newAuth);
|
|
});
|
|
});
|
|
|
|
describe('Request Deletion', () => {
|
|
let workspace: any;
|
|
let request: any;
|
|
|
|
beforeEach(async () => {
|
|
workspace = await services.workspace.create({
|
|
_id: `wrk_delete_${uuidv4()}`,
|
|
name: 'Delete Test Workspace',
|
|
parentId: `proj_test_${uuidv4()}`,
|
|
scope: 'collection',
|
|
});
|
|
|
|
request = await services.request.create({
|
|
_id: `req_delete_${uuidv4()}`,
|
|
name: 'Delete Request',
|
|
parentId: workspace._id,
|
|
url: 'https://api.example.com/delete',
|
|
method: 'GET',
|
|
metaSortKey: 0,
|
|
});
|
|
});
|
|
|
|
it('should delete request', async () => {
|
|
await services.request.remove(request);
|
|
|
|
const deletedRequest = await services.request.getById(request._id);
|
|
expect(deletedRequest).toBeUndefined();
|
|
});
|
|
});
|
|
});
|