1+ /**
2+ * Test SecretsProvider class
3+ *
4+ * @group unit/parameters/SecretsProvider/class
5+ */
6+ import { SecretsProvider } from '../../src/secrets' ;
7+ import { SecretsManagerClient , GetSecretValueCommand } from '@aws-sdk/client-secrets-manager' ;
8+ import type { GetSecretValueCommandInput } from '@aws-sdk/client-secrets-manager' ;
9+ import { mockClient } from 'aws-sdk-client-mock' ;
10+ import 'aws-sdk-client-mock-jest' ;
11+
12+ const encoder = new TextEncoder ( ) ;
13+
14+ describe ( 'Class: SecretsProvider' , ( ) => {
15+
16+ const client = mockClient ( SecretsManagerClient ) ;
17+
18+ beforeEach ( ( ) => {
19+ jest . clearAllMocks ( ) ;
20+ } ) ;
21+
22+ describe ( 'Method: _get' , ( ) => {
23+
24+ test ( 'when called with only a name, it gets the secret string' , async ( ) => {
25+
26+ // Prepare
27+ const provider = new SecretsProvider ( ) ;
28+ const secretName = 'foo' ;
29+ client . on ( GetSecretValueCommand ) . resolves ( {
30+ SecretString : 'bar' ,
31+ } ) ;
32+
33+ // Act
34+ const result = await provider . get ( secretName ) ;
35+
36+ // Assess
37+ expect ( result ) . toBe ( 'bar' ) ;
38+
39+ } ) ;
40+
41+ test ( 'when called with only a name, it gets the secret binary' , async ( ) => {
42+
43+ // Prepare
44+ const provider = new SecretsProvider ( ) ;
45+ const secretName = 'foo' ;
46+ const mockData = encoder . encode ( 'my-value' ) ;
47+ client . on ( GetSecretValueCommand ) . resolves ( {
48+ SecretBinary : mockData ,
49+ } ) ;
50+
51+ // Act
52+ const result = await provider . get ( secretName ) ;
53+
54+ // Assess
55+ expect ( result ) . toBe ( mockData ) ;
56+
57+ } ) ;
58+
59+ test ( 'when called with a name and sdkOptions, it gets the secret using the options provided' , async ( ) => {
60+
61+ // Prepare
62+ const provider = new SecretsProvider ( ) ;
63+ const secretName = 'foo' ;
64+ client . on ( GetSecretValueCommand ) . resolves ( {
65+ SecretString : 'bar' ,
66+ } ) ;
67+
68+ // Act
69+ await provider . get ( secretName , {
70+ sdkOptions : {
71+ VersionId : 'test-version' ,
72+ }
73+ } ) ;
74+
75+ // Assess
76+ expect ( client ) . toReceiveCommandWith ( GetSecretValueCommand , {
77+ SecretId : secretName ,
78+ VersionId : 'test-version' ,
79+ } ) ;
80+
81+ } ) ;
82+
83+ test ( 'when called with sdkOptions that override arguments passed to the method, it gets the secret using the arguments' , async ( ) => {
84+
85+ // Prepare
86+ const provider = new SecretsProvider ( ) ;
87+ const secretName = 'foo' ;
88+ client . on ( GetSecretValueCommand ) . resolves ( {
89+ SecretString : 'bar' ,
90+ } ) ;
91+
92+ // Act
93+ await provider . get ( secretName , {
94+ sdkOptions : {
95+ SecretId : 'test-secret' ,
96+ } as unknown as GetSecretValueCommandInput ,
97+ } ) ;
98+
99+ // Assess
100+ expect ( client ) . toReceiveCommandWith ( GetSecretValueCommand , {
101+ SecretId : secretName ,
102+ } ) ;
103+
104+ } ) ;
105+
106+ } ) ;
107+
108+ describe ( 'Method: _getMultiple' , ( ) => {
109+
110+ test ( 'when called, it throws an error' , async ( ) => {
111+
112+ // Prepare
113+ const provider = new SecretsProvider ( ) ;
114+
115+ // Act & Assess
116+ await expect ( provider . getMultiple ( 'foo' ) ) . rejects . toThrow ( 'Method not implemented.' ) ;
117+
118+ } ) ;
119+
120+ } ) ;
121+
122+ } ) ;
0 commit comments