mirror of
https://github.com/duhanbalci/iyzico.git
synced 2026-03-03 20:29:18 +00:00
207 lines
6.0 KiB
TypeScript
207 lines
6.0 KiB
TypeScript
/**
|
|
* Payment test fixtures with randomized personal data
|
|
*/
|
|
|
|
import { faker } from '@faker-js/faker';
|
|
import type {
|
|
ThreeDSInitializeRequest,
|
|
Non3DPaymentRequest,
|
|
PaymentCard,
|
|
Buyer,
|
|
BillingAddress,
|
|
ShippingAddress,
|
|
BasketItem,
|
|
} from '../../src/types';
|
|
|
|
/**
|
|
* Generates a valid Turkish identity number (TC Kimlik No)
|
|
* Uses a simple algorithm that produces valid-looking numbers
|
|
*/
|
|
function generateTurkishIdentityNumber(): string {
|
|
const digits: number[] = [];
|
|
|
|
// First digit cannot be 0
|
|
digits.push(faker.number.int({ min: 1, max: 9 }));
|
|
|
|
// Generate next 8 random digits
|
|
for (let i = 1; i < 9; i++) {
|
|
digits.push(faker.number.int({ min: 0, max: 9 }));
|
|
}
|
|
|
|
// Calculate 10th digit
|
|
const oddSum = digits[0] + digits[2] + digits[4] + digits[6] + digits[8];
|
|
const evenSum = digits[1] + digits[3] + digits[5] + digits[7];
|
|
const digit10 = (oddSum * 7 - evenSum) % 10;
|
|
digits.push(digit10 < 0 ? digit10 + 10 : digit10);
|
|
|
|
// Calculate 11th digit
|
|
const allSum = digits.reduce((sum, d) => sum + d, 0);
|
|
digits.push(allSum % 10);
|
|
|
|
return digits.join('');
|
|
}
|
|
|
|
/**
|
|
* Generates a Turkish phone number in the format +905XXXXXXXXX
|
|
*/
|
|
function generateTurkishPhoneNumber(): string {
|
|
const areaCode = faker.helpers.arrayElement(['530', '531', '532', '533', '534', '535', '536', '537', '538', '539', '540', '541', '542', '543', '544', '545', '546', '547', '548', '549', '550', '551', '552', '553', '554', '555', '556', '557', '558', '559']);
|
|
const number = faker.string.numeric(7);
|
|
return `+90${areaCode}${number}`;
|
|
}
|
|
|
|
/**
|
|
* Generates a random IP address
|
|
*/
|
|
function generateIpAddress(): string {
|
|
return faker.internet.ipv4();
|
|
}
|
|
|
|
/**
|
|
* Generates a test payment card with randomized holder name
|
|
* Card number is fixed to iyzico sandbox test card
|
|
*/
|
|
export function createTestCard(): PaymentCard {
|
|
return {
|
|
cardHolderName: faker.person.fullName(),
|
|
cardNumber: '5528790000000008', // iyzico sandbox test card
|
|
expireMonth: '12',
|
|
expireYear: '2030',
|
|
cvc: '123',
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Generates a test buyer with randomized personal data
|
|
*/
|
|
export function createTestBuyer(): Buyer {
|
|
const firstName = faker.person.firstName();
|
|
const lastName = faker.person.lastName();
|
|
|
|
return {
|
|
id: `BY${faker.string.alphanumeric(6).toUpperCase()}`,
|
|
name: firstName,
|
|
surname: lastName,
|
|
identityNumber: generateTurkishIdentityNumber(),
|
|
email: faker.internet.email({ firstName, lastName }).toLowerCase(),
|
|
gsmNumber: generateTurkishPhoneNumber(),
|
|
registrationAddress: `${faker.location.streetAddress()}, ${faker.location.city()}`,
|
|
city: faker.location.city(),
|
|
country: 'Turkey',
|
|
ip: generateIpAddress(),
|
|
zipCode: faker.location.zipCode('#####'),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Generates a test billing address with randomized data
|
|
*/
|
|
export function createTestBillingAddress(): BillingAddress {
|
|
return {
|
|
contactName: faker.person.fullName(),
|
|
city: faker.location.city(),
|
|
country: 'Turkey',
|
|
address: `${faker.location.streetAddress()}, ${faker.location.city()}`,
|
|
zipCode: faker.location.zipCode('#####'),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Generates a test shipping address with randomized data
|
|
*/
|
|
export function createTestShippingAddress(): ShippingAddress {
|
|
return {
|
|
contactName: faker.person.fullName(),
|
|
city: faker.location.city(),
|
|
country: 'Turkey',
|
|
address: `${faker.location.streetAddress()}, ${faker.location.city()}`,
|
|
zipCode: faker.location.zipCode('#####'),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Generates test basket items
|
|
*/
|
|
export function createTestBasketItems(): BasketItem[] {
|
|
return [
|
|
{
|
|
id: `BI${faker.string.alphanumeric(3).toUpperCase()}`,
|
|
name: faker.commerce.productName(),
|
|
category1: faker.commerce.department(),
|
|
category2: faker.commerce.productAdjective(),
|
|
itemType: 'PHYSICAL',
|
|
price: 0.3,
|
|
},
|
|
{
|
|
id: `BI${faker.string.alphanumeric(3).toUpperCase()}`,
|
|
name: faker.commerce.productName(),
|
|
category1: 'Game',
|
|
category2: 'Online Game Items',
|
|
itemType: 'VIRTUAL',
|
|
price: 0.5,
|
|
},
|
|
{
|
|
id: `BI${faker.string.alphanumeric(3).toUpperCase()}`,
|
|
name: faker.commerce.productName(),
|
|
category1: 'Electronics',
|
|
category2: faker.commerce.productAdjective(),
|
|
itemType: 'PHYSICAL',
|
|
price: 0.2,
|
|
},
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Generates a test 3DS initialize request with randomized data
|
|
*/
|
|
export function createTest3DSInitializeRequest(): ThreeDSInitializeRequest {
|
|
return {
|
|
locale: 'tr',
|
|
conversationId: faker.string.uuid(),
|
|
price: 1.0,
|
|
paidPrice: 1.1,
|
|
currency: 'TRY',
|
|
installment: 1,
|
|
paymentChannel: 'WEB',
|
|
basketId: `B${faker.string.alphanumeric(5).toUpperCase()}`,
|
|
paymentGroup: 'PRODUCT',
|
|
callbackUrl: 'https://www.merchant.com/callback',
|
|
paymentCard: createTestCard(),
|
|
buyer: createTestBuyer(),
|
|
billingAddress: createTestBillingAddress(),
|
|
shippingAddress: createTestShippingAddress(),
|
|
basketItems: createTestBasketItems(),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Generates a test non-3DS payment request with randomized data
|
|
*/
|
|
export function createTestNon3DPaymentRequest(): Non3DPaymentRequest {
|
|
return {
|
|
locale: 'tr',
|
|
conversationId: faker.string.uuid(),
|
|
price: 1.0,
|
|
paidPrice: 1.1,
|
|
currency: 'TRY',
|
|
installment: 1,
|
|
paymentChannel: 'WEB',
|
|
basketId: `B${faker.string.alphanumeric(5).toUpperCase()}`,
|
|
paymentGroup: 'PRODUCT',
|
|
paymentCard: createTestCard(),
|
|
buyer: createTestBuyer(),
|
|
billingAddress: createTestBillingAddress(),
|
|
shippingAddress: createTestShippingAddress(),
|
|
basketItems: createTestBasketItems(),
|
|
};
|
|
}
|
|
|
|
// Legacy exports for backward compatibility (static versions that generate once)
|
|
export const testCard = createTestCard();
|
|
export const testBuyer = createTestBuyer();
|
|
export const testBillingAddress = createTestBillingAddress();
|
|
export const testShippingAddress = createTestShippingAddress();
|
|
export const testBasketItems = createTestBasketItems();
|
|
export const test3DSInitializeRequest = createTest3DSInitializeRequest();
|
|
export const testNon3DPaymentRequest = createTestNon3DPaymentRequest();
|