mirror of
https://github.com/LukeHagar/api-specs.git
synced 2025-12-09 12:27:48 +00:00
added checks for changes
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
const fs = require('fs')
|
||||
const pmConvert = require('./PostmanCovertions')
|
||||
const pmAPI = require('./postmanAPI')
|
||||
let privateRemoteCollectionId = '23836355-c5640083-7523-4ad7-9f92-b23e079cbb7b'
|
||||
let publicRemoteCollectionId = '23836355-6224d51a-d924-4c39-a58f-6970735aac8e'
|
||||
let localCollection = JSON.parse(fs.readFileSync(`C:\\git\\api-specs\\postman\\collections\\sailpoint-api-v3.json`).toString())
|
||||
|
||||
@@ -10,39 +9,126 @@ let localCollection = JSON.parse(fs.readFileSync(`C:\\git\\api-specs\\postman\\c
|
||||
|
||||
const release = async () => {
|
||||
|
||||
|
||||
let remoteCollection = await refreshRemoteCollection(publicRemoteCollectionId)
|
||||
for (let item of remoteCollection.collection.item) {
|
||||
new pmAPI.Folder(publicRemoteCollectionId).delete(item.id)
|
||||
|
||||
|
||||
|
||||
|
||||
// This function just cleans up the variables so they match what is returned in postman
|
||||
for (let variable of localCollection.variable) {
|
||||
if (variable.type) {
|
||||
delete variable.type
|
||||
}
|
||||
}
|
||||
|
||||
// check if the top level collection has changed, If so, update it... This will delete all folders unfortunately.
|
||||
if (checkIfDifferent(remoteCollection.collection.event, localCollection.event)
|
||||
|| checkIfDifferent(remoteCollection.collection.info.description, localCollection.info.description.content)
|
||||
|| checkIfDifferent(remoteCollection.collection.info.name, localCollection.info.name)
|
||||
|| checkIfDifferent(remoteCollection.collection.variable, localCollection.variable)
|
||||
|| checkIfDifferent(remoteCollection.collection.auth, localCollection.auth)) {
|
||||
const localEmptyCollection = { ...localCollection }
|
||||
localEmptyCollection.item = []
|
||||
//delete all folders. Do this one at a time so it doesn't timeout
|
||||
for (let item of remoteCollection.collection.item) {
|
||||
await new pmAPI.Folder(publicRemoteCollectionId).delete(item.id)
|
||||
}
|
||||
// now update the collection with the changes. All folders will be later in code
|
||||
let updatedCollection = await new pmAPI.Collection(publicRemoteCollectionId).update({collection : localEmptyCollection})
|
||||
remoteCollection = await refreshRemoteCollection(publicRemoteCollectionId)
|
||||
}
|
||||
|
||||
// add any missing folders
|
||||
for (let item of localCollection.item) {
|
||||
await updateItem(item)
|
||||
let folder = getMatchingFolder(item, remoteCollection.collection.item)
|
||||
if (folder == null) {
|
||||
await updateEntireFolder(item)
|
||||
}
|
||||
}
|
||||
|
||||
// update any requests that have changed
|
||||
for (let item of localCollection.item) {
|
||||
let folder = getMatchingFolder(item, remoteCollection.collection.item)
|
||||
if (folder !== null) {
|
||||
await updateRequestsInFolder(item.item, folder.id, folder)
|
||||
}
|
||||
}
|
||||
|
||||
console.log(remoteCollection)
|
||||
|
||||
}
|
||||
|
||||
function getMatchingFolder(localFolder, remoteFolders) {
|
||||
for (let folder of remoteFolders) {
|
||||
if (folder.name === localFolder.name) {
|
||||
return folder
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
async function updateItem(item, folderId) {
|
||||
function getMatchingRequest(localRequest, remoteRequests) {
|
||||
for (let request of remoteRequests) {
|
||||
if (request.name === localRequest.name) {
|
||||
return request
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
function buildRequestBody(items) {
|
||||
|
||||
let responses = []
|
||||
for (let response of items.response) {
|
||||
responses.push(pmConvert.responseFromLocal(response, {}))
|
||||
}
|
||||
let postmanRequestBody = pmConvert.requestFromLocal(items, responses)
|
||||
return postmanRequestBody
|
||||
}
|
||||
|
||||
function checkIfDifferent(source, dest) {
|
||||
if (JSON.stringify(source) === JSON.stringify(dest)) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
async function updateEntireFolder(item, folderId) {
|
||||
if (item.item && !folderId) {
|
||||
let newFolder = await new pmAPI.Folder(publicRemoteCollectionId).create(item)
|
||||
await updateItem(item.item, newFolder.data.id)
|
||||
await updateEntireFolder(item.item, newFolder.data.id)
|
||||
} else {
|
||||
for (let items of item) {
|
||||
let postmanRequestBody = pmConvert.requestFromLocal(items)
|
||||
let newRequest = await new pmAPI.Request(publicRemoteCollectionId).create(postmanRequestBody, folderId)
|
||||
let responses = []
|
||||
for (let response of items.response) {
|
||||
let postmanResponseBody = pmConvert.responseFromLocal(response, {})
|
||||
let newResponse = await new pmAPI.Response(publicRemoteCollectionId).create(postmanResponseBody, newRequest.data.id)
|
||||
console.log(newResponse)
|
||||
responses.push(pmConvert.responseFromLocal(response, {}))
|
||||
}
|
||||
let postmanRequestBody = pmConvert.requestFromLocal(items, responses)
|
||||
let newRequest = await new pmAPI.Request(publicRemoteCollectionId).create(postmanRequestBody, folderId)
|
||||
console.log(newRequest.data.name)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function updateRequestsInFolder(item, folderId, remoteItem) {
|
||||
for (let items of item) {
|
||||
let remoteRequest = getMatchingRequest(items, remoteItem.item)
|
||||
let postmanRequestBody = buildRequestBody(items)
|
||||
let remotePostmanBody = buildRequestBody(remoteRequest)
|
||||
if (checkIfDifferent(postmanRequestBody, remotePostmanBody)) {
|
||||
let newRequestDelete = await new pmAPI.Request(publicRemoteCollectionId).delete(remoteRequest.id)
|
||||
console.log(`deleting request ${newRequestDelete.data.id}`)
|
||||
let newRequest = await new pmAPI.Request(publicRemoteCollectionId).create(postmanRequestBody, folderId)
|
||||
console.log(`creating request ${newRequest.data.name}`)
|
||||
} else {
|
||||
console.log(`no changes to request ${remoteRequest.name}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function refreshRemoteCollection (remoteCollectionID) {
|
||||
const msg = 'Refreshing remote collection'
|
||||
console.log('\n' + msg + '...\n')
|
||||
|
||||
Reference in New Issue
Block a user