Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
setupFilesAfterEnv: ["jest-extended/all"],
transform: {
'^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tests/tsconfig.json' }]
},
globals: {
'BW_USERNAME': process.env.BW_USERNAME,
'BW_PASSWORD': process.env.BW_PASSWORD,
Expand Down
23 changes: 23 additions & 0 deletions tests/globals.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/// <reference types="jest-extended" />

declare const BW_USERNAME: string;
declare const BW_PASSWORD: string;
declare const BW_CLIENT_ID: string;
declare const BW_CLIENT_SECRET: string;
declare const BW_ACCOUNT_ID: string;
declare const BW_NUMBER: string;
declare const USER_NUMBER: string;
declare const BW_VOICE_APPLICATION_ID: string;
declare const BW_MESSAGING_APPLICATION_ID: string;
declare const BASE_CALLBACK_URL: string;
declare const OPERATING_SYSTEM: string;
declare const MANTECA_APPLICATION_ID: string;
declare const MANTECA_IDLE_NUMBER: string;
declare const MANTECA_ACTIVE_NUMBER: string;
declare const MANTECA_BASE_URL: string;
declare const FORBIDDEN_USERNAME: string;
declare const FORBIDDEN_PASSWORD: string;
declare const UNAUTHORIZED_USERNAME: string;
declare const UNAUTHORIZED_PASSWORD: string;
declare const MAX_RETRIES: number;
declare const SLEEP_TIME_S: number;
9 changes: 9 additions & 0 deletions tests/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"rootDir": "..",
"types": ["jest", "node"]
},
"include": ["**/*.ts"],
"exclude": ["../node_modules", "../dist"]
}
15 changes: 11 additions & 4 deletions tests/unit/api/calls-api.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//@ts-nocheck
import axios from 'axios';
import { CallsApi } from '../../../api';
import { Configuration } from '../../../configuration';
import {
Expand Down Expand Up @@ -158,21 +158,28 @@ describe('CallsApi', () => {

describe('HTTP Errors', () => {
test('400', async () => {
expect.assertions(1);
try {
// @ts-expect-error intentionally empty body to trigger 400
await callsApi.createCall(BW_ACCOUNT_ID, {});
} catch (e) {
expect(e.response.status).toEqual(400);
if (axios.isAxiosError(e)) {
expect(e.response?.status).toEqual(400);
}
}
});

test('401', async () => {
expect.assertions(1);
const unauthorizedConfig = new Configuration({ basePath: 'http://127.0.0.1:4010' });
const unauthorizedCallsApi = new CallsApi(unauthorizedConfig);

try {
await unauthorizedCallsApi.getCallState(BW_ACCOUNT_ID, callId);
} catch (e) {
expect(e.response.status).toEqual(401);
if (axios.isAxiosError(e)) {
expect(e.response?.status).toEqual(401);
}
}
});
});
Expand Down
1 change: 0 additions & 1 deletion tests/unit/api/conferences-api.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
//@ts-nocheck
import { ConferencesApi } from '../../../api';
import { Configuration } from '../../../configuration';
import {
Expand Down
16 changes: 10 additions & 6 deletions tests/unit/api/endpoints-api.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
//@ts-nocheck
import { EndpointsApi } from '../../../api';
import { Configuration } from '../../../configuration';
import { CreateWebRtcConnectionRequest, EndpointDirectionEnum, EndpointStatusEnum, EndpointTypeEnum } from '../../../models';
import {
CreateWebRtcConnectionRequest,
EndpointDirectionEnum,
EndpointStatusEnum,
EndpointTypeEnum
} from '../../../models';

describe('EndpointsApi', () => {
const config = new Configuration({
Expand Down Expand Up @@ -51,10 +55,10 @@ describe('EndpointsApi', () => {
expect(data.links[0].href).toBeString();
expect(data.data).toBeInstanceOf(Array);
expect(data.page).toBeDefined();
expect(data.page.pageSize).toBeNumber();
expect(data.page.pageNumber).toBeNumber();
expect(data.page.totalPages).toBeNumber();
expect(data.page.totalElements).toBeNumber();
expect(data.page!.pageSize).toBeNumber();
expect(data.page!.pageNumber).toBeNumber();
expect(data.page!.totalPages).toBeNumber();
expect(data.page!.totalElements).toBeNumber();
expect(data.errors).toBeInstanceOf(Array);

expect(data.data.length).toBeGreaterThan(0);
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/api/media-api.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
//@ts-nocheck
import { MediaApi } from '../../../api';
import { Configuration } from '../../../configuration';

Expand All @@ -18,6 +17,7 @@ describe('MediaApi', () => {
const { status } = await mediaApi.uploadMedia(
BW_ACCOUNT_ID,
binaryMediaName,
// @ts-expect-error SDK types body as File but axios/API accept strings
binaryMediaData,
undefined,
undefined,
Expand Down
17 changes: 13 additions & 4 deletions tests/unit/api/messages-api.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//@ts-nocheck
import axios from 'axios';
import { MessagesApi } from '../../../api';
import { Configuration } from '../../../configuration';
import {
Expand Down Expand Up @@ -46,9 +46,11 @@ describe('MessagesApi', () => {
expect(data.segmentCount).toBeInteger();
expect(data.direction).toBeOneOf(Object.values(MessageDirectionEnum));
expect(data.to).toBeInstanceOf(Array);
// @ts-expect-error SWI-11047: typed as Set<T> but runtime is Array<T>
expect(data.to![0]).toHaveLength(12);
expect(data.from).toHaveLength(12);
expect(data.media).toBeInstanceOf(Array);
// @ts-expect-error SWI-11047: typed as Set<T> but runtime is Array<T>
expect(data.media![0]).toStartWith('http');
expect(data.text).toBeString();
expect(data.tag).toBeString();
Expand Down Expand Up @@ -98,21 +100,28 @@ describe('MessagesApi', () => {

describe('HTTP Errors', () => {
test('400', async () => {
expect.assertions(1);
try {
// @ts-expect-error intentionally empty body to trigger 400
await messagesApi.createMessage(BW_ACCOUNT_ID, {});
} catch (e) {
expect(e.response.status).toEqual(400);
if (axios.isAxiosError(e)) {
expect(e.response?.status).toEqual(400);
}
}
});

test('401', async () => {
expect.assertions(1);
const unauthorizedConfig = new Configuration({ basePath: 'http://127.0.0.1:4010' });
const unauthorizedMessagesApi = new MessagesApi(unauthorizedConfig);

try {
await unauthorizedMessagesApi.listMessages(BW_ACCOUNT_ID);
} catch (e) {
expect(e.response.status).toEqual(401);
if (axios.isAxiosError(e)) {
expect(e.response?.status).toEqual(401);
}
}
});
});
Expand Down
8 changes: 6 additions & 2 deletions tests/unit/api/mfaapi.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//@ts-nocheck
import axios from 'axios';
import { MFAApi } from '../../../api';
import { Configuration } from '../../../configuration';
import { CodeRequest, VerifyCodeRequest } from '../../../models';
Expand Down Expand Up @@ -66,10 +66,14 @@ describe('MFAApi', () => {

describe('HTTP Errors', () => {
test('400', async () => {
expect.assertions(1);
try {
// @ts-expect-error intentionally empty body to trigger 400
await mfaApi.generateMessagingCode(BW_ACCOUNT_ID, {});
} catch (e) {
expect(e.response.status).toEqual(400);
if (axios.isAxiosError(e)) {
expect(e.response?.status).toEqual(400);
}
}
});
});
Expand Down
61 changes: 30 additions & 31 deletions tests/unit/api/phone-number-lookup-api.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
//@ts-nocheck
import { PhoneNumberLookupApi } from "../../../api";
import { Configuration } from "../../../configuration";
import {
Expand Down Expand Up @@ -28,12 +27,12 @@ describe('PhoneNumberLookupApi', () => {
const { status, data } = await phoneNumberLookupApi.createAsyncBulkLookup(BW_ACCOUNT_ID, request);

expect(status).toEqual(202);
expect(data.links[0]).toBeDefined();
expect(data.links[0].rel).toBeString();
expect(data.links[0].href).toBeString();
expect(data.links[0].method).toBeString();
expect(data.data.requestId).toBeString();
expect(data.data.status).toBeOneOf(Object.values(InProgressLookupStatusEnum));
expect(data.links![0]).toBeDefined();
expect(data.links![0].rel).toBeString();
expect(data.links![0].href).toBeString();
expect(data.links![0].method).toBeString();
expect(data.data!.requestId).toBeString();
expect(data.data!.status).toBeOneOf(Object.values(InProgressLookupStatusEnum));
expect(data.errors).toBeInstanceOf(Array);
});
});
Expand All @@ -48,18 +47,18 @@ describe('PhoneNumberLookupApi', () => {
const { status, data } = await phoneNumberLookupApi.createSyncLookup(BW_ACCOUNT_ID, request);

expect(status).toEqual(200);
expect(data.data.requestId).toBeString();
expect(data.data.status).toBeOneOf(Object.values(CompletedLookupStatusEnum));
expect(data.data.results).toBeInstanceOf(Array);
expect(data.data.results[0]).toBeDefined();
expect(data.data.results[0].phoneNumber).toBeString();
expect(data.data.results[0].lineType).toBeOneOf(Object.values(LineTypeEnum));
expect(data.data.results[0].messagingProvider).toBeString();
expect(data.data.results[0].voiceProvider).toBeString();
expect(data.data.results[0].countryCodeA3).toBeString();
expect(data.data.results[0].latestMessageDeliveryStatus).toBeOneOf(Object.values(LatestMessageDeliveryStatusEnum));
expect(data.data.results[0].initialMessageDeliveryStatusDate).toBeDateString();
expect(data.data.results[0].latestMessageDeliveryStatusDate).toBeDateString();
expect(data.data!.requestId).toBeString();
expect(data.data!.status).toBeOneOf(Object.values(CompletedLookupStatusEnum));
expect(data.data!.results).toBeInstanceOf(Array);
expect(data.data!.results![0]).toBeDefined();
expect(data.data!.results![0].phoneNumber).toBeString();
expect(data.data!.results![0].lineType).toBeOneOf(Object.values(LineTypeEnum));
expect(data.data!.results![0].messagingProvider).toBeString();
expect(data.data!.results![0].voiceProvider).toBeString();
expect(data.data!.results![0].countryCodeA3).toBeString();
expect(data.data!.results![0].latestMessageDeliveryStatus).toBeOneOf(Object.values(LatestMessageDeliveryStatusEnum));
expect(data.data!.results![0].initialMessageDeliveryStatusDate).toBeDateString();
expect(data.data!.results![0].latestMessageDeliveryStatusDate).toBeDateString();
expect(data.errors).toBeInstanceOf(Array);
});
});
Expand All @@ -69,18 +68,18 @@ describe('PhoneNumberLookupApi', () => {
const { status, data } = await phoneNumberLookupApi.getAsyncBulkLookup(BW_ACCOUNT_ID, requestId);

expect(status).toEqual(200);
expect(data.data.requestId).toBeString();
expect(data.data.status).toBeOneOf(Object.values(InProgressLookupStatusEnum));
expect(data.data.results).toBeInstanceOf(Array);
expect(data.data.results[0]).toBeDefined();
expect(data.data.results[0].phoneNumber).toBeString();
expect(data.data.results[0].lineType).toBeOneOf(Object.values(LineTypeEnum));
expect(data.data.results[0].messagingProvider).toBeString();
expect(data.data.results[0].voiceProvider).toBeString();
expect(data.data.results[0].countryCodeA3).toBeString();
expect(data.data.results[0].latestMessageDeliveryStatus).toBeOneOf(Object.values(LatestMessageDeliveryStatusEnum));
expect(data.data.results[0].initialMessageDeliveryStatusDate).toBeDateString();
expect(data.data.results[0].latestMessageDeliveryStatusDate).toBeDateString();
expect(data.data!.requestId).toBeString();
expect(data.data!.status).toBeOneOf(Object.values(InProgressLookupStatusEnum));
expect(data.data!.results).toBeInstanceOf(Array);
expect(data.data!.results![0]).toBeDefined();
expect(data.data!.results![0].phoneNumber).toBeString();
expect(data.data!.results![0].lineType).toBeOneOf(Object.values(LineTypeEnum));
expect(data.data!.results![0].messagingProvider).toBeString();
expect(data.data!.results![0].voiceProvider).toBeString();
expect(data.data!.results![0].countryCodeA3).toBeString();
expect(data.data!.results![0].latestMessageDeliveryStatus).toBeOneOf(Object.values(LatestMessageDeliveryStatusEnum));
expect(data.data!.results![0].initialMessageDeliveryStatusDate).toBeDateString();
expect(data.data!.results![0].latestMessageDeliveryStatusDate).toBeDateString();
expect(data.errors).toBeInstanceOf(Array);
});
});
Expand Down
13 changes: 9 additions & 4 deletions tests/unit/api/recordings-api.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
//@ts-nocheck
import { RecordingsApi } from "../../../api";
import { Configuration } from "../../../configuration";
import { CallDirectionEnum, FileFormatEnum, RecordingStateEnum } from "../../../models";
import {
CallDirectionEnum,
FileFormatEnum,
RecordingStateEnum,
TranscribeRecording,
UpdateCallRecording
} from "../../../models";

describe('RecordingsApi', () => {
const config = new Configuration({
Expand All @@ -16,7 +21,7 @@ describe('RecordingsApi', () => {

describe('updateCallRecordingState', () => {
test('should update call recording state', async () => {
const pauseRecording = { state: RecordingStateEnum.Paused };
const pauseRecording: UpdateCallRecording = { state: RecordingStateEnum.Paused };

const { status } =
await recordingsApi.updateCallRecordingState(BW_ACCOUNT_ID, callId, pauseRecording);
Expand Down Expand Up @@ -130,7 +135,7 @@ describe('RecordingsApi', () => {

describe('transcribeCallRecording', () => {
test('should create a transcription request', async () => {
const transcribeRecording = {
const transcribeRecording: TranscribeRecording = {
callbackUrl: `${MANTECA_BASE_URL}/transcriptions`,
tag: callId
};
Expand Down
7 changes: 5 additions & 2 deletions tests/unit/api/statistics-api.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//@ts-nocheck
import axios from 'axios';
import { StatisticsApi } from '../../../api';
import { Configuration } from '../../../configuration';

Expand All @@ -22,13 +22,16 @@ describe('StatisticsApi', () => {

describe('HTTP Errors', () => {
test('401', async () => {
expect.assertions(1);
const unauthorizedConfig = new Configuration({ basePath: 'http://127.0.0.1:4010' });
const unauthorizedStatisticsApi = new StatisticsApi(unauthorizedConfig);

try {
await unauthorizedStatisticsApi.getStatistics(BW_ACCOUNT_ID);
} catch (e) {
expect(e.response.status).toEqual(401);
if (axios.isAxiosError(e)) {
expect(e.response?.status).toEqual(401);
}
}
});
});
Expand Down
Loading
Loading