From d89f3c2649357f310cb821657d083be0938797a4 Mon Sep 17 00:00:00 2001 From: "Matthew J. Martin" Date: Sun, 26 Jul 2020 16:40:27 +0700 Subject: [PATCH] fix issue 35 honor common_headers if specified from JS --- lib/suite.js | 18 ++++++++++-------- test/cli/src/modules/suite_configuration.js | 6 +++++- .../src/suites/suite.relative.paths.suite.yml | 19 +++++++++++++++---- test/cli/suite.relative.paths.spec.js | 6 +++--- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/lib/suite.js b/lib/suite.js index bb9be87..d2aa9e3 100644 --- a/lib/suite.js +++ b/lib/suite.js @@ -5,7 +5,7 @@ import path from 'path'; import EventEmitter from 'events'; import { loadYAML } from './schema/yaml/loader'; import { validateJSONSchema } from './schema/validator'; -import { assertFileValidity, +import { assertFileValidity, loadModule, runModuleFunction, runInlineFunction } from './utils'; @@ -97,7 +97,7 @@ export default class Suite extends EventEmitter { if (!suiteFlag) { throw new DisabledSuiteError(`Suite '${this.file}' is disabled, skipping the suite`); } - + if (data.meta.locate_files_relative === true) { this.areFilesRelativeToSuite = true; } @@ -183,7 +183,8 @@ export default class Suite extends EventEmitter { port: suiteConfigData.port, scheme: suiteConfigData.scheme, base_path: suiteConfigData.base_path, - read_timeout: suiteConfigData.read_timeout + read_timeout: suiteConfigData.read_timeout, + common_headers: suiteConfigData.common_headers, }; const configContext = {}; @@ -214,6 +215,7 @@ export default class Suite extends EventEmitter { this.port = configuration.port; this.base_path = configuration.base_path || ''; this.read_timeout = configuration.read_timeout || 60000; + suiteConfigData.common_headers = configuration.common_headers || []; } else { this.scheme = suiteConfigData.scheme; this.host = suiteConfigData.host; @@ -419,7 +421,7 @@ export default class Suite extends EventEmitter { let inlineResult = await runInlineFunction(inlineFunction); loopItems = inlineResult; } else if (loopData.dynamic.run_type === 'module') { - let modulePath = this.resolveFile(loopData.dynamic.module.module_path); + let modulePath = this.resolveFile(loopData.dynamic.module.module_path); const module = assertFileValidity(modulePath, 'Loop data module'); const customModule = loadModule(module); @@ -446,7 +448,7 @@ export default class Suite extends EventEmitter { return loopItems; } - /* + /* options can include host, port, scheme, path_params, query_params, headers, read_timeout, in case of body requirements ( body, form_data, form) validateResponse option will enable/disable response validation @@ -476,7 +478,7 @@ export default class Suite extends EventEmitter { } let opts; - + if (dependencyFromSuite) { opts = Object.assign({outerDependency: true, outerDependencySuite: dependencyFromSuite}, options); } else { @@ -507,7 +509,7 @@ export default class Suite extends EventEmitter { } } else if (data.run_type === 'module') { if (data.module) { - let modulePath = this.resolveFile(data.module.module_path); + let modulePath = this.resolveFile(data.module.module_path); const module = assertFileValidity(modulePath, 'Suite ${type} hook module'); const customModule = loadModule(module); await runModuleFunction(customModule, data.module.function_name, _context); @@ -549,4 +551,4 @@ export default class Suite extends EventEmitter { } -} \ No newline at end of file +} diff --git a/test/cli/src/modules/suite_configuration.js b/test/cli/src/modules/suite_configuration.js index 842d163..b026ad5 100644 --- a/test/cli/src/modules/suite_configuration.js +++ b/test/cli/src/modules/suite_configuration.js @@ -1,8 +1,12 @@ function syncSuiteConfig() { this.scheme = 'http'; this.port = 3027; + this.common_headers = [{ + name: 'content-type', + value: 'application/json' + }]; } module.exports = { syncSuiteConfig: syncSuiteConfig -}; \ No newline at end of file +}; diff --git a/test/cli/src/suites/suite.relative.paths.suite.yml b/test/cli/src/suites/suite.relative.paths.suite.yml index 39d6652..f2960f9 100644 --- a/test/cli/src/suites/suite.relative.paths.suite.yml +++ b/test/cli/src/suites/suite.relative.paths.suite.yml @@ -1,6 +1,6 @@ meta: name: File searching with relative paths - locate_files_relative: true + locate_files_relative: true configuration: host: 127.0.0.1 custom_configuration: @@ -50,7 +50,7 @@ specs: status_code: 200 json_data: - path: $.request_content_size - value: 12371 + value: 12371 - name: post non existent binary data (file) as body - should fail request: @@ -91,7 +91,7 @@ specs: json_data: - path: $ value: - param1: value2 + param1: value2 - name: read json schema from file and validate response request: path: /echoJSONBodyResponse @@ -107,4 +107,15 @@ specs: response: json_schema: type: file - $ref: ./../static/schema/simple_valid.json \ No newline at end of file + $ref: ./../static/schema/simple_valid.json + - name: respect suite-level common_headers from module + request: + path: /echoJSONBodyResponse + method: post + payload: + body: + type: json + content: + key: value + response: + status_code: 200 diff --git a/test/cli/suite.relative.paths.spec.js b/test/cli/suite.relative.paths.spec.js index dd0079d..e5b9a73 100644 --- a/test/cli/suite.relative.paths.spec.js +++ b/test/cli/suite.relative.paths.spec.js @@ -18,7 +18,7 @@ describe('Suite with relative paths', function () { expect(reportData.passedSuitesCount).to.equal(0); expect(reportData.skippedSuitesCount).to.equal(0); expect(reportData.failedSuitesCount).to.equal(1); - expect(reportData.passedTestsCount).to.equal(4); + expect(reportData.passedTestsCount).to.equal(5); expect(reportData.skippedTestsCount).to.equal(0); expect(reportData.failedTestsCount).to.equal(2); expect(reportData.suites.length).to.equal(1); @@ -68,6 +68,6 @@ describe('Suite with relative paths', function () { let test = result.tests.find(t => t.name === this.test.title); expect(test.status).to.equal('pass'); expect(test.error).to.be.a('null'); - }); + }); -}); \ No newline at end of file +});