Skip to content

Instantly share code, notes, and snippets.

@deanohyeah
Created July 15, 2017 08:19
Show Gist options
  • Save deanohyeah/f3827bd68e9beee49cc248c3a7538b08 to your computer and use it in GitHub Desktop.
Save deanohyeah/f3827bd68e9beee49cc248c3a7538b08 to your computer and use it in GitHub Desktop.
A js executable script to close all crucible reviews for user.
#!/usr/bin/env node
/* eslint-disable import/no-commonjs */
const request = require('request')
const Promise = require('bluebird')
const FISHEYE_BASE_URL = 'FILL_IN_URL'
const userName = (process.argv[2]).toString()
const password = (process.argv[3]).toString()
let token
function checkArguments() {
return Promise.try(() => {
if (process.argv.length < 3) {
process.stdout.write(`Usage: ${process.argv[1]}: user_name password \n`)
process.exit()
}
})
}
function getToken() {
const options = {
url: `${FISHEYE_BASE_URL}/rest-service-fecru/auth/login`,
method: 'POST',
form: {
userName,
password,
},
}
return makeRequest(options).then(response => {
token = response.token
})
}
function getOpenReviews() {
const options = {
url: `${FISHEYE_BASE_URL}/rest-service/reviews-v1/filter`,
qs: {
author: userName,
states: 'Review',
FEAUTH: token,
},
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
}
return makeRequest(options).then(response => {
return response.reviewData.map(review => review.permaId.id)
})
}
function closeAllReviews(reviewIds) {
const getOptions = function getOptions(id) {
return {
url: `${FISHEYE_BASE_URL}/rest-service/reviews-v1/${id}/transition`,
qs: {
action: 'action:closeReview',
FEAUTH: token,
},
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
}
}
const promises = reviewIds.map((id, i) => {
return makeRequest(getOptions(id))
})
return Promise.all(promises)
.then(promises => console.log(`Successfully closed ${promises.length} reviews`))
.catch(e => console.log(e))
}
// wrap request in promise
function makeRequest(options) {
return new Promise((resolve, reject) => {
request(options, (err, response) => {
if (err) {
reject(err)
} else if (response.statusCode > 400) {
reject(new Error(`Received status ${response.statusMessage} (${response.statusCode})\n\n${response.body}`))
} else {
try {
resolve(JSON.parse(response.body))
} catch (e) {
resolve()
}
}
})
})
}
checkArguments()
.then(getToken)
.then(getOpenReviews)
.then(closeAllReviews)
.catch((error) => {
process.stdout.write(error.stack)
process.exit()
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment