Skip to content

Commit

Permalink
Fixed regression the 'searchParams' option was not being passed to th…
Browse files Browse the repository at this point in the history
…e method that creates the URL for the request and fixed broken references in some tests.
  • Loading branch information
D1g1talEntr0py committed Sep 21, 2023
1 parent 5678f96 commit e6eb782
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 53 deletions.
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "@d1g1tal/transportr",
"version": "1.3.1",
"version": "1.3.2",
"description": "JavaScript wrapper for the Fetch API",
"type": "module",
"exports": {
Expand Down
16 changes: 10 additions & 6 deletions src/transportr.js
Expand Up @@ -629,7 +629,7 @@ export default class Transportr {

this.#publish({ name: RequestEvents.CONFIGURED, data: options, global: options.global });

const url = Transportr.#createUrl(this.#baseUrl, path);
const url = Transportr.#createUrl(this.#baseUrl, path, options.searchParams);
if (_type(options.signal) != AbortSignal) { options.signal = new AbortSignal(options.signal) }
options.signal.addEventListener(SignalEvents.ABORT, (event) => this.#publish({ name: RequestEvents.ABORTED, event, global: options.global }));
options.signal.addEventListener(SignalEvents.TIMEOUT, (event) => this.#publish({ name: RequestEvents.TIMEOUT, event, global: options.global }));
Expand Down Expand Up @@ -736,7 +736,7 @@ export default class Transportr {
}
} else {
requestOptions.headers.delete(HttpRequestHeader.CONTENT_TYPE);
if (!requestOptions.body?.isEmpty()) {
if (requestOptions.body) {
Transportr.#mergeOptions(requestOptions.searchParams, requestOptions.body);
}
requestOptions.body = undefined;
Expand Down Expand Up @@ -787,11 +787,15 @@ export default class Transportr {
* @static
* @param {URL} url The URL to use as a base.
* @param {string} [path] The optional, relative path to the resource. This MUST be a relative path, otherwise, you should create a new {@link Transportr} instance.
* @returns {URL} A new URL object with the pathname and origin of the url parameter, and the path parameter
* appended to the end of the pathname.
* @param {URLSearchParams} [searchParams] The optional search parameters to append to the URL.
* @returns {URL} A new URL object with the pathname and origin of the url parameter, and the path parameter appended to the end of the pathname.
*/
static #createUrl(url, path) {
return path ? new URL(`${url.pathname.replace(endsWithSlashRegEx, '')}${path}`, url.origin) : new URL(url);
static #createUrl(url, path, searchParams) {
const requestUrl = path ? new URL(`${url.pathname.replace(endsWithSlashRegEx, '')}${path}`, url.origin) : new URL(url);

searchParams?.forEach((value, key) => requestUrl.searchParams.append(key, value));

return requestUrl;
}

/**
Expand Down
2 changes: 1 addition & 1 deletion tests/abort-all.test.js
Expand Up @@ -21,7 +21,7 @@ describe('Transportr', () => {

it('should cancel all requests when abortAll is called', async () => {
const abortedEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ABORTED, abortedEventListener);
transportr.register(Transportr.Events.ABORTED, abortedEventListener);

// Initiate multiple requests
transportr.getImage('/320/240');
Expand Down
14 changes: 7 additions & 7 deletions tests/all-complete-event.test.js
Expand Up @@ -5,25 +5,25 @@ test('All Complete Event', async () => {
const transportr = new Transportr('https://picsum.photos');

const configuredEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.CONFIGURED, configuredEventListener);
transportr.register(Transportr.Events.CONFIGURED, configuredEventListener);

const successEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.SUCCESS, successEventListener);
transportr.register(Transportr.Events.SUCCESS, successEventListener);

const errorEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ERROR, errorEventListener);
transportr.register(Transportr.Events.ERROR, errorEventListener);

const abortEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ABORTED, abortEventListener);
transportr.register(Transportr.Events.ABORTED, abortEventListener);

const timeoutEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.TIMEOUT, timeoutEventListener);
transportr.register(Transportr.Events.TIMEOUT, timeoutEventListener);

const completeEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.COMPLETE, completeEventListener);
transportr.register(Transportr.Events.COMPLETE, completeEventListener);

const allCompleteEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ALL_COMPLETE, allCompleteEventListener);
transportr.register(Transportr.Events.ALL_COMPLETE, allCompleteEventListener);

try {
const results = await Promise.allSettled([transportr.getImage('/240'), transportr.getImage('/360'), transportr.getImage('/480')]);
Expand Down
2 changes: 1 addition & 1 deletion tests/global-event-handler.test.js
Expand Up @@ -5,7 +5,7 @@ test('Global Event Listener', async () => {
const imageTransportr = new Transportr('https://picsum.photos');

const globalConfiguredEventHandler = jest.fn();
Transportr.register(Transportr.RequestEvents.CONFIGURED, globalConfiguredEventHandler);
Transportr.register(Transportr.Events.CONFIGURED, globalConfiguredEventHandler);

const image = await imageTransportr.getImage('/320/240');

Expand Down
74 changes: 37 additions & 37 deletions tests/transportr.test.js
@@ -1,11 +1,11 @@
import { describe, beforeAll, afterAll, it, expect, jest, test } from '@jest/globals';
import { describe, expect, it, jest, test } from '@jest/globals';
import { DOMParser } from '@xmldom/xmldom';
import HttpError from '../src/http-error.js';
import Transportr from '../src/transportr.js';
import HttpRequestHeader from '../src/http-request-headers.js';
import HttpResponseHeader from '../src/http-response-headers.js';
import HttpMediaType from '../src/http-media-type.js';
import HttpRequestHeader from '../src/http-request-headers.js';
import HttpRequestMethod from '../src/http-request-methods.js';
import HttpResponseHeader from '../src/http-response-headers.js';
import Transportr from '../src/transportr.js';

describe('Transportr', () => {
describe('Transportr.prototype.constructor', () => {
Expand Down Expand Up @@ -300,25 +300,25 @@ describe('Transportr', () => {
const transportr = new Transportr('https://picsum.photos');

const configuredEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.CONFIGURED, configuredEventListener);
transportr.register(Transportr.Events.CONFIGURED, configuredEventListener);

const successEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.SUCCESS, successEventListener);
transportr.register(Transportr.Events.SUCCESS, successEventListener);

const errorEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ERROR, errorEventListener);
transportr.register(Transportr.Events.ERROR, errorEventListener);

const abortEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ABORTED, abortEventListener);
transportr.register(Transportr.Events.ABORTED, abortEventListener);

const timeoutEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.TIMEOUT, timeoutEventListener);
transportr.register(Transportr.Events.TIMEOUT, timeoutEventListener);

const completeEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.COMPLETE, completeEventListener);
transportr.register(Transportr.Events.COMPLETE, completeEventListener);

const allCompleteEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ALL_COMPLETE, allCompleteEventListener);
transportr.register(Transportr.Events.ALL_COMPLETE, allCompleteEventListener);

const image = await transportr.getImage('/240');
expect(typeof (image)).toBe('string');
Expand All @@ -337,22 +337,22 @@ describe('Transportr', () => {
const transportr = new Transportr('https://picsum.photos');

const configuredEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.CONFIGURED, configuredEventListener);
transportr.register(Transportr.Events.CONFIGURED, configuredEventListener);

const successEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.SUCCESS, successEventListener);
transportr.register(Transportr.Events.SUCCESS, successEventListener);

const errorEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ERROR, errorEventListener);
transportr.register(Transportr.Events.ERROR, errorEventListener);

const abortedEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ABORTED, abortedEventListener);
transportr.register(Transportr.Events.ABORTED, abortedEventListener);

const timeoutEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.TIMEOUT, timeoutEventListener);
transportr.register(Transportr.Events.TIMEOUT, timeoutEventListener);

const completeEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.COMPLETE, completeEventListener);
transportr.register(Transportr.Events.COMPLETE, completeEventListener);

const abortListener = jest.fn();
// Test adding an event listener to the signal
Expand Down Expand Up @@ -381,22 +381,22 @@ describe('Transportr', () => {
const transportr = new Transportr('https://picsum.photos');

const configuredEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.CONFIGURED, configuredEventListener);
transportr.register(Transportr.Events.CONFIGURED, configuredEventListener);

const successEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.SUCCESS, successEventListener);
transportr.register(Transportr.Events.SUCCESS, successEventListener);

const errorEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ERROR, errorEventListener);
transportr.register(Transportr.Events.ERROR, errorEventListener);

const abortedEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ABORTED, abortedEventListener);
transportr.register(Transportr.Events.ABORTED, abortedEventListener);

const timeoutEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.TIMEOUT, timeoutEventListener);
transportr.register(Transportr.Events.TIMEOUT, timeoutEventListener);

const completeEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.COMPLETE, completeEventListener);
transportr.register(Transportr.Events.COMPLETE, completeEventListener);

const abortListener = jest.fn();
// Test adding an event listener to the signal
Expand Down Expand Up @@ -424,24 +424,24 @@ describe('Transportr', () => {
const transportr = new Transportr(url, { timeout });

const configuredEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.CONFIGURED, configuredEventListener);
transportr.register(Transportr.Events.CONFIGURED, configuredEventListener);

const successEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.SUCCESS, successEventListener);
transportr.register(Transportr.Events.SUCCESS, successEventListener);

const errorEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ERROR, errorEventListener);
transportr.register(Transportr.Events.ERROR, errorEventListener);

const abortedEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ABORTED, abortedEventListener);
transportr.register(Transportr.Events.ABORTED, abortedEventListener);

const timeoutEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.TIMEOUT, timeoutEventListener);
transportr.register(Transportr.Events.TIMEOUT, timeoutEventListener);

const completeEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.COMPLETE, completeEventListener);
transportr.register(Transportr.Events.COMPLETE, completeEventListener);

transportr.register(Transportr.RequestEvents.TIMEOUT, (event) => {
transportr.register(Transportr.Events.TIMEOUT, (event) => {
expect(event).toBeInstanceOf(CustomEvent);
expect(event.target).toBeInstanceOf(globalThis.AbortSignal);
expect(event.target.aborted).toBe(true);
Expand Down Expand Up @@ -471,24 +471,24 @@ describe('Transportr', () => {
const transportr = new Transportr(url.origin, { timeout });

const configuredEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.CONFIGURED, configuredEventListener);
transportr.register(Transportr.Events.CONFIGURED, configuredEventListener);

const successEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.SUCCESS, successEventListener);
transportr.register(Transportr.Events.SUCCESS, successEventListener);

const errorEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ERROR, errorEventListener);
transportr.register(Transportr.Events.ERROR, errorEventListener);

const abortedEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.ABORTED, abortedEventListener);
transportr.register(Transportr.Events.ABORTED, abortedEventListener);

const timeoutEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.TIMEOUT, timeoutEventListener);
transportr.register(Transportr.Events.TIMEOUT, timeoutEventListener);

const completeEventListener = jest.fn();
transportr.register(Transportr.RequestEvents.COMPLETE, completeEventListener);
transportr.register(Transportr.Events.COMPLETE, completeEventListener);

transportr.register(Transportr.RequestEvents.TIMEOUT, (event) => {
transportr.register(Transportr.Events.TIMEOUT, (event) => {
expect(event).toBeInstanceOf(CustomEvent);
expect(event.detail).toHaveProperty('timeout', timeout);
expect(event.detail).toHaveProperty('cause');
Expand Down

0 comments on commit e6eb782

Please sign in to comment.