woocommerce/packages/js/api-core-tests/utils/api-collection/build-collection.js

122 lines
2.8 KiB
JavaScript

const fs = require( 'fs' );
const { Collection, ItemGroup, Item } = require( 'postman-collection' );
require( 'dotenv' ).config();
const { BASE_URL, USER_KEY, USER_SECRET, USE_INDEX_PERMALINKS } = process.env;
/**
* Build a Postman collection using the API testing objects.
*
* For more information on the Postman Collection SDK, see:
* https://www.postmanlabs.com/postman-collection/index.html
*/
// Set up our empty collection
if ( typeof USER_KEY === 'undefined' ) {
// eslint-disable-next-line
console.log( 'No USER_KEY was defined.' );
}
if ( typeof USER_SECRET === 'undefined' ) {
// eslint-disable-next-line
console.log( 'No USER_SECRET was defined.' );
}
const postmanCollection = new Collection( {
auth: {
type: 'basic',
basic: [
{
key: 'username',
value: USER_KEY,
type: 'string',
},
{
key: 'password',
value: USER_SECRET,
type: 'string',
},
],
},
info: {
name: 'WooCommerce API - v3',
},
} );
// Get the API url
if ( typeof BASE_URL === 'undefined' ) {
// eslint-disable-next-line
console.log( 'No BASE_URL was defined.' );
}
// Update the API path if the `USE_INDEX_PERMALINKS` flag is set
const useIndexPermalinks = USE_INDEX_PERMALINKS === 'true';
let apiPath = `${ BASE_URL }/?rest_route=/wc/v3`;
if ( useIndexPermalinks ) {
apiPath = `${ BASE_URL }/wp-json/wc/v3`;
}
// Set this here for use in `request.js`
global.API_PATH = `${ apiPath }/`;
// Add the API path has a collection variable
postmanCollection.variables.add( {
id: 'apiBaseUrl',
value: apiPath,
type: 'string',
} );
// Get the API request data
const resources = require( '../../endpoints' );
// eslint-disable-next-line
resourceKeys = Object.keys( resources );
// Add the requests to folders in the collection
for ( const key in resources ) {
const folder = new ItemGroup( {
name: resources[ key ].name,
items: [],
} );
for ( const endpoint in resources[ key ] ) {
const api = resources[ key ][ endpoint ];
// If there is no name defined, continue
if ( ! api.name ) {
continue;
}
const request = new Item( {
name: api.name,
request: {
url: `{{apiBaseUrl}}/${ api.path }`,
method: api.method,
body: {
mode: 'raw',
raw: JSON.stringify( api.payload ),
options: {
raw: { language: 'json' },
},
},
},
} );
folder.items.add( request );
}
postmanCollection.items.add( folder );
}
// We need to convert the collection to JSON so that it can be exported to a file
const collectionJSON = postmanCollection.toJSON();
// Create a collection.json file. It can be imported to postman
fs.writeFile(
'./collection.json',
JSON.stringify( collectionJSON ),
( err ) => {
if ( err ) {
// eslint-disable-next-line
console.log( err );
}
// eslint-disable-next-line
console.log( 'File saved!' );
}
);