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

119 lines
2.5 KiB
JavaScript
Raw Normal View History

2021-08-23 17:39:03 +00:00
const fs = require('fs');
const { Collection, ItemGroup, Item } = require('postman-collection');
require('dotenv').config();
const {
BASE_URL,
2021-09-07 22:20:44 +00:00
USER_KEY,
USER_SECRET,
2021-08-23 17:39:03 +00:00
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
2021-09-07 22:20:44 +00:00
if ( typeof USER_KEY === 'undefined' ) {
console.log('No USER_KEY was defined.');
}
if ( typeof USER_SECRET === 'undefined' ) {
console.log('No USER_SECRET was defined.');
}
2021-08-23 17:39:03 +00:00
const postmanCollection = new Collection( {
auth: {
2021-08-24 01:25:07 +00:00
type: 'basic',
2021-08-23 17:39:03 +00:00
basic: [
{
2021-08-24 01:25:07 +00:00
key: 'username',
2021-09-07 22:20:44 +00:00
value: USER_KEY,
2021-08-24 01:25:07 +00:00
type: 'string'
2021-08-23 17:39:03 +00:00
},
{
2021-08-24 01:25:07 +00:00
key: 'password',
2021-09-07 22:20:44 +00:00
value: USER_SECRET,
2021-08-24 01:25:07 +00:00
type: 'string'
2021-08-23 17:39:03 +00:00
},
]
},
info: {
name: 'WooCommerce API - v3'
},
} );
// Get the API url
2021-09-07 22:20:44 +00:00
if ( typeof BASE_URL === 'undefined' ) {
console.log('No BASE_URL was defined.');
}
2021-08-23 17:39:03 +00:00
// Update the API path if the `USE_INDEX_PERMALINKS` flag is set
const useIndexPermalinks = ( USE_INDEX_PERMALINKS === 'true' );
2021-09-08 01:02:58 +00:00
let apiPath = `${BASE_URL}/?rest_route=/wc/v3`;
2021-08-23 17:39:03 +00:00
if ( useIndexPermalinks ) {
2021-09-08 01:02:58 +00:00
apiPath = `${BASE_URL}/wp-json/wc/v3`;
2021-08-23 17:39:03 +00:00
}
// 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: {
2021-09-07 22:20:44 +00:00
raw: { language: 'json' }
2021-08-23 17:39:03 +00:00
}
},
},
} );
folder.items.add( request );
}
2021-09-07 22:20:44 +00:00
postmanCollection.items.add( folder );
2021-08-23 17:39:03 +00:00
}
// 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!');
});