-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest-record-transaction.js
More file actions
130 lines (116 loc) · 4.89 KB
/
Copy pathtest-record-transaction.js
File metadata and controls
130 lines (116 loc) · 4.89 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
const axios = require('axios');
const baseURL = 'http://localhost:4000/api/v1';
async function testRecordTransaction() {
try {
console.log('Testing Record Transaction Endpoint...\n');
// Step 1: Create a payment link
console.log('1. Creating payment link...');
const paymentLinkResponse = await axios.post(`${baseURL}/payment-links`, {
merchantId: 'test-merchant-123',
userId: 'test-user-456',
name: 'Test Business Store',
amount: '150.75',
currency: 'USD',
token: 'USDT',
selectedCurrency: 'USD',
paymentType: 'card',
description: 'Test payment for recording'
});
const paymentLinkId = paymentLinkResponse.data.data.id;
console.log(' Payment link created:', paymentLinkId);
// Step 2: Access the payment link to create a transaction
console.log('\n2. Accessing payment link to create transaction...');
const accessResponse = await axios.post(`${baseURL}/payment-links/${paymentLinkId}/access`, {
payerInfo: {
payername: 'John Smith',
payeraddress: '123 Test Street',
payercity: 'New York',
payerstate: 'NY',
payercountry: 'US',
payerphone: '1234567890'
}
});
const transactionId = accessResponse.data.data.transactionId;
console.log(' Transaction created:', transactionId);
// Step 3: Record the transaction as successful
console.log('\n3. Recording transaction as successful...');
const recordResponse = await axios.post(`${baseURL}/record-transaction/${transactionId}`, {
amount: '150.75',
currency: 'USD',
senderName: 'John Smith',
senderPhone: '+1-555-123-4567',
paidAt: new Date().toISOString()
});
console.log(' ✅ Transaction recorded successfully!');
console.log(' Transaction ID:', recordResponse.data.data.id);
console.log(' State:', recordResponse.data.data.state);
console.log(' Amount Paid:', recordResponse.data.data.actualAmountPaid);
console.log(' Sender Name:', recordResponse.data.data.senderName);
console.log(' Sender Phone:', recordResponse.data.data.senderPhone);
console.log(' Paid At:', recordResponse.data.data.paidAt);
console.log(' Recorded At:', recordResponse.data.data.recordedAt);
// Step 4: Try to record the same transaction again (should fail)
console.log('\n4. Testing duplicate recording (should fail)...');
try {
await axios.post(`${baseURL}/record-transaction/${transactionId}`, {
amount: '150.75',
currency: 'USD',
senderName: 'John Smith',
senderPhone: '+1-555-123-4567',
paidAt: new Date().toISOString()
});
} catch (duplicateError) {
if (duplicateError.response) {
console.log(' ✅ Duplicate recording prevented:');
console.log(' Status:', duplicateError.response.status);
console.log(' Error:', duplicateError.response.data.error);
console.log(' Message:', duplicateError.response.data.message);
}
}
// Step 5: Test with invalid transaction ID
console.log('\n5. Testing with invalid transaction ID (should fail)...');
try {
await axios.post(`${baseURL}/record-transaction/invalid-transaction-id`, {
amount: '100.00',
currency: 'USD',
senderName: 'Test User',
senderPhone: '+1-555-999-8888',
paidAt: new Date().toISOString()
});
} catch (invalidError) {
if (invalidError.response) {
console.log(' ✅ Invalid transaction ID handled:');
console.log(' Status:', invalidError.response.status);
console.log(' Error:', invalidError.response.data.error);
}
}
// Step 6: Test with invalid request data
console.log('\n6. Testing with invalid request data (should fail)...');
try {
await axios.post(`${baseURL}/record-transaction/${transactionId}`, {
amount: '', // Invalid empty amount
currency: 'INVALID',
senderName: '',
senderPhone: '',
paidAt: 'invalid-date'
});
} catch (validationError) {
if (validationError.response) {
console.log(' ✅ Validation error handled:');
console.log(' Status:', validationError.response.status);
console.log(' Error:', validationError.response.data.error);
}
}
console.log('\n✅ All tests completed successfully!');
console.log('\nEndpoint Summary:');
console.log('- POST /api/v1/record-transaction/{transactionId}');
console.log('- Records payment details and marks transaction as successful');
console.log('- Validates transaction exists and can be recorded');
console.log('- Prevents duplicate recordings');
console.log('- Updates transaction state: INITIALIZED → PAID → COMPLETED');
console.log('- Creates audit logs for tracking');
} catch (error) {
console.error('❌ Test failed:', error.response?.data || error.message);
}
}
testRecordTransaction();