You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

90 lines
3.7 KiB

import { describe, expect, it } from 'vitest'
import { normalizePaypalAuthority, resolvePaypalPaymentUrl } from './payto-paypal-url'
describe('resolvePaypalPaymentUrl', () => {
it('maps paypal.com/paypalme slug to paypal.me', () => {
expect(resolvePaypalPaymentUrl('https://www.paypal.com/paypalme/2rizmo%40gmail.com')).toBe(
'https://paypal.me/2rizmo%40gmail.com'
)
})
it('resolves donate links with and without https', () => {
const canonical = 'https://www.paypal.com/donate/?hosted_button_id=T32KCSU8EZTBL'
expect(resolvePaypalPaymentUrl('https://www.paypal.com/donate/?hosted_button_id=T32KCSU8EZTBL')).toBe(
canonical
)
expect(resolvePaypalPaymentUrl('www.paypal.com/donate/?hosted_button_id=T32KCSU8EZTBL')).toBe(
canonical
)
expect(resolvePaypalPaymentUrl('paypal.com/donate/?hosted_button_id=T32KCSU8EZTBL')).toBe(
canonical
)
})
it('maps legacy webscr hosted buttons to donate URLs', () => {
expect(
resolvePaypalPaymentUrl(
'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=T32KCSU8EZTBL'
)
).toBe('https://www.paypal.com/donate/?hosted_button_id=T32KCSU8EZTBL')
})
it('unwraps YouTube redirect q= PayPal URL', () => {
const yt =
'https://www.youtube.com/redirect?event=channel_description&redir_token=abc&q=https%3A%2F%2Fwww.paypal.com%2Fdonate%2F%3Fhosted_button_id%3DT32KCSU8EZTBL'
expect(resolvePaypalPaymentUrl(yt)).toBe(
'https://www.paypal.com/donate/?hosted_button_id=T32KCSU8EZTBL'
)
})
it('builds paypal.me from bare username', () => {
expect(resolvePaypalPaymentUrl('somecreator')).toBe('https://paypal.me/somecreator')
expect(resolvePaypalPaymentUrl('https://www.paypal.com/paypalme/2rizmo@gmail.com')).toBe(
'https://paypal.me/2rizmo%40gmail.com'
)
})
it('normalizes paypal.me path', () => {
expect(resolvePaypalPaymentUrl('https://paypal.me/foo')).toBe('https://paypal.me/foo')
})
it('handles www.paypal.me profile links', () => {
expect(resolvePaypalPaymentUrl('https://www.paypal.me/user38910')).toBe('https://paypal.me/user38910')
expect(resolvePaypalPaymentUrl('www.paypal.me/user38910')).toBe('https://paypal.me/user38910')
})
it('unwraps payto://paypal/… authorities', () => {
expect(resolvePaypalPaymentUrl('payto://paypal/https://www.paypal.me/user38910')).toBe(
'https://paypal.me/user38910'
)
expect(resolvePaypalPaymentUrl('payto://paypal/user38910')).toBe('https://paypal.me/user38910')
expect(
resolvePaypalPaymentUrl('payto://paypal/www.paypal.com/donate/?hosted_button_id=ABC')
).toBe('https://www.paypal.com/donate/?hosted_button_id=ABC')
})
it('passes through pool and campaign donate URLs with https', () => {
const pool = 'https://www.paypal.com/pools/c/abc123'
expect(resolvePaypalPaymentUrl(pool)).toBe(pool)
const campaign = 'https://www.paypal.com/donate/?campaign_id=foo'
expect(resolvePaypalPaymentUrl(campaign)).toBe(campaign)
})
})
describe('normalizePaypalAuthority', () => {
it('extracts username from PayPal.Me URLs', () => {
expect(normalizePaypalAuthority('https://www.paypal.me/user38910')).toBe('user38910')
expect(normalizePaypalAuthority('user38910')).toBe('user38910')
})
it('stores canonical donation URLs', () => {
expect(
normalizePaypalAuthority('www.paypal.com/donate/?hosted_button_id=T32KCSU8EZTBL')
).toBe('https://www.paypal.com/donate/?hosted_button_id=T32KCSU8EZTBL')
expect(
normalizePaypalAuthority(
'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=T32KCSU8EZTBL'
)
).toBe('https://www.paypal.com/donate/?hosted_button_id=T32KCSU8EZTBL')
})
})