Repository: BRIKEV/express-jsdoc-swagger
Pull request #57 (2020-06-12 16:05:11)

fix: add swagger valid status codes and default one
### What kind of change does this PR introduce? (check at least one)
 - [X] Bugfix
 - [X] Feature
 - [X] Test
 - [ ] Docs
 - [ ] Refactor
 - [ ] Build-related changes
 - [ ] Other, please describe:

### Description:

This PR includes [swagger status](https://swagger.io/docs/specification/describing-responses/) code that were missing like the range ones 1XX and default one.


Patch:
diff --git a/transforms/paths/responses.js b/transforms/paths/responses.js
index 94d76a4..66cd96e 100644
--- a/transforms/paths/responses.js
+++ b/transforms/paths/responses.js
@@ -8,7 +8,7 @@ const hasOldContent = (value, status) => (value[status] && value[status].content
 
 const formatResponses = values => values.reduce((acc, value) => {
   const [status, description, contentType] = mapDescription(value.description);
-  if (!STATUS_CODES[Number(status)]) {
+  if (!STATUS_CODES[status]) {
     // eslint-disable-next-line
     console.warn(chalk.yellow(`Status ${status} is not valid to create a response`));
     return {};
diff --git a/transforms/paths/validStatusCodes.js b/transforms/paths/validStatusCodes.js
index 6cde2b1..3ad1c12 100644
--- a/transforms/paths/validStatusCodes.js
+++ b/transforms/paths/validStatusCodes.js
@@ -54,6 +54,12 @@ const STATUS_CODES = {
   422: 'Unprocessable Entity',
   415: 'Unsupported Media Type',
   305: 'Use Proxy',
+  '1XX': '1XX Range',
+  '2XX': '2XX Range',
+  '3XX': '3XX Range',
+  '4XX': '4XX Range',
+  '5XX': '5XX Range',
+  default: 'Default response',
 };
 
 module.exports = STATUS_CODES;


Test patch:
diff --git a/test/transforms/paths/__snapshots__/validStatusCodes.test.js.snap b/test/transforms/paths/__snapshots__/validStatusCodes.test.js.snap
new file mode 100644
index 0000000..080b696
--- /dev/null
+++ b/test/transforms/paths/__snapshots__/validStatusCodes.test.js.snap
@@ -0,0 +1,66 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Valid status codes snapshot 1`] = `
+Object {
+  "100": "Continue",
+  "101": "Switching Protocols",
+  "102": "Processing",
+  "1XX": "1XX Range",
+  "200": "OK",
+  "201": "Created",
+  "202": "Accepted",
+  "203": "Non Authoritative Information",
+  "204": "No Content",
+  "205": "Reset Content",
+  "206": "Partial Content",
+  "207": "Multi-Status",
+  "2XX": "2XX Range",
+  "300": "Multiple Choices",
+  "301": "Moved Permanently",
+  "302": "Moved Temporarily",
+  "303": "See Other",
+  "304": "Not Modified",
+  "305": "Use Proxy",
+  "307": "Temporary Redirect",
+  "308": "Permanent Redirect",
+  "3XX": "3XX Range",
+  "400": "Bad Request",
+  "401": "Unauthorized",
+  "402": "Payment Required",
+  "403": "Forbidden",
+  "404": "Not Found",
+  "405": "Method Not Allowed",
+  "406": "Not Acceptable",
+  "407": "Proxy Authentication Required",
+  "408": "Request Timeout",
+  "409": "Conflict",
+  "410": "Gone",
+  "411": "Length Required",
+  "412": "Precondition Failed",
+  "413": "Request Entity Too Large",
+  "414": "Request-URI Too Long",
+  "415": "Unsupported Media Type",
+  "416": "Requested Range Not Satisfiable",
+  "417": "Expectation Failed",
+  "418": "I'm a teapot",
+  "419": "Insufficient Space on Resource",
+  "420": "Method Failure",
+  "422": "Unprocessable Entity",
+  "423": "Locked",
+  "424": "Failed Dependency",
+  "428": "Precondition Required",
+  "429": "Too Many Requests",
+  "431": "Request Header Fields Too Large",
+  "4XX": "4XX Range",
+  "500": "Server Error",
+  "501": "Not Implemented",
+  "502": "Bad Gateway",
+  "503": "Service Unavailable",
+  "504": "Gateway Timeout",
+  "505": "HTTP Version Not Supported",
+  "507": "Insufficient Storage",
+  "511": "Network Authentication Required",
+  "5XX": "5XX Range",
+  "default": "Default response",
+}
+`;
diff --git a/test/transforms/paths/responses.test.js b/test/transforms/paths/responses.test.js
index 6f78c59..b7dbb46 100644
--- a/test/transforms/paths/responses.test.js
+++ b/test/transforms/paths/responses.test.js
@@ -51,7 +51,7 @@ describe('response tests', () => {
     expect(result).toEqual(expected);
   });
 
-  it('should not jsdoc with wrong info and return warning in the console', () => {
+  it('should not parse jsdoc with wrong info and return warning in the console', () => {
     global.console = { ...global.console, warn: jest.fn() };
     const jsodInput = [`
       /**
@@ -81,6 +81,47 @@ describe('response tests', () => {
     expect(console.warn).toHaveBeenCalled();
   });
 
+  it('should parse jsdoc with wrong info and return warning in the console', () => {
+    global.console = { ...global.console, warn: jest.fn() };
+    const jsodInput = [`
+      /**
+       * GET /api/v1
+       * @summary This is the summary or description of the endpoint
+       * @return {object} default - success response - application/json
+       */
+    `];
+    const expected = {
+      paths: {
+        '/api/v1': {
+          get: {
+            deprecated: false,
+            summary: 'This is the summary or description of the endpoint',
+            parameters: [],
+            tags: [],
+            security: [],
+            responses: {
+              default: {
+                description: 'success response',
+                content: {
+                  'application/json': {
+                    schema: {
+                      type: 'object',
+                    },
+                  },
+                },
+              },
+            },
+          },
+        },
+      },
+    };
+    const parsedJSDocs = jsdocInfo()(jsodInput);
+    const result = setPaths({}, parsedJSDocs);
+    expect(result).toEqual(expected);
+    // eslint-disable-next-line
+    expect(console.warn).not.toHaveBeenCalled();
+  });
+
   it('should parse jsdoc path response with array type', () => {
     const jsodInput = [`
       /**
diff --git a/test/transforms/paths/validStatusCodes.test.js b/test/transforms/paths/validStatusCodes.test.js
new file mode 100644
index 0000000..043ff6c
--- /dev/null
+++ b/test/transforms/paths/validStatusCodes.test.js
@@ -0,0 +1,5 @@
+const validStatusCodes = require('../../../transforms/paths/validStatusCodes');
+
+test('Valid status codes snapshot', () => {
+  expect(validStatusCodes).toMatchSnapshot();
+});