hippie-swagger icon indicating copy to clipboard operation
hippie-swagger copied to clipboard

(Nice-to-have) - Read dereferenced Swagger from file

Open rob4629 opened this issue 5 years ago • 0 comments

I'd like to have a central (common) instance of the hippieSwaggerApp() function, to make it cleaner for each of my tests to call it. As a workaround, within each Test Suite, I've duplicated the function:

import hippie from "hippie-swagger";
import { username, password } from "common/resources/httpAuth.json";

describe("Test Swagger examples for Foo", () => {
  let dereferencedSwagger;

  function myApp() {
    return hippie(dereferencedSwagger).base(baseUrl).auth(username, password).json();
  }

  before(async () => {
    dereferencedSwagger = await parseSwaggerDoc(mySwaggerDoc);
  });

  context("<Foo>", () => {
    it("Returns 200, when sending a valid request", async () => {
      await myApp()
        .header("Auth-Type", "auth")
        .header("Auth-Token", authToken)
        .get(`my/route/{id}`)
        .pathParams({
          id: my.id,
        })
        .expectStatus(200)
        .end();
    });

However, it would be really nice to have a setup script which parses the Swagger Doc (as we have multiple APIs), and writes the dereferenced contents to a temp file. Allowing for:

// common/path/commonHippieApp.js 
import hippie from "hippie-swagger";
import { username, password } from "common/resources/httpAuth.json";

export const commonHippieApp = (pathToSwaggerDoc, baseUrl) => {
  return hippie(pathToSwaggerDoc).base(baseUrl).auth(username, password).json();
}
// service/path/myHippieApp.js 
import commonHippieApp from "common/path/commonHippieApp";

const swaggerPath = "path/to/dereferencedSwagger.json"

export const myHippieApp = () => {
  return commonHippieApp(swaggerPath, "http://some.base/uri");
}
// tests.spec.js
import myHippieApp from "service/path/myHippieApp";

describe("Test Swagger examples for Foo", () => {
  context("<Foo>", () => {
    it("Returns 200, when sending a valid request", async () => {
      await myHippieApp()
        .header("Auth-Type", "auth")
        .header("Auth-Token", authToken)
        .get(`my/route/{id}`)
        .pathParams({
          id: my.id,
        })
        .expectStatus(200)
        .end();
    });

rob4629 avatar Sep 01 '20 21:09 rob4629