import { assert } from "chai"; import { configLoader, loadConfig, ConfigLoaderFailResult, ConfigLoaderSuccessResult } from "../src/config-loader"; import { join } from "path"; describe("config-loader", (): void => { it("should use explicitParams when set", () => { const result = configLoader({ explicitParams: { baseUrl: "/foo/bar", paths: { asd: ["asd"] } }, cwd: "/baz" }); const successResult = result as ConfigLoaderSuccessResult; assert.equal(successResult.resultType, "success"); assert.equal(successResult.absoluteBaseUrl, "/foo/bar"); assert.equal(successResult.paths["asd"][0], "asd"); }); it("should use explicitParams when set and add cwd when path is relative", () => { const result = configLoader({ explicitParams: { baseUrl: "bar/", paths: { asd: ["asd"] } }, cwd: "/baz" }); const successResult = result as ConfigLoaderSuccessResult; assert.equal(successResult.resultType, "success"); assert.equal(successResult.absoluteBaseUrl, join("/baz", "bar/")); }); it("should fallback to tsConfigLoader when explicitParams is not set", () => { const result = configLoader({ explicitParams: undefined, cwd: "/baz", // tslint:disable-next-line:no-any tsConfigLoader: (_: any) => ({ tsConfigPath: "/baz/tsconfig.json", baseUrl: "./src", paths: {} }) }); const successResult = result as ConfigLoaderSuccessResult; assert.equal(successResult.resultType, "success"); assert.equal(successResult.absoluteBaseUrl, join("/baz", "src")); }); it("should show an error message when baseUrl is missing", () => { const result = configLoader({ explicitParams: undefined, cwd: "/baz", // tslint:disable-next-line:no-any tsConfigLoader: (_: any) => ({ tsConfigPath: "/baz/tsconfig.json", baseUrl: undefined, paths: {} }) }); const failResult = result as ConfigLoaderFailResult; assert.equal(failResult.resultType, "failed"); assert.isTrue(failResult.message.indexOf("baseUrl") > -1); }); it("should presume cwd to be a tsconfig file when loadConfig is called with absolute path to tsconfig.json", () => { // using tsconfig-named.json to ensure that future changes to fix // https://github.com/dividab/tsconfig-paths/issues/31 // do not pass this test case just because of a directory walk looking // for tsconfig.json const configFile = join(__dirname, "tsconfig-named.json"); const result = loadConfig(configFile); const successResult = result as ConfigLoaderSuccessResult; assert.equal(successResult.resultType, "success"); assert.equal(successResult.configFileAbsolutePath, configFile); }); });