Skip to content

Commit 87fd581

Browse files
authored
chore(shared-ini-file-loader): add utility fn to get file paths (#3572)
1 parent ce22c6e commit 87fd581

6 files changed

+111
-43
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { join } from "path";
2+
3+
import { ENV_CONFIG_PATH, getConfigFilepath } from "./getConfigFilepath";
4+
import { getHomeDir } from "./getHomeDir";
5+
6+
jest.mock("path");
7+
jest.mock("./getHomeDir");
8+
9+
describe(getConfigFilepath.name, () => {
10+
const mockSeparator = "/";
11+
const mockHomeDir = "/mock/home/dir";
12+
13+
const mockConfigFilepath = "/mock/file/path/config";
14+
const defaultConfigFilepath = `${mockHomeDir}/.aws/config`;
15+
16+
afterEach(() => {
17+
jest.clearAllMocks();
18+
});
19+
20+
it("returns configFilePath from default locations", () => {
21+
(join as jest.Mock).mockImplementation((...args) => args.join(mockSeparator));
22+
(getHomeDir as jest.Mock).mockReturnValue(mockHomeDir);
23+
expect(getConfigFilepath()).toStrictEqual(defaultConfigFilepath);
24+
expect(getHomeDir).toHaveBeenCalledWith();
25+
expect(join).toHaveBeenCalledWith(mockHomeDir, ".aws", "config");
26+
});
27+
28+
it("returns configFile from location defined in environment", () => {
29+
const OLD_ENV = process.env;
30+
process.env = {
31+
...OLD_ENV,
32+
[ENV_CONFIG_PATH]: mockConfigFilepath,
33+
};
34+
expect(getConfigFilepath()).toStrictEqual(mockConfigFilepath);
35+
expect(getHomeDir).not.toHaveBeenCalled();
36+
expect(join).not.toHaveBeenCalled();
37+
process.env = OLD_ENV;
38+
});
39+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { join } from "path";
2+
3+
import { getHomeDir } from "./getHomeDir";
4+
5+
export const ENV_CONFIG_PATH = "AWS_CONFIG_FILE";
6+
7+
export const getConfigFilepath = () => process.env[ENV_CONFIG_PATH] || join(getHomeDir(), ".aws", "config");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { join } from "path";
2+
3+
import { ENV_CREDENTIALS_PATH, getCredentialsFilepath } from "./getCredentialsFilepath";
4+
import { getHomeDir } from "./getHomeDir";
5+
6+
jest.mock("path");
7+
jest.mock("./getHomeDir");
8+
9+
describe(getCredentialsFilepath.name, () => {
10+
const mockSeparator = "/";
11+
const mockHomeDir = "/mock/home/dir";
12+
13+
const mockConfigFilepath = "/mock/file/path/credentials";
14+
const defaultConfigFilepath = `${mockHomeDir}/.aws/credentials`;
15+
16+
afterEach(() => {
17+
jest.clearAllMocks();
18+
});
19+
20+
it("returns configFilePath from default locations", () => {
21+
(join as jest.Mock).mockImplementation((...args) => args.join(mockSeparator));
22+
(getHomeDir as jest.Mock).mockReturnValue(mockHomeDir);
23+
expect(getCredentialsFilepath()).toStrictEqual(defaultConfigFilepath);
24+
expect(getHomeDir).toHaveBeenCalledWith();
25+
expect(join).toHaveBeenCalledWith(mockHomeDir, ".aws", "credentials");
26+
});
27+
28+
it("returns configFile from location defined in environment", () => {
29+
const OLD_ENV = process.env;
30+
process.env = {
31+
...OLD_ENV,
32+
[ENV_CREDENTIALS_PATH]: mockConfigFilepath,
33+
};
34+
expect(getCredentialsFilepath()).toStrictEqual(mockConfigFilepath);
35+
expect(getHomeDir).not.toHaveBeenCalled();
36+
expect(join).not.toHaveBeenCalled();
37+
process.env = OLD_ENV;
38+
});
39+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { join } from "path";
2+
3+
import { getHomeDir } from "./getHomeDir";
4+
5+
export const ENV_CREDENTIALS_PATH = "AWS_SHARED_CREDENTIALS_FILE";
6+
7+
export const getCredentialsFilepath = () =>
8+
process.env[ENV_CREDENTIALS_PATH] || join(getHomeDir(), ".aws", "credentials");

packages/shared-ini-file-loader/src/loadSharedConfigFiles.spec.ts

+15-34
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,27 @@
1-
import { join } from "path";
2-
3-
import { getHomeDir } from "./getHomeDir";
1+
import { getConfigFilepath } from "./getConfigFilepath";
2+
import { getCredentialsFilepath } from "./getCredentialsFilepath";
43
import { getProfileData } from "./getProfileData";
5-
import { ENV_CONFIG_PATH, ENV_CREDENTIALS_PATH, loadSharedConfigFiles } from "./loadSharedConfigFiles";
4+
import { loadSharedConfigFiles } from "./loadSharedConfigFiles";
65
import { parseIni } from "./parseIni";
76
import { slurpFile } from "./slurpFile";
87

9-
jest.mock("path");
10-
jest.mock("./getHomeDir");
8+
jest.mock("./getConfigFilepath");
9+
jest.mock("./getCredentialsFilepath");
1110
jest.mock("./getProfileData");
1211
jest.mock("./parseIni");
1312
jest.mock("./slurpFile");
1413

1514
describe("loadSharedConfigFiles", () => {
16-
const mockSeparator = "/";
17-
const mockHomeDir = "/mock/home/dir";
18-
1915
const mockConfigFilepath = "/mock/file/path/config";
2016
const mockCredsFilepath = "/mock/file/path/credentials";
21-
const mockCustomSharedConfigFiles = {
17+
const mockSharedConfigFiles = {
2218
configFile: mockConfigFilepath,
2319
credentialsFile: mockCredsFilepath,
2420
};
2521

26-
const defaultConfigFilepath = `${mockHomeDir}/.aws/config`;
27-
const defaultCredsFilepath = `${mockHomeDir}/.aws/credentials`;
28-
const mockDefaultSharedConfigFiles = {
29-
configFile: defaultConfigFilepath,
30-
credentialsFile: defaultCredsFilepath,
31-
};
32-
3322
beforeEach(() => {
34-
(join as jest.Mock).mockImplementation((...args) => args.join(mockSeparator));
35-
(getHomeDir as jest.Mock).mockReturnValue(mockHomeDir);
23+
(getConfigFilepath as jest.Mock).mockReturnValue(mockConfigFilepath);
24+
(getCredentialsFilepath as jest.Mock).mockReturnValue(mockCredsFilepath);
3625
(parseIni as jest.Mock).mockImplementation((args) => args);
3726
(getProfileData as jest.Mock).mockImplementation((args) => args);
3827
(slurpFile as jest.Mock).mockImplementation((path) => Promise.resolve(path));
@@ -45,27 +34,19 @@ describe("loadSharedConfigFiles", () => {
4534

4635
it("returns configFile and credentialsFile from default locations", async () => {
4736
const sharedConfigFiles = await loadSharedConfigFiles();
48-
expect(sharedConfigFiles).toStrictEqual(mockDefaultSharedConfigFiles);
49-
});
50-
51-
it("returns configFile and credentialsFile from locations defined in environment", async () => {
52-
const OLD_ENV = process.env;
53-
process.env = {
54-
...OLD_ENV,
55-
[ENV_CONFIG_PATH]: mockConfigFilepath,
56-
[ENV_CREDENTIALS_PATH]: mockCredsFilepath,
57-
};
58-
const sharedConfigFiles = await loadSharedConfigFiles({});
59-
expect(sharedConfigFiles).toStrictEqual(mockCustomSharedConfigFiles);
60-
process.env = OLD_ENV;
37+
expect(sharedConfigFiles).toStrictEqual(mockSharedConfigFiles);
38+
expect(getConfigFilepath).toHaveBeenCalledWith();
39+
expect(getCredentialsFilepath).toHaveBeenCalledWith();
6140
});
6241

6342
it("returns configFile and credentialsFile from init if defined", async () => {
6443
const sharedConfigFiles = await loadSharedConfigFiles({
6544
filepath: mockCredsFilepath,
6645
configFilepath: mockConfigFilepath,
6746
});
68-
expect(sharedConfigFiles).toStrictEqual(mockCustomSharedConfigFiles);
47+
expect(sharedConfigFiles).toStrictEqual(mockSharedConfigFiles);
48+
expect(getConfigFilepath).not.toHaveBeenCalled();
49+
expect(getCredentialsFilepath).not.toHaveBeenCalled();
6950
});
7051

7152
describe("swallows error and returns empty configuration", () => {
@@ -86,7 +67,7 @@ describe("loadSharedConfigFiles", () => {
8667
const sharedConfigFiles = await loadSharedConfigFiles();
8768
expect(sharedConfigFiles).toStrictEqual({
8869
configFile: {},
89-
credentialsFile: defaultCredsFilepath,
70+
credentialsFile: mockCredsFilepath,
9071
});
9172
});
9273
});

packages/shared-ini-file-loader/src/loadSharedConfigFiles.ts

+3-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
import { SharedConfigFiles } from "@aws-sdk/types";
2-
import { join } from "path";
32

4-
import { getHomeDir } from "./getHomeDir";
3+
import { getConfigFilepath } from "./getConfigFilepath";
4+
import { getCredentialsFilepath } from "./getCredentialsFilepath";
55
import { getProfileData } from "./getProfileData";
66
import { parseIni } from "./parseIni";
77
import { slurpFile } from "./slurpFile";
88

9-
export const ENV_CREDENTIALS_PATH = "AWS_SHARED_CREDENTIALS_FILE";
10-
export const ENV_CONFIG_PATH = "AWS_CONFIG_FILE";
11-
129
export interface SharedConfigInit {
1310
/**
1411
* The path at which to locate the ini credentials file. Defaults to the
@@ -28,10 +25,7 @@ export interface SharedConfigInit {
2825
const swallowError = () => ({});
2926

3027
export const loadSharedConfigFiles = async (init: SharedConfigInit = {}): Promise<SharedConfigFiles> => {
31-
const {
32-
filepath = process.env[ENV_CREDENTIALS_PATH] || join(getHomeDir(), ".aws", "credentials"),
33-
configFilepath = process.env[ENV_CONFIG_PATH] || join(getHomeDir(), ".aws", "config"),
34-
} = init;
28+
const { filepath = getCredentialsFilepath(), configFilepath = getConfigFilepath() } = init;
3529

3630
const parsedFiles = await Promise.all([
3731
slurpFile(configFilepath).then(parseIni).then(getProfileData).catch(swallowError),

0 commit comments

Comments
 (0)