|
| 1 | +import {replaceParams} from '../replaceParams'; // Adjust the import path as needed |
| 2 | + |
| 3 | +describe('replaceParams for example.com requests', () => { |
| 4 | + test('replaces single parameter in URL path', () => { |
| 5 | + const template = 'https://example.com/users/${userId}'; |
| 6 | + const params = {userId: '12345'}; |
| 7 | + expect(replaceParams(template, params)).toBe('https://example.com/users/12345'); |
| 8 | + }); |
| 9 | + |
| 10 | + test('replaces multiple parameters in URL path and query', () => { |
| 11 | + const template = 'https://example.com/api/${version}/search?q=${query}&limit=${limit}'; |
| 12 | + const params = {version: 'v1', query: 'nodejs', limit: '10'}; |
| 13 | + expect(replaceParams(template, params)).toBe( |
| 14 | + 'https://example.com/api/v1/search?q=nodejs&limit=10', |
| 15 | + ); |
| 16 | + }); |
| 17 | + |
| 18 | + test('handles missing parameters in complex URL', () => { |
| 19 | + const template = 'https://example.com/${resource}/${id}?filter=${filter}&sort=${sort}'; |
| 20 | + const params = {resource: 'products', id: '987', sort: 'desc'}; |
| 21 | + expect(replaceParams(template, params)).toBe( |
| 22 | + 'https://example.com/products/987?filter=${filter}&sort=desc', |
| 23 | + ); |
| 24 | + }); |
| 25 | + |
| 26 | + test('handles empty params object', () => { |
| 27 | + const template = 'https://example.com/static/${path}/${file}'; |
| 28 | + const params = {}; |
| 29 | + expect(replaceParams(template, params)).toBe('https://example.com/static/${path}/${file}'); |
| 30 | + }); |
| 31 | + |
| 32 | + test('handles template with no parameters', () => { |
| 33 | + const template = 'https://example.com/about'; |
| 34 | + const params = {unused: 'parameter'}; |
| 35 | + expect(replaceParams(template, params)).toBe('https://example.com/about'); |
| 36 | + }); |
| 37 | + |
| 38 | + test('handles empty template string', () => { |
| 39 | + const template = ''; |
| 40 | + const params = {key: 'value'}; |
| 41 | + expect(replaceParams(template, params)).toBe(''); |
| 42 | + }); |
| 43 | + |
| 44 | + test('handles complex nested parameters in URL structure', () => { |
| 45 | + const template = |
| 46 | + 'https://example.com/${service}/${version}/${resource}?id=${id}&type=${type}'; |
| 47 | + const params = { |
| 48 | + service: 'api', |
| 49 | + version: 'v2', |
| 50 | + resource: 'users', |
| 51 | + id: '12345', |
| 52 | + type: 'admin', |
| 53 | + }; |
| 54 | + expect(replaceParams(template, params)).toBe( |
| 55 | + 'https://example.com/api/v2/users?id=12345&type=admin', |
| 56 | + ); |
| 57 | + }); |
| 58 | + |
| 59 | + test('handles URL-encoded parameters', () => { |
| 60 | + const template = 'https://example.com/search?q=${query}'; |
| 61 | + const params = {query: encodeURIComponent('Hello World!')}; |
| 62 | + expect(replaceParams(template, params)).toBe('https://example.com/search?q=Hello%20World!'); |
| 63 | + }); |
| 64 | +}); |
0 commit comments