From da95f1472f2f3775e9da353d613863f39a2bdfe1 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Fri, 1 Jun 2018 12:24:22 +0100 Subject: [PATCH] Adding unit tests --- packages/api-request/src/index.js | 10 ++--- .../http-v1.js} | 2 +- .../namespace-endpoint.js} | 0 .../nonce.js} | 7 +++- .../preloading.js} | 0 .../root-url.js} | 2 +- .../src/middlewares/test/http-v1.js | 21 ++++++++++ .../middlewares/test/namespace-endpoint.js | 18 ++++++++ .../api-request/src/middlewares/test/nonce.js | 32 +++++++++++++++ .../src/middlewares/test/preloading.js | 41 +++++++++++++++++++ .../src/middlewares/test/root-url.js | 17 ++++++++ 11 files changed, 142 insertions(+), 8 deletions(-) rename packages/api-request/src/{http-v1-middleware.js => middlewares/http-v1.js} (94%) rename packages/api-request/src/{namespace-endpoint-middleware.js => middlewares/namespace-endpoint.js} (100%) rename packages/api-request/src/{nonce-middleware.js => middlewares/nonce.js} (89%) rename packages/api-request/src/{preloading-middleware.js => middlewares/preloading.js} (100%) rename packages/api-request/src/{root-url-middleware.js => middlewares/root-url.js} (98%) create mode 100644 packages/api-request/src/middlewares/test/http-v1.js create mode 100644 packages/api-request/src/middlewares/test/namespace-endpoint.js create mode 100644 packages/api-request/src/middlewares/test/nonce.js create mode 100644 packages/api-request/src/middlewares/test/preloading.js create mode 100644 packages/api-request/src/middlewares/test/root-url.js diff --git a/packages/api-request/src/index.js b/packages/api-request/src/index.js index 16959107413361..081ff2c7a445ea 100644 --- a/packages/api-request/src/index.js +++ b/packages/api-request/src/index.js @@ -6,11 +6,11 @@ import jQuery from 'jquery'; /** * Internal dependencies */ -import createNonceMiddleware from './nonce-middleware'; -import createRootURLMiddleware from './root-url-middleware'; -import createPreloadingMiddleware from './preloading-middleware'; -import namespaceEndpointMiddleware from './namespace-endpoint-middleware'; -import httpV1Middleware from './http-v1-middleware'; +import createNonceMiddleware from './middlewares/nonce'; +import createRootURLMiddleware from './middlewares/root-url'; +import createPreloadingMiddleware from './middlewares/preloading'; +import namespaceEndpointMiddleware from './middlewares/namespace-endpoint'; +import httpV1Middleware from './middlewares/http-v1'; const middlewares = []; diff --git a/packages/api-request/src/http-v1-middleware.js b/packages/api-request/src/middlewares/http-v1.js similarity index 94% rename from packages/api-request/src/http-v1-middleware.js rename to packages/api-request/src/middlewares/http-v1.js index b9552bafa8210f..d911a0c9cbd6a3 100644 --- a/packages/api-request/src/http-v1-middleware.js +++ b/packages/api-request/src/middlewares/http-v1.js @@ -3,7 +3,7 @@ function httpV1Middleware( options, next ) { if ( newOptions.method ) { if ( [ 'PATCH', 'PUT', 'DELETE' ].indexOf( newOptions.method.toUpperCase() ) >= 0 ) { if ( ! newOptions.headers ) { - options.headers = {}; + newOptions.headers = {}; } newOptions.headers[ 'X-HTTP-Method-Override' ] = newOptions.method; newOptions.method = 'POST'; diff --git a/packages/api-request/src/namespace-endpoint-middleware.js b/packages/api-request/src/middlewares/namespace-endpoint.js similarity index 100% rename from packages/api-request/src/namespace-endpoint-middleware.js rename to packages/api-request/src/middlewares/namespace-endpoint.js diff --git a/packages/api-request/src/nonce-middleware.js b/packages/api-request/src/middlewares/nonce.js similarity index 89% rename from packages/api-request/src/nonce-middleware.js rename to packages/api-request/src/middlewares/nonce.js index 372881f8ffd3fa..0ad11c0424ff97 100644 --- a/packages/api-request/src/nonce-middleware.js +++ b/packages/api-request/src/middlewares/nonce.js @@ -1,3 +1,8 @@ +/** + * External dependencies + */ +import jQuery from 'jquery'; + const createNonceMiddleware = ( nonce ) => ( options, next ) => { let usedNonce = nonce; /** @@ -6,7 +11,7 @@ const createNonceMiddleware = ( nonce ) => ( options, next ) => { * Configure heartbeat to refresh the wp-api nonce, keeping the editor * authorization intact. */ - window.jQuery( document ).on( 'heartbeat-tick', ( event, response ) => { + jQuery( document ).on( 'heartbeat-tick', ( event, response ) => { if ( response[ 'rest-nonce' ] ) { usedNonce = response[ 'rest-nonce' ]; } diff --git a/packages/api-request/src/preloading-middleware.js b/packages/api-request/src/middlewares/preloading.js similarity index 100% rename from packages/api-request/src/preloading-middleware.js rename to packages/api-request/src/middlewares/preloading.js diff --git a/packages/api-request/src/root-url-middleware.js b/packages/api-request/src/middlewares/root-url.js similarity index 98% rename from packages/api-request/src/root-url-middleware.js rename to packages/api-request/src/middlewares/root-url.js index 8d48e798525eea..d4746d83edb542 100644 --- a/packages/api-request/src/root-url-middleware.js +++ b/packages/api-request/src/middlewares/root-url.js @@ -1,4 +1,4 @@ -import namespaceAndEndpointMiddleware from './namespace-endpoint-middleware'; +import namespaceAndEndpointMiddleware from './namespace-endpoint'; const createRootURLMiddleware = ( rootURL ) => ( options, next ) => { return namespaceAndEndpointMiddleware( options, ( optionsWithPath ) => { diff --git a/packages/api-request/src/middlewares/test/http-v1.js b/packages/api-request/src/middlewares/test/http-v1.js new file mode 100644 index 00000000000000..ede9866b5566dd --- /dev/null +++ b/packages/api-request/src/middlewares/test/http-v1.js @@ -0,0 +1,21 @@ +import httpV1Middleware from '../http-v1'; + +describe( 'HTTP v1 Middleware', () => { + it( 'should use a POST for a PUT requests', () => { + const callback = ( options ) => { + expect( options.method ).toBe( 'POST' ); + expect( options.headers[ 'X-HTTP-Method-Override' ] ).toBe( 'PUT' ); + }; + + httpV1Middleware( { method: 'PUT', data: {} }, callback ); + } ); + + it( 'shouldn\'t touch the options for GET requests', () => { + const requestOptions = { method: 'GET', path: '/wp/v2/posts' }; + const callback = ( options ) => { + expect( options ).toEqual( requestOptions ); + }; + + httpV1Middleware( requestOptions, callback ); + } ); +} ); diff --git a/packages/api-request/src/middlewares/test/namespace-endpoint.js b/packages/api-request/src/middlewares/test/namespace-endpoint.js new file mode 100644 index 00000000000000..9a676529d190e7 --- /dev/null +++ b/packages/api-request/src/middlewares/test/namespace-endpoint.js @@ -0,0 +1,18 @@ +import namespaceEndpointMiddleware from '../namespace-endpoint'; + +describe( 'Namespace & Endpoint middleware', () => { + it( 'should concat the endpoint and namespace into a path property', () => { + const requestOptions = { + method: 'GET', + namespace: '/wp/v2', + endpoint: '/posts', + }; + const callback = ( options ) => { + expect( options.path ).toBe( 'wp/v2/posts' ); + expect( options.namespace ).toBeUndefined(); + expect( options.endpoint ).toBeUndefined(); + }; + + namespaceEndpointMiddleware( requestOptions, callback ); + } ); +} ); diff --git a/packages/api-request/src/middlewares/test/nonce.js b/packages/api-request/src/middlewares/test/nonce.js new file mode 100644 index 00000000000000..5568220c4566d5 --- /dev/null +++ b/packages/api-request/src/middlewares/test/nonce.js @@ -0,0 +1,32 @@ +import createNonceMiddleware from '../nonce'; + +describe( 'Nonce middleware', () => { + it( 'should add a nonce header to the request', () => { + const nonce = 'nonce'; + const nonceMiddleware = createNonceMiddleware( nonce ); + const requestOptions = { + method: 'GET', + path: '/wp/v2/posts', + }; + const callback = ( options ) => { + expect( options.headers[ 'X-WP-Nonce' ] ).toBe( nonce ); + }; + + nonceMiddleware( requestOptions, callback ); + } ); + + it( 'should not add a nonce header to requests with nonces', () => { + const nonce = 'nonce'; + const nonceMiddleware = createNonceMiddleware( nonce ); + const requestOptions = { + method: 'GET', + path: '/wp/v2/posts', + headers: { 'X-WP-Nonce': 'existing nonce' }, + }; + const callback = ( options ) => { + expect( options.headers[ 'X-WP-Nonce' ] ).toBe( 'existing nonce' ); + }; + + nonceMiddleware( requestOptions, callback ); + } ); +} ); diff --git a/packages/api-request/src/middlewares/test/preloading.js b/packages/api-request/src/middlewares/test/preloading.js new file mode 100644 index 00000000000000..255ce90ad162f9 --- /dev/null +++ b/packages/api-request/src/middlewares/test/preloading.js @@ -0,0 +1,41 @@ +import createPreloadingMiddleware from '../preloading'; + +describe( 'Preloading Middleware', () => { + it( 'should return the preloaded data if provided', () => { + const body = { + status: 'this is the preloaded response', + }; + const preloadedData = { + 'wp/v2/posts': { + body, + }, + }; + const prelooadingMiddleware = createPreloadingMiddleware( preloadedData ); + const requestOptions = { + method: 'GET', + path: 'wp/v2/posts', + }; + + const response = prelooadingMiddleware( requestOptions ); + response.then( ( value ) => { + expect( value ).toEqual( body ); + } ); + } ); + + it( 'should move to the next middleware if no preloaded data', () => { + const preloadedData = {}; + const prelooadingMiddleware = createPreloadingMiddleware( preloadedData ); + const requestOptions = { + method: 'GET', + path: 'wp/v2/posts', + }; + + const callback = ( options ) => { + expect( options ).toBe( requestOptions ); + return true; + }; + + const ret = prelooadingMiddleware( requestOptions, callback ); + expect( ret ).toBe( true ); + } ); +} ); diff --git a/packages/api-request/src/middlewares/test/root-url.js b/packages/api-request/src/middlewares/test/root-url.js new file mode 100644 index 00000000000000..5c6d6165a44ce7 --- /dev/null +++ b/packages/api-request/src/middlewares/test/root-url.js @@ -0,0 +1,17 @@ +import createRootUrlMiddleware from '../root-url'; + +describe( 'Root URL middleware', () => { + it( 'should append the root URL', () => { + const rootURL = 'http://wp.org/wp-admin/rest/'; + const rootURLMiddleware = createRootUrlMiddleware( rootURL ); + const requestOptions = { + method: 'GET', + path: '/wp/v2/posts', + }; + const callback = ( options ) => { + expect( options.url ).toBe( 'http://wp.org/wp-admin/rest/wp/v2/posts' ); + }; + + rootURLMiddleware( requestOptions, callback ); + } ); +} );