Files
iyzico/tests/integration/reporting.test.ts
Duhan BALCI c65195d26d init
2026-01-01 18:30:21 +03:00

339 lines
12 KiB
TypeScript

/**
* Reporting integration tests
*/
import { describe, it, expect } from 'vitest';
import { createTestClient, assertSuccessResponse } from '../setup';
import type { ErrorResponse } from '../../src/types';
describe('Reporting Integration Tests', () => {
const client = createTestClient();
it('should get payment transactions for a date', async () => {
// Use today's date
const today = new Date();
const dateString = today.toISOString().split('T')[0]; // YYYY-MM-DD format
const response = await client.reporting.getPaymentTransactions({
page: 1,
transactionDate: dateString,
locale: 'tr',
conversationId: `test-transactions-${Date.now()}`,
});
assertSuccessResponse(response);
expect(response.currentPage).toBe(1);
// Transactions might be empty if no transactions exist for the date
expect(response.transactions).toBeDefined();
});
it('should get payment details by paymentId', async () => {
// First create a payment to get a paymentId
const { testNon3DPaymentRequest } = await import('../fixtures/payment');
const paymentRequest = {
...testNon3DPaymentRequest,
conversationId: `test-reporting-${Date.now()}`,
};
const paymentResponse = await client.payment.createNon3DS(paymentRequest);
assertSuccessResponse(paymentResponse);
if (paymentResponse.paymentId) {
// Then get payment details
const detailsResponse = await client.reporting.getPaymentDetails({
paymentId: paymentResponse.paymentId,
locale: 'tr',
conversationId: `test-details-${Date.now()}`,
});
assertSuccessResponse(detailsResponse);
expect(detailsResponse.payments).toBeTruthy();
if (detailsResponse.payments && detailsResponse.payments.length > 0) {
// Convert to string for comparison as API may return number or string
const returnedPaymentId = String(detailsResponse.payments[0].paymentId);
expect(returnedPaymentId).toBe(String(paymentResponse.paymentId));
}
}
});
it('should get payment details by paymentConversationId', async () => {
// First create a payment to get a conversationId
const { testNon3DPaymentRequest } = await import('../fixtures/payment');
const conversationId = `test-reporting-conv-${Date.now()}`;
const paymentRequest = {
...testNon3DPaymentRequest,
conversationId,
};
const paymentResponse = await client.payment.createNon3DS(paymentRequest);
assertSuccessResponse(paymentResponse);
if (paymentResponse.conversationId) {
// Then get payment details using paymentConversationId
const detailsResponse = await client.reporting.getPaymentDetails({
paymentConversationId: paymentResponse.conversationId,
locale: 'tr',
conversationId: `test-details-conv-${Date.now()}`,
});
assertSuccessResponse(detailsResponse);
expect(detailsResponse.payments).toBeTruthy();
}
});
describe('Edge Cases - Invalid Fields', () => {
it('should handle invalid date format for getPaymentTransactions', async () => {
try {
const response = await client.reporting.getPaymentTransactions({
page: 1,
transactionDate: 'invalid-date-format',
locale: 'tr',
conversationId: `test-invalid-date-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle future date for getPaymentTransactions', async () => {
const futureDate = new Date();
futureDate.setFullYear(futureDate.getFullYear() + 1);
const dateString = futureDate.toISOString().split('T')[0];
try {
const response = await client.reporting.getPaymentTransactions({
page: 1,
transactionDate: dateString,
locale: 'tr',
conversationId: `test-future-date-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
// Future dates might return empty results or error
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle negative page number', async () => {
const today = new Date();
const dateString = today.toISOString().split('T')[0];
try {
const response = await client.reporting.getPaymentTransactions({
page: -1,
transactionDate: dateString,
locale: 'tr',
conversationId: `test-negative-page-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle zero page number', async () => {
const today = new Date();
const dateString = today.toISOString().split('T')[0];
try {
const response = await client.reporting.getPaymentTransactions({
page: 0,
transactionDate: dateString,
locale: 'tr',
conversationId: `test-zero-page-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle very large page number', async () => {
const today = new Date();
const dateString = today.toISOString().split('T')[0];
try {
const response = await client.reporting.getPaymentTransactions({
page: 999999,
transactionDate: dateString,
locale: 'tr',
conversationId: `test-large-page-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
// Large page numbers might return empty results or error
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle missing transactionDate', async () => {
try {
const response = await client.reporting.getPaymentTransactions({
page: 1,
transactionDate: undefined as any,
locale: 'tr',
conversationId: `test-missing-date-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle invalid paymentId for getPaymentDetails', async () => {
try {
const response = await client.reporting.getPaymentDetails({
paymentId: 'invalid-payment-id-99999',
locale: 'tr',
conversationId: `test-invalid-paymentid-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle empty paymentId for getPaymentDetails', async () => {
try {
const response = await client.reporting.getPaymentDetails({
paymentId: '',
locale: 'tr',
conversationId: `test-empty-paymentid-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle invalid paymentConversationId for getPaymentDetails', async () => {
try {
const response = await client.reporting.getPaymentDetails({
paymentConversationId: 'invalid-conversation-id-99999',
locale: 'tr',
conversationId: `test-invalid-convid-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle empty paymentConversationId for getPaymentDetails', async () => {
try {
const response = await client.reporting.getPaymentDetails({
paymentConversationId: '',
locale: 'tr',
conversationId: `test-empty-convid-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle missing both paymentId and paymentConversationId', async () => {
try {
const response = await client.reporting.getPaymentDetails({
locale: 'tr',
conversationId: `test-missing-ids-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
it('should handle invalid locale', async () => {
const today = new Date();
const dateString = today.toISOString().split('T')[0];
try {
const response = await client.reporting.getPaymentTransactions({
page: 1,
transactionDate: dateString,
locale: 'invalid' as any,
conversationId: `test-invalid-locale-${Date.now()}`,
});
expect(response).toBeDefined();
expect(response.status).toBeDefined();
if (response.status === 'failure') {
const errorResponse = response as unknown as ErrorResponse;
expect(errorResponse.errorCode || errorResponse.errorMessage).toBeTruthy();
}
} catch (error: any) {
expect(error).toBeDefined();
expect(error).toBeInstanceOf(Error);
}
});
});
});