forked from Ding-Payments/ding-payments
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPaymentRequestBuilder.test.ts
More file actions
66 lines (56 loc) · 2.03 KB
/
Copy pathPaymentRequestBuilder.test.ts
File metadata and controls
66 lines (56 loc) · 2.03 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
import {
DEFAULT_EXPIRY_TTL_SECONDS,
PaymentRequestBuilder,
} from '@/features/receive/services/PaymentRequestBuilder';
const VALID_RECIPIENT = 'GBBD47IF6LWK7P7MUGHC2XLYUUXV6ZLW75PN7CHLIW2NSIW74UZEST66';
describe('PaymentRequestBuilder', () => {
it('returns a valid PaymentRequest shape', () => {
const builder = new PaymentRequestBuilder();
const request = builder.build({
amount: '25.50',
asset: 'USDC',
recipientPublicKey: VALID_RECIPIENT,
});
expect(request).toMatchObject({
type: 'payment_request',
recipient: VALID_RECIPIENT,
asset: 'USDC',
amount: '25.50',
});
expect(typeof request.timestamp).toBe('number');
expect(typeof request.expiresAt).toBe('number');
});
it('sets expiresAt to timestamp + DEFAULT_EXPIRY_TTL_SECONDS', () => {
const builder = new PaymentRequestBuilder();
const request = builder.build({
amount: '10',
asset: 'XLM',
recipientPublicKey: VALID_RECIPIENT,
});
expect(request.expiresAt - request.timestamp).toBe(DEFAULT_EXPIRY_TTL_SECONDS);
expect(DEFAULT_EXPIRY_TTL_SECONDS).toBe(5 * 60);
});
it('produces correct type/recipient/asset/amount across repeated calls', () => {
const builder = new PaymentRequestBuilder();
const first = builder.build({
amount: '1',
asset: 'XLM',
recipientPublicKey: VALID_RECIPIENT,
});
const second = builder.build({
amount: '1',
asset: 'XLM',
recipientPublicKey: VALID_RECIPIENT,
});
// createPaymentRequest derives its timestamp from Date.now(), not a uuid,
// so two calls within the same second may be identical — what must hold
// is that every field is internally consistent and well-formed.
for (const request of [first, second]) {
expect(request.type).toBe('payment_request');
expect(request.recipient).toBe(VALID_RECIPIENT);
expect(request.asset).toBe('XLM');
expect(request.amount).toBe('1');
expect(request.expiresAt).toBeGreaterThan(request.timestamp);
}
});
});