feat: added support for passing env.json file to test cmd (#2373)
This commit is contained in:
@@ -8,7 +8,7 @@ describe("Test 'hopp test <file>' command:", () => {
|
||||
const { stdout } = await execAsync(cmd);
|
||||
const out = getErrorCode(stdout);
|
||||
|
||||
expect(out).toBe<HoppErrorCode>("NO_FILE_PATH");
|
||||
expect(out).toBe<HoppErrorCode>("INVALID_ARGUMENT");
|
||||
});
|
||||
|
||||
test("Collection file not found.", async () => {
|
||||
@@ -42,7 +42,7 @@ describe("Test 'hopp test <file>' command:", () => {
|
||||
const { stdout } = await execAsync(cmd);
|
||||
const out = getErrorCode(stdout);
|
||||
|
||||
expect(out).toBe<HoppErrorCode>("FILE_NOT_JSON");
|
||||
expect(out).toBe<HoppErrorCode>("INVALID_FILE_TYPE");
|
||||
});
|
||||
|
||||
test("Some errors occured (exit code 1).", async () => {
|
||||
@@ -62,3 +62,42 @@ describe("Test 'hopp test <file>' command:", () => {
|
||||
expect(error).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe("Test 'hopp test <file> --env <file>' command:", () => {
|
||||
const VALID_TEST_CMD = `node ./bin/hopp test ${getTestJsonFilePath(
|
||||
"passes.json"
|
||||
)}`;
|
||||
|
||||
test("No env file path provided.", async () => {
|
||||
const cmd = `${VALID_TEST_CMD} --env`;
|
||||
const { stdout } = await execAsync(cmd);
|
||||
const out = getErrorCode(stdout);
|
||||
|
||||
expect(out).toBe<HoppErrorCode>("INVALID_ARGUMENT");
|
||||
});
|
||||
|
||||
test("ENV file not JSON type.", async () => {
|
||||
const cmd = `${VALID_TEST_CMD} --env ${getTestJsonFilePath("notjson.txt")}`;
|
||||
const { stdout } = await execAsync(cmd);
|
||||
const out = getErrorCode(stdout);
|
||||
|
||||
expect(out).toBe<HoppErrorCode>("INVALID_FILE_TYPE");
|
||||
});
|
||||
|
||||
test("ENV file not found.", async () => {
|
||||
const cmd = `${VALID_TEST_CMD} --env notfound.json`;
|
||||
const { stdout } = await execAsync(cmd);
|
||||
const out = getErrorCode(stdout);
|
||||
|
||||
expect(out).toBe<HoppErrorCode>("FILE_NOT_FOUND");
|
||||
});
|
||||
|
||||
// test("No errors occured (exit code 0).", async () => {
|
||||
// const TESTS_PATH = getTestJsonFilePath("env-flag-tests.json");
|
||||
// const ENV_PATH = getTestJsonFilePath("env-flag-envs.json");
|
||||
// const cmd = `node ./bin/hopp test ${TESTS_PATH} --env ${ENV_PATH}`;
|
||||
// const { error } = await execAsync(cmd);
|
||||
|
||||
// expect(error).toBeNull();
|
||||
// });
|
||||
});
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import { HoppCLIError } from "../../../types/errors";
|
||||
import { checkFilePath } from "../../../utils/checks";
|
||||
import { checkFile } from "../../../utils/checks";
|
||||
|
||||
describe("checkFilePath", () => {
|
||||
import "@relmify/jest-fp-ts";
|
||||
|
||||
describe("checkFile", () => {
|
||||
test("File doesn't exists.", () => {
|
||||
return expect(
|
||||
checkFilePath("./src/samples/this-file-not-exists.json")()
|
||||
checkFile("./src/samples/this-file-not-exists.json")()
|
||||
).resolves.toSubsetEqualLeft(<HoppCLIError>{
|
||||
code: "FILE_NOT_FOUND",
|
||||
});
|
||||
@@ -12,15 +14,15 @@ describe("checkFilePath", () => {
|
||||
|
||||
test("File not of JSON type.", () => {
|
||||
return expect(
|
||||
checkFilePath("./src/__tests__/samples/notjson.txt")()
|
||||
checkFile("./src/__tests__/samples/notjson.txt")()
|
||||
).resolves.toSubsetEqualLeft(<HoppCLIError>{
|
||||
code: "FILE_NOT_JSON",
|
||||
code: "INVALID_FILE_TYPE",
|
||||
});
|
||||
});
|
||||
|
||||
test("Existing JSON file.", () => {
|
||||
return expect(
|
||||
checkFilePath("./src/__tests__/samples/passes.json")()
|
||||
checkFile("./src/__tests__/samples/passes.json")()
|
||||
).resolves.toBeRight();
|
||||
});
|
||||
});
|
||||
@@ -37,6 +37,8 @@ const SAMPLE_RESOLVED_RESPONSE = <AxiosResponse>{
|
||||
headers: [],
|
||||
};
|
||||
|
||||
const SAMPLE_ENVS = { global: [], selected: [] };
|
||||
|
||||
describe("collectionsRunner", () => {
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
@@ -47,19 +49,24 @@ describe("collectionsRunner", () => {
|
||||
});
|
||||
|
||||
test("Empty HoppCollection.", () => {
|
||||
return expect(collectionsRunner([])()).resolves.toStrictEqual([]);
|
||||
return expect(
|
||||
collectionsRunner({ collections: [], envs: SAMPLE_ENVS })()
|
||||
).resolves.toStrictEqual([]);
|
||||
});
|
||||
|
||||
test("Empty requests and folders in collection.", () => {
|
||||
return expect(
|
||||
collectionsRunner([
|
||||
{
|
||||
v: 1,
|
||||
name: "name",
|
||||
folders: [],
|
||||
requests: [],
|
||||
},
|
||||
])()
|
||||
collectionsRunner({
|
||||
collections: [
|
||||
{
|
||||
v: 1,
|
||||
name: "name",
|
||||
folders: [],
|
||||
requests: [],
|
||||
},
|
||||
],
|
||||
envs: SAMPLE_ENVS,
|
||||
})()
|
||||
).resolves.toMatchObject([]);
|
||||
});
|
||||
|
||||
@@ -67,14 +74,17 @@ describe("collectionsRunner", () => {
|
||||
(axios as unknown as jest.Mock).mockResolvedValue(SAMPLE_RESOLVED_RESPONSE);
|
||||
|
||||
return expect(
|
||||
collectionsRunner([
|
||||
{
|
||||
v: 1,
|
||||
name: "collection",
|
||||
folders: [],
|
||||
requests: [SAMPLE_HOPP_REQUEST],
|
||||
},
|
||||
])()
|
||||
collectionsRunner({
|
||||
collections: [
|
||||
{
|
||||
v: 1,
|
||||
name: "collection",
|
||||
folders: [],
|
||||
requests: [SAMPLE_HOPP_REQUEST],
|
||||
},
|
||||
],
|
||||
envs: SAMPLE_ENVS,
|
||||
})()
|
||||
).resolves.toMatchObject([
|
||||
{
|
||||
path: "collection/request",
|
||||
@@ -89,21 +99,24 @@ describe("collectionsRunner", () => {
|
||||
(axios as unknown as jest.Mock).mockResolvedValue(SAMPLE_RESOLVED_RESPONSE);
|
||||
|
||||
return expect(
|
||||
collectionsRunner([
|
||||
{
|
||||
v: 1,
|
||||
name: "collection",
|
||||
folders: [
|
||||
{
|
||||
v: 1,
|
||||
name: "folder",
|
||||
folders: [],
|
||||
requests: [SAMPLE_HOPP_REQUEST],
|
||||
},
|
||||
],
|
||||
requests: [],
|
||||
},
|
||||
])()
|
||||
collectionsRunner({
|
||||
collections: [
|
||||
{
|
||||
v: 1,
|
||||
name: "collection",
|
||||
folders: [
|
||||
{
|
||||
v: 1,
|
||||
name: "folder",
|
||||
folders: [],
|
||||
requests: [SAMPLE_HOPP_REQUEST],
|
||||
},
|
||||
],
|
||||
requests: [],
|
||||
},
|
||||
],
|
||||
envs: SAMPLE_ENVS,
|
||||
})()
|
||||
).resolves.toMatchObject([
|
||||
{
|
||||
path: "collection/folder/request",
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import { Environment } from "@hoppscotch/data";
|
||||
import { getEffectiveFinalMetaData } from "../../../utils/getters";
|
||||
|
||||
import "@relmify/jest-fp-ts";
|
||||
|
||||
const DEFAULT_ENV = <Environment>{
|
||||
name: "name",
|
||||
variables: [{ key: "PARAM", value: "parsed_param" }],
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
import { HoppCLIError } from "../../../types/errors";
|
||||
import { parseCollectionData } from "../../../utils/mutators";
|
||||
|
||||
import "@relmify/jest-fp-ts";
|
||||
|
||||
describe("parseCollectionData", () => {
|
||||
test("Reading non-existing file.", () => {
|
||||
return expect(
|
||||
parseCollectionData("./src/__tests__/samples/notexist.txt")()
|
||||
parseCollectionData("./src/__tests__/samples/notexist.json")()
|
||||
).resolves.toSubsetEqualLeft(<HoppCLIError>{
|
||||
code: "UNKNOWN_ERROR",
|
||||
code: "FILE_NOT_FOUND",
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@ import { EffectiveHoppRESTRequest } from "../../../interfaces/request";
|
||||
import { HoppCLIError } from "../../../types/errors";
|
||||
import { getEffectiveRESTRequest } from "../../../utils/pre-request";
|
||||
|
||||
import "@relmify/jest-fp-ts";
|
||||
|
||||
const DEFAULT_ENV = <Environment>{
|
||||
name: "name",
|
||||
variables: [
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"URL": "https://echo.hoppscotch.io",
|
||||
"HOST": "echo.hoppscotch.io",
|
||||
"X-COUNTRY": "IN",
|
||||
"BODY_VALUE": "body_value",
|
||||
"BODY_KEY": "body_key"
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"v": 1,
|
||||
"name": "env-flag-tests",
|
||||
"folders": [],
|
||||
"requests": [
|
||||
{
|
||||
"v": "1",
|
||||
"endpoint": "<<URL>>",
|
||||
"name": "test1",
|
||||
"params": [],
|
||||
"headers": [],
|
||||
"method": "POST",
|
||||
"auth": { "authType": "none", "authActive": true },
|
||||
"preRequestScript": "",
|
||||
"testScript": "const HOST = pw.env.get(\"HOST\");\nconst UNSET_ENV = pw.env.get(\"UNSET_ENV\");\nconst EXPECTED_URL = \"https://echo.hoppscotch.io\";\nconst URL = pw.env.get(\"URL\");\nconst X_COUNTRY = pw.env.get(\"X-COUNTRY\");\nconst BODY_VALUE = pw.env.get(\"BODY_VALUE\");\n\n// Check JSON response property\npw.test(\"Check headers properties.\", ()=> {\n pw.expect(pw.response.body.headers.host).toBe(HOST);\n\t pw.expect(pw.response.body.headers[\"x-country\"]).toBe(X_COUNTRY); \n});\n\npw.test(\"Check data properties.\", () => {\n\tconst DATA = pw.response.body.data;\n \n pw.expect(DATA).toBeType(\"string\");\n pw.expect(JSON.parse(DATA).body_key).toBe(BODY_VALUE);\n});\n\npw.test(\"Check request URL.\", () => {\n pw.expect(URL).toBe(EXPECTED_URL);\n})\n\npw.test(\"Check unset ENV.\", () => {\n pw.expect(UNSET_ENV).toBeType(\"undefined\");\n})",
|
||||
"body": {
|
||||
"contentType": "application/json",
|
||||
"body": "{\n \"<<BODY_KEY>>\":\"<<BODY_VALUE>>\"\n}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user