Skip to content

Commit 1fe1826

Browse files
committed
feat: implemented getParameter function
1 parent 289569b commit 1fe1826

File tree

4 files changed

+82
-3
lines changed

4 files changed

+82
-3
lines changed

Diff for: packages/parameters/src/BaseProvider.ts

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import type { BaseProviderInterface, GetMultipleOptionsInterface, GetOptionsInte
88
import { isSSMGetOptionsInterface } from './types/SSMProvider';
99
import type { SSMGetOptionsInterface } from './types/SSMProvider';
1010

11+
// These providers will be dynamically initialized on first use of the helper functions
12+
const DEFAULT_PROVIDERS: { [key: string]: BaseProvider } = {};
13+
1114
abstract class BaseProvider implements BaseProviderInterface {
1215
protected store: Map<string, ExpirableValue>;
1316

@@ -175,4 +178,5 @@ export {
175178
BaseProvider,
176179
ExpirableValue,
177180
transformValue,
181+
DEFAULT_PROVIDERS,
178182
};

Diff for: packages/parameters/src/SSMProvider.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { BaseProvider } from './BaseProvider';
1+
import { BaseProvider, DEFAULT_PROVIDERS } from './BaseProvider';
22
import { SSMClient, GetParameterCommand } from '@aws-sdk/client-ssm';
33
import type { SSMClientConfig, GetParameterCommandInput } from '@aws-sdk/client-ssm';
4+
import type { SSMGetOptionsInterface } from 'types/SSMProvider';
45

56
class SSMProvider extends BaseProvider {
67
public client: SSMClient;
@@ -27,6 +28,15 @@ class SSMProvider extends BaseProvider {
2728
}
2829
}
2930

31+
const getParameter = (name: string, options?: SSMGetOptionsInterface): Promise<undefined | string | Record<string, unknown>> => {
32+
if (!DEFAULT_PROVIDERS.hasOwnProperty('ssm')) {
33+
DEFAULT_PROVIDERS.ssm = new SSMProvider();
34+
}
35+
36+
return DEFAULT_PROVIDERS.ssm.get(name, options);
37+
};
38+
3039
export {
31-
SSMProvider
40+
SSMProvider,
41+
getParameter,
3242
};

Diff for: packages/parameters/tests/unit/SSMProvider.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* Test SSMProvider class
33
*
4-
* @group unit/idempotency/all
4+
* @group unit/parameters/SSMProvider/class
55
*/
66
import { SSMProvider } from '../../src/SSMProvider';
77
import { SSMClient, GetParameterCommand } from '@aws-sdk/client-ssm';

Diff for: packages/parameters/tests/unit/getParameter.test.ts

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/**
2+
* Test getParameter function
3+
*
4+
* @group unit/parameters/SSMProvider/getParameter/function
5+
*/
6+
import { DEFAULT_PROVIDERS } from '../../src/BaseProvider';
7+
import { SSMProvider, getParameter } from '../../src/SSMProvider';
8+
import { SSMClient, GetParameterCommand } from '@aws-sdk/client-ssm';
9+
import { mockClient } from 'aws-sdk-client-mock';
10+
import 'aws-sdk-client-mock-jest';
11+
12+
describe('Function: getParameter', () => {
13+
14+
beforeEach(() => {
15+
jest.clearAllMocks();
16+
});
17+
18+
test('when called and a default provider doesn\'t exist, it instantiates one and returns the value', async () => {
19+
20+
// Prepare
21+
const parameterName = 'foo';
22+
const parameterValue = 'foo';
23+
const client = mockClient(SSMClient).on(GetParameterCommand).resolves({
24+
Parameter: {
25+
Value: parameterValue,
26+
},
27+
});
28+
29+
// Act
30+
const value = await getParameter(parameterName);
31+
32+
// Assess
33+
expect(client).toReceiveCommandWith(GetParameterCommand, {
34+
Name: parameterName,
35+
});
36+
expect(value).toBe(parameterValue);
37+
38+
});
39+
40+
test('when called and a default provider exists, it uses it and returns the value', async () => {
41+
42+
// Prepare
43+
const provider = new SSMProvider();
44+
DEFAULT_PROVIDERS.ssm = provider;
45+
const parameterName = 'foo';
46+
const parameterValue = 'foo';
47+
const client = mockClient(SSMClient).on(GetParameterCommand).resolves({
48+
Parameter: {
49+
Value: parameterValue,
50+
},
51+
});
52+
53+
// Act
54+
const value = await getParameter(parameterName);
55+
56+
// Assess
57+
expect(client).toReceiveCommandWith(GetParameterCommand, {
58+
Name: parameterName,
59+
});
60+
expect(value).toBe(parameterValue);
61+
expect(DEFAULT_PROVIDERS.ssm).toBe(provider);
62+
63+
});
64+
65+
});

0 commit comments

Comments
 (0)