From 7aed5f0085c127d3998857a7e35560c39239c570 Mon Sep 17 00:00:00 2001 From: David Diaz Date: Thu, 14 Jun 2018 19:15:52 -0600 Subject: [PATCH] Removed redundant fields from the config class. --- .../__snapshots__/utils.spec.js.snap | 19 ----- src/__tests__/__snapshots__/beau.spec.js.snap | 50 ------------ .../__snapshots__/config.spec.js.snap | 74 ----------------- src/__tests__/config.spec.js | 79 ++++++++++--------- src/config.js | 19 ++--- 5 files changed, 48 insertions(+), 193 deletions(-) diff --git a/bin/cli/__tests__/__snapshots__/utils.spec.js.snap b/bin/cli/__tests__/__snapshots__/utils.spec.js.snap index fdf0190..17860e4 100644 --- a/bin/cli/__tests__/__snapshots__/utils.spec.js.snap +++ b/bin/cli/__tests__/__snapshots__/utils.spec.js.snap @@ -45,25 +45,6 @@ Config { "HOSTS", "COOKIEJAR", ], - "defaultConfigValues": Object { - "COOKIEJAR": false, - "DEFAULTS": Object {}, - "ENDPOINT": "", - "ENVIRONMENT": Object {}, - "HOSTS": Array [], - "PLUGINS": Array [], - "VERSION": 1, - }, - "doc": Object { - "GET /anything": Object { - "alias": "anything", - "payload": Object { - "name": "$env.params.name", - }, - }, - "endpoint": "https://example.org/", - "version": 1, - }, } `; diff --git a/src/__tests__/__snapshots__/beau.spec.js.snap b/src/__tests__/__snapshots__/beau.spec.js.snap index 7e07613..2d40116 100644 --- a/src/__tests__/__snapshots__/beau.spec.js.snap +++ b/src/__tests__/__snapshots__/beau.spec.js.snap @@ -51,31 +51,6 @@ Beau { "HOSTS", "COOKIEJAR", ], - "defaultConfigValues": Object { - "COOKIEJAR": false, - "DEFAULTS": Object {}, - "ENDPOINT": "", - "ENVIRONMENT": Object {}, - "HOSTS": Array [], - "PLUGINS": Array [], - "VERSION": 1, - }, - "doc": Object { - "GET /posts/1": "get-post", - "GET /user": Object { - "alias": "user", - "headers": Object { - "hello": "world", - }, - }, - "defaults": Object { - "headers": Object { - "authentication": "hello", - }, - }, - "endpoint": "http://jsonplaceholder.typicode.com", - "version": 1, - }, }, "requests": RequestList { "REQUESTS": Array [ @@ -153,31 +128,6 @@ Beau { "HOSTS", "COOKIEJAR", ], - "defaultConfigValues": Object { - "COOKIEJAR": false, - "DEFAULTS": Object {}, - "ENDPOINT": "", - "ENVIRONMENT": Object {}, - "HOSTS": Array [], - "PLUGINS": Array [], - "VERSION": 1, - }, - "doc": Object { - "GET /posts/1": "get-post", - "GET /user": Object { - "alias": "user", - "headers": Object { - "hello": "world", - }, - }, - "defaults": Object { - "headers": Object { - "authentication": "hello", - }, - }, - "endpoint": "http://jsonplaceholder.typicode.com", - "version": 1, - }, }, "list": Array [ Request { diff --git a/src/__tests__/__snapshots__/config.spec.js.snap b/src/__tests__/__snapshots__/config.spec.js.snap index 0cf6434..744aea0 100644 --- a/src/__tests__/__snapshots__/config.spec.js.snap +++ b/src/__tests__/__snapshots__/config.spec.js.snap @@ -119,55 +119,6 @@ Config { "HOSTS", "COOKIEJAR", ], - "defaultConfigValues": Object { - "COOKIEJAR": false, - "DEFAULTS": Object {}, - "ENDPOINT": "", - "ENVIRONMENT": Object {}, - "HOSTS": Array [], - "PLUGINS": Array [], - "VERSION": 1, - }, - "doc": Object { - "GET /e1": "e1", - "defaults": Object { - "HEADERS": Object { - "hello": "mars", - }, - }, - "endpoint": "http://example.org", - "hosts": Array [ - Object { - "GET /e2": "e2", - "GET /posts": "posts", - "defaults": Object { - "HEADERS": Object { - "hello": "world", - "world": "hello", - }, - }, - "endpoint": "http://example.com", - "host": "com", - }, - Object { - "GET /e3": "e3", - "GET /posts": "posts", - "defaults": Object { - "HEADERS": Object { - "hello": "world", - "world": "bye", - }, - }, - "endpoint": "http://example.net", - "host": "net", - }, - Object { - "GET /posts": "posts", - "endpoint": "http://example.info", - "host": "info", - }, - ], - }, } `; @@ -221,30 +172,5 @@ Config { "HOSTS", "COOKIEJAR", ], - "defaultConfigValues": Object { - "COOKIEJAR": false, - "DEFAULTS": Object {}, - "ENDPOINT": "", - "ENVIRONMENT": Object {}, - "HOSTS": Array [], - "PLUGINS": Array [], - "VERSION": 1, - }, - "doc": Object { - "GET /posts/1": "get-post", - "GET /user": Object { - "alias": "user", - "headers": Object { - "hello": "world", - }, - }, - "defaults": Object { - "HEADERS": Object { - "authentication": "hello", - }, - }, - "endpoint": "http://jsonplaceholder.typicode.com", - "version": 1, - }, } `; diff --git a/src/__tests__/config.spec.js b/src/__tests__/config.spec.js index bde9f49..915dd34 100644 --- a/src/__tests__/config.spec.js +++ b/src/__tests__/config.spec.js @@ -5,21 +5,21 @@ const requireg = require('requireg'); requireg.resolving = false; describe('Config', () => { - it('should load valid config keys', () => { - const doc = yaml.safeLoad(` + it('should load valid config keys', () => { + const doc = yaml.safeLoad(` version: 1 endpoint: http://martianwabbit.com shouldntBeAdded: true `); - const config = new Config(doc); - expect(config.ENDPOINT).toBe(doc.endpoint); - expect(config.VERSION).toBe(doc.version); - expect(config.shouldntBeAdded).toBeUndefined(); - }); + const config = new Config(doc); + expect(config.ENDPOINT).toBe(doc.endpoint); + expect(config.VERSION).toBe(doc.version); + expect(config.shouldntBeAdded).toBeUndefined(); + }); - it('should load requests', () => { - const doc = yaml.safeLoad(` + it('should load requests', () => { + const doc = yaml.safeLoad(` endpoint: http://example.com GET /profile: get-profile @@ -31,12 +31,12 @@ describe('Config', () => { hello: world `); - const config = new Config(doc); - expect(Object.keys(config.REQUESTS).length).toBe(4); - }); + const config = new Config(doc); + expect(Object.keys(config.REQUESTS).length).toBe(4); + }); - it('should set up defaults for all requests', () => { - const doc = yaml.safeLoad(` + it('should set up defaults for all requests', () => { + const doc = yaml.safeLoad(` version: 1 endpoint: 'http://jsonplaceholder.typicode.com' @@ -51,16 +51,17 @@ describe('Config', () => { hello: world `); - const config = new Config(doc); + const config = new Config(doc); - expect(config).toMatchSnapshot(); - Object.values(config.REQUESTS).forEach(r => { - expect(r.HEADERS.authentication).toMatch('hello'); + expect(config).toMatchSnapshot(); + Object.values(config.REQUESTS).forEach(r => { + expect(r.HEADERS.authentication).toMatch('hello'); + }); }); - }); - it('should load multiple hosts', () => { - const doc = yaml.safeLoad(` + it('should load multiple hosts', () => { + const doc = yaml.safeLoad(` + version: 1 endpoint: http://example.org defaults: @@ -98,13 +99,13 @@ describe('Config', () => { GET /posts: posts `); - let config = new Config(doc); + let config = new Config(doc); - expect(config).toMatchSnapshot(); - }); + expect(config).toMatchSnapshot(); + }); - it('should namespace all aliases within an host', () => { - const doc = yaml.safeLoad(` + it('should namespace all aliases within an host', () => { + const doc = yaml.safeLoad(` hosts: - host: test1 endpoint: http://example.com @@ -114,14 +115,14 @@ describe('Config', () => { GET /posts: posts `); - let config = new Config(doc); + let config = new Config(doc); - expect(config.REQUESTS[0].ALIAS).toBe('test1:posts'); - expect(config.REQUESTS[1].ALIAS).toBe('test2:posts'); - }); + expect(config.REQUESTS[0].ALIAS).toBe('test1:posts'); + expect(config.REQUESTS[1].ALIAS).toBe('test2:posts'); + }); - it(`should throw if host doesn't have a host key`, () => { - const doc = yaml.safeLoad(` + it(`should throw if host doesn't have a host key`, () => { + const doc = yaml.safeLoad(` hosts: - endpoint: http://example.com GET /posts: posts @@ -131,11 +132,11 @@ describe('Config', () => { GET /posts: posts `); - expect(() => new Config(doc)).toThrow(); - }); + expect(() => new Config(doc)).toThrow(); + }); - it(`should merge host settings with global settings`, () => { - const doc = yaml.safeLoad(` + it(`should merge host settings with global settings`, () => { + const doc = yaml.safeLoad(` defaults: headers: hello: 1 @@ -153,7 +154,7 @@ describe('Config', () => { GET /posts: posts `); - let config = new Config(doc); - expect(config.REQUESTS[0].HEADERS.hello).toBe(1); - }); + let config = new Config(doc); + expect(config.REQUESTS[0].HEADERS.hello).toBe(1); + }); }); diff --git a/src/config.js b/src/config.js index 9beaaa5..5f93cd0 100644 --- a/src/config.js +++ b/src/config.js @@ -1,11 +1,12 @@ const deepMerge = require('deepmerge'); const { requestRegex, UpperCaseKeys } = require('./shared'); const Plugins = require('./plugins'); +const version = parseInt(require('../package.json').version, 10); class Config { constructor(doc, env = {}) { - this.defaultConfigValues = { - VERSION: 1, + const defaultConfigValues = { + VERSION: version, ENDPOINT: '', PLUGINS: [], DEFAULTS: {}, @@ -14,11 +15,10 @@ class Config { COOKIEJAR: false }; - this.configKeys = Object.keys(this.defaultConfigValues); - this.doc = doc; + this.configKeys = Object.keys(defaultConfigValues); let config = this.loadConfig(doc); - Object.assign(this, this.defaultConfigValues, config); + Object.assign(this, defaultConfigValues, config); this.ENVIRONMENT = deepMerge(this.ENVIRONMENT, env); @@ -29,21 +29,18 @@ class Config { ENDPOINT: this.ENDPOINT }); - this.loadHosts(this.HOSTS, config); + this.loadHosts(this.HOSTS, config, defaultConfigValues); this.PLUGINS = new Plugins(this.PLUGINS); } - loadHosts(hosts, rootConfig) { + loadHosts(hosts, rootConfig, defaultConfigValues) { hosts.forEach(host => { if (typeof host.host === 'undefined') { throw new Error(`Host doesn't indicate it's host name.`); } - let config = deepMerge( - this.defaultConfigValues, - this.loadConfig(host) - ); + let config = deepMerge(defaultConfigValues, this.loadConfig(host)); config.DEFAULTS = deepMerge(rootConfig.DEFAULTS, config.DEFAULTS);