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

119 lines
2.6 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' ) {
console.log('No USER_KEY was defined.');
}
if ( typeof USER_SECRET === 'undefined' ) {
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' ) {
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');
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] ) {
let 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 colleciton.json file. It can be imported to postman
fs.writeFile('./collection.json', JSON.stringify( collectionJSON ), ( err ) => {
if ( err ) {
console.log( err );
}
console.log('File saved!');
});