Skip to content

Commit

Permalink
prompt tests complete
Browse files Browse the repository at this point in the history
  • Loading branch information
gratcliff committed Jul 8, 2019
1 parent 332c9a4 commit 88d3f8c
Show file tree
Hide file tree
Showing 6 changed files with 143 additions and 125 deletions.
156 changes: 76 additions & 80 deletions lib/prompts.js
Original file line number Diff line number Diff line change
@@ -1,86 +1,82 @@
const { prompt } = require('enquirer');

exports.generatePrompts = (versionList) =>
[
{
type: 'select',
name: 'option',
message:
"We couldn't find a version in ReadMe matching the version in your OAS file. Would you like to use an existing version or create a new one?",
choices: [
{ message: 'Use existing', value: 'update' },
{ message: 'Create a new version', value: 'create' },
],
},
{
type: 'select',
name: 'versionSelection',
message: 'Select your desired version',
skip() {
return this.enquirer.answers.option !== 'update';
},
choices: versionList.map(v => {
return {
message: v.version,
// eslint-disable-next-line
value: v.version,
};
}),
exports.generatePrompts = versionList => [
{
type: 'select',
name: 'option',
message:
"We couldn't find a version in ReadMe matching the version in your OAS file. Would you like to use an existing version or create a new one?",
choices: [
{ message: 'Use existing', value: 'update' },
{ message: 'Create a new version', value: 'create' },
],
},
{
type: 'select',
name: 'versionSelection',
message: 'Select your desired version',
skip() {
return this.enquirer.answers.option !== 'update';
},
];
choices: versionList.map(v => {
return {
message: v.version,
// eslint-disable-next-line
value: v.version,
};
}),
},
];

exports.createVersionPrompt = async (versionList, opts, isUpdate) =>
prompt([
{
type: 'select',
name: 'from',
message: 'Which version would you like to fork from?',
skip() {
return opts.fork || isUpdate;
},
choices: versionList.map(v => {
return {
message: v.version,
// eslint-disable-next-line
value: v.version,
};
}),
},
{
type: 'input',
name: 'newVersion',
message: "What's your new version?",
skip() {
return opts.newVersion || !isUpdate;
},
hint: '1.0.0',
},
{
type: 'confirm',
name: 'is_stable',
message: 'Would you like to make this version the main version for this project?',
skip: () => opts.main,
exports.createVersionPrompt = (versionList, opts, isUpdate) => [
{
type: 'select',
name: 'from',
message: 'Which version would you like to fork from?',
skip() {
return opts.fork || isUpdate;
},
{
type: 'confirm',
name: 'is_beta',
message: 'Should this version be in beta?',
skip: () => opts.beta,
choices: versionList.map(v => {
return {
message: v.version,
// eslint-disable-next-line
value: v.version,
};
}),
},
{
type: 'input',
name: 'newVersion',
message: "What's your new version?",
skip() {
return opts.newVersion || !isUpdate;
},
{
type: 'confirm',
name: 'is_hidden',
message: 'Would you like to make this version public?',
skip() {
return opts.isPublic || opts.main || this.enquirer.answers.is_stable;
},
hint: '1.0.0',
},
{
type: 'confirm',
name: 'is_stable',
message: 'Would you like to make this version the main version for this project?',
skip: () => opts.main,
},
{
type: 'confirm',
name: 'is_beta',
message: 'Should this version be in beta?',
skip: () => opts.beta,
},
{
type: 'confirm',
name: 'is_hidden',
message: 'Would you like to make this version public?',
skip() {
return opts.isPublic || opts.main || this.enquirer.answers.is_stable;
},
{
type: 'confirm',
name: 'is_deprecated',
message: 'Would you like to deprecate this version?',
skip() {
return opts.deprecated || opts.main || !isUpdate || this.enquirer.answers.is_stable;
},
},
{
type: 'confirm',
name: 'is_deprecated',
message: 'Would you like to deprecate this version?',
skip() {
return opts.deprecated || opts.main || !isUpdate || this.enquirer.answers.is_stable;
},
]);
},
];
3 changes: 2 additions & 1 deletion lib/swagger.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const request = require('request-promise-native');
const fs = require('fs');
const path = require('path');
const config = require('config');
const { prompt } = require('enquirer');
const promptOpts = require('./prompts');

exports.desc = 'Upload your swagger file to ReadMe';
Expand Down Expand Up @@ -96,7 +97,7 @@ exports.run = async function({ args, opts }) {
const versionList = await request.get(`${config.host}/api/v1/version`, options);
options.json.from = versionList[0].version;

const promptResponse = await promptOpts.generatePrompts(versionList);
const promptResponse = await prompt(promptOpts.generatePrompts(versionList));
const { option, versionSelection } = promptResponse;

if (option === 'update') return versionSelection;
Expand Down
3 changes: 2 additions & 1 deletion lib/versions/create.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const request = require('request-promise-native');
const config = require('config');
const { prompt } = require('enquirer');
const promptOpts = require('../prompts');

exports.desc = 'Create a new version for your project';
Expand Down Expand Up @@ -38,7 +39,7 @@ exports.run = async function({ opts }) {
.catch(err => Promise.reject(new Error(err)));
}

const promptResponse = await promptOpts.createVersionPrompt(versionList, opts);
const promptResponse = await prompt(promptOpts.createVersionPrompt(versionList, opts));
const options = {
json: {
version,
Expand Down
3 changes: 2 additions & 1 deletion lib/versions/update.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const request = require('request-promise-native');
const config = require('config');
const { prompt } = require('enquirer');
const promptOpts = require('../prompts');

exports.desc = 'Update an existing version for your project';
Expand Down Expand Up @@ -38,7 +39,7 @@ exports.run = async function({ opts }) {
.catch(err => Promise.reject(new Error(err)));
}

const promptResponse = await promptOpts.createVersionPrompt(versionList, opts, true);
const promptResponse = await prompt(promptOpts.createVersionPrompt(versionList, opts, true));
const options = {
json: {
codename: codename || '',
Expand Down
1 change: 1 addition & 0 deletions swagger.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"swagger":"2.0","info":{"description":"This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.","version":"1.0.0","title":"Swagger Petstore","termsOfService":"http://swagger.io/terms/","contact":{"email":"[email protected]"},"license":{"name":"Apache 2.0","url":"http://www.apache.org/licenses/LICENSE-2.0.html"}},"host":"petstore.swagger.io","basePath":"/v2","tags":[{"name":"pet","description":"Everything about your Pets","externalDocs":{"description":"Find out more","url":"http://swagger.io"}},{"name":"store","description":"Access to Petstore orders"},{"name":"user","description":"Operations about user","externalDocs":{"description":"Find out more about our store","url":"http://swagger.io"}}],"schemes":["http"],"paths":{"/pet":{"post":{"tags":["pet"],"summary":"Add a new pet to the store","description":"","operationId":"addPet","consumes":["application/json","application/xml"],"produces":["application/xml","application/json"],"parameters":[{"in":"body","name":"body","description":"Pet object that needs to be added to the store","required":true,"schema":{"$ref":"#/definitions/Pet"}}],"responses":{"405":{"description":"Invalid input"}},"security":[{"petstore_auth":["write:pets","read:pets"]}]},"put":{"tags":["pet"],"summary":"Update an existing pet","description":"","operationId":"updatePet","consumes":["application/json","application/xml"],"produces":["application/xml","application/json"],"parameters":[{"in":"body","name":"body","description":"Pet object that needs to be added to the store","required":true,"schema":{"$ref":"#/definitions/Pet"}}],"responses":{"400":{"description":"Invalid ID supplied"},"404":{"description":"Pet not found"},"405":{"description":"Validation exception"}},"security":[{"petstore_auth":["write:pets","read:pets"]}]}},"/pet/findByStatus":{"get":{"tags":["pet"],"summary":"Finds Pets by status","description":"Multiple status values can be provided with comma separated strings","operationId":"findPetsByStatus","produces":["application/xml","application/json"],"parameters":[{"name":"status","in":"query","description":"Status values that need to be considered for filter","required":true,"type":"array","items":{"type":"string","enum":["available","pending","sold"],"default":"available"},"collectionFormat":"multi"}],"responses":{"200":{"description":"successful operation","schema":{"type":"array","items":{"$ref":"#/definitions/Pet"}}},"400":{"description":"Invalid status value"}},"security":[{"petstore_auth":["write:pets","read:pets"]}]}},"/pet/findByTags":{"get":{"tags":["pet"],"summary":"Finds Pets by tags","description":"Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.","operationId":"findPetsByTags","produces":["application/xml","application/json"],"parameters":[{"name":"tags","in":"query","description":"Tags to filter by","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"successful operation","schema":{"type":"array","items":{"$ref":"#/definitions/Pet"}}},"400":{"description":"Invalid tag value"}},"security":[{"petstore_auth":["write:pets","read:pets"]}],"deprecated":true}},"/pet/{petId}":{"get":{"tags":["pet"],"summary":"Find pet by ID","description":"Returns a single pet","operationId":"getPetById","produces":["application/xml","application/json"],"parameters":[{"name":"petId","in":"path","description":"ID of pet to return","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Pet"}},"400":{"description":"Invalid ID supplied"},"404":{"description":"Pet not found"}},"security":[{"api_key":[]}]},"post":{"tags":["pet"],"summary":"Updates a pet in the store with form data","description":"","operationId":"updatePetWithForm","consumes":["application/x-www-form-urlencoded"],"produces":["application/xml","application/json"],"parameters":[{"name":"petId","in":"path","description":"ID of pet that needs to be updated","required":true,"type":"integer","format":"int64"},{"name":"name","in":"formData","description":"Updated name of the pet","required":false,"type":"string"},{"name":"status","in":"formData","description":"Updated status of the pet","required":false,"type":"string"}],"responses":{"405":{"description":"Invalid input"}},"security":[{"petstore_auth":["write:pets","read:pets"]}]},"delete":{"tags":["pet"],"summary":"Deletes a pet","description":"","operationId":"deletePet","produces":["application/xml","application/json"],"parameters":[{"name":"api_key","in":"header","required":false,"type":"string"},{"name":"petId","in":"path","description":"Pet id to delete","required":true,"type":"integer","format":"int64"}],"responses":{"400":{"description":"Invalid ID supplied"},"404":{"description":"Pet not found"}},"security":[{"petstore_auth":["write:pets","read:pets"]}]}},"/pet/{petId}/uploadImage":{"post":{"tags":["pet"],"summary":"uploads an image","description":"","operationId":"uploadFile","consumes":["multipart/form-data"],"produces":["application/json"],"parameters":[{"name":"petId","in":"path","description":"ID of pet to update","required":true,"type":"integer","format":"int64"},{"name":"additionalMetadata","in":"formData","description":"Additional data to pass to server","required":false,"type":"string"},{"name":"file","in":"formData","description":"file to upload","required":false,"type":"file"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/ApiResponse"}}},"security":[{"petstore_auth":["write:pets","read:pets"]}]}},"/store/inventory":{"get":{"tags":["store"],"summary":"Returns pet inventories by status","description":"Returns a map of status codes to quantities","operationId":"getInventory","produces":["application/json"],"parameters":[],"responses":{"200":{"description":"successful operation","schema":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}}}},"security":[{"api_key":[]}]}},"/store/order":{"post":{"tags":["store"],"summary":"Place an order for a pet","description":"","operationId":"placeOrder","produces":["application/xml","application/json"],"parameters":[{"in":"body","name":"body","description":"order placed for purchasing the pet","required":true,"schema":{"$ref":"#/definitions/Order"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Order"}},"400":{"description":"Invalid Order"}}}},"/store/order/{orderId}":{"get":{"tags":["store"],"summary":"Find purchase order by ID","description":"For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions","operationId":"getOrderById","produces":["application/xml","application/json"],"parameters":[{"name":"orderId","in":"path","description":"ID of pet that needs to be fetched","required":true,"type":"integer","maximum":10.0,"minimum":1.0,"format":"int64"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Order"}},"400":{"description":"Invalid ID supplied"},"404":{"description":"Order not found"}}},"delete":{"tags":["store"],"summary":"Delete purchase order by ID","description":"For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors","operationId":"deleteOrder","produces":["application/xml","application/json"],"parameters":[{"name":"orderId","in":"path","description":"ID of the order that needs to be deleted","required":true,"type":"integer","minimum":1.0,"format":"int64"}],"responses":{"400":{"description":"Invalid ID supplied"},"404":{"description":"Order not found"}}}},"/user":{"post":{"tags":["user"],"summary":"Create user","description":"This can only be done by the logged in user.","operationId":"createUser","produces":["application/xml","application/json"],"parameters":[{"in":"body","name":"body","description":"Created user object","required":true,"schema":{"$ref":"#/definitions/User"}}],"responses":{"default":{"description":"successful operation"}}}},"/user/createWithArray":{"post":{"tags":["user"],"summary":"Creates list of users with given input array","description":"","operationId":"createUsersWithArrayInput","produces":["application/xml","application/json"],"parameters":[{"in":"body","name":"body","description":"List of user object","required":true,"schema":{"type":"array","items":{"$ref":"#/definitions/User"}}}],"responses":{"default":{"description":"successful operation"}}}},"/user/createWithList":{"post":{"tags":["user"],"summary":"Creates list of users with given input array","description":"","operationId":"createUsersWithListInput","produces":["application/xml","application/json"],"parameters":[{"in":"body","name":"body","description":"List of user object","required":true,"schema":{"type":"array","items":{"$ref":"#/definitions/User"}}}],"responses":{"default":{"description":"successful operation"}}}},"/user/login":{"get":{"tags":["user"],"summary":"Logs user into the system","description":"","operationId":"loginUser","produces":["application/xml","application/json"],"parameters":[{"name":"username","in":"query","description":"The user name for login","required":true,"type":"string"},{"name":"password","in":"query","description":"The password for login in clear text","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"type":"string"},"headers":{"X-Rate-Limit":{"type":"integer","format":"int32","description":"calls per hour allowed by the user"},"X-Expires-After":{"type":"string","format":"date-time","description":"date in UTC when token expires"}}},"400":{"description":"Invalid username/password supplied"}}}},"/user/logout":{"get":{"tags":["user"],"summary":"Logs out current logged in user session","description":"","operationId":"logoutUser","produces":["application/xml","application/json"],"parameters":[],"responses":{"default":{"description":"successful operation"}}}},"/user/{username}":{"get":{"tags":["user"],"summary":"Get user by user name","description":"","operationId":"getUserByName","produces":["application/xml","application/json"],"parameters":[{"name":"username","in":"path","description":"The name that needs to be fetched. Use user1 for testing. ","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/User"}},"400":{"description":"Invalid username supplied"},"404":{"description":"User not found"}}},"put":{"tags":["user"],"summary":"Updated user","description":"This can only be done by the logged in user.","operationId":"updateUser","produces":["application/xml","application/json"],"parameters":[{"name":"username","in":"path","description":"name that need to be updated","required":true,"type":"string"},{"in":"body","name":"body","description":"Updated user object","required":true,"schema":{"$ref":"#/definitions/User"}}],"responses":{"400":{"description":"Invalid user supplied"},"404":{"description":"User not found"}}},"delete":{"tags":["user"],"summary":"Delete user","description":"This can only be done by the logged in user.","operationId":"deleteUser","produces":["application/xml","application/json"],"parameters":[{"name":"username","in":"path","description":"The name that needs to be deleted","required":true,"type":"string"}],"responses":{"400":{"description":"Invalid username supplied"},"404":{"description":"User not found"}}}}},"securityDefinitions":{"petstore_auth":{"type":"oauth2","authorizationUrl":"http://petstore.swagger.io/oauth/dialog","flow":"implicit","scopes":{"write:pets":"modify pets in your account","read:pets":"read your pets"}},"api_key":{"type":"apiKey","name":"api_key","in":"header"}},"definitions":{"Order":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"petId":{"type":"integer","format":"int64"},"quantity":{"type":"integer","format":"int32"},"shipDate":{"type":"string","format":"date-time"},"status":{"type":"string","description":"Order Status","enum":["placed","approved","delivered"]},"complete":{"type":"boolean","default":false}},"xml":{"name":"Order"}},"Category":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"}},"xml":{"name":"Category"}},"User":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"username":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string"},"password":{"type":"string"},"phone":{"type":"string"},"userStatus":{"type":"integer","format":"int32","description":"User Status"}},"xml":{"name":"User"}},"Tag":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"}},"xml":{"name":"Tag"}},"Pet":{"type":"object","required":["name","photoUrls"],"properties":{"id":{"type":"integer","format":"int64"},"category":{"$ref":"#/definitions/Category"},"name":{"type":"string","example":"doggie"},"photoUrls":{"type":"array","xml":{"name":"photoUrl","wrapped":true},"items":{"type":"string"}},"tags":{"type":"array","xml":{"name":"tag","wrapped":true},"items":{"$ref":"#/definitions/Tag"}},"status":{"type":"string","description":"pet status in the store","enum":["available","pending","sold"]}},"xml":{"name":"Pet"}},"ApiResponse":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"type":{"type":"string"},"message":{"type":"string"}}}},"externalDocs":{"description":"Find out more about Swagger","url":"http://swagger.io"}}
Loading

0 comments on commit 88d3f8c

Please sign in to comment.