1+ import {
2+ GetSecretOptions ,
3+ KeyVaultSecret ,
4+ SecretClient ,
5+ SetSecretOptions
6+ } from "@azure/keyvault-secrets" ;
17import uuid from "uuid/v4" ;
28import {
39 disableVerboseLogging ,
410 enableVerboseLogging ,
511 logger
612} from "../../logger" ;
713import { getSecret , setSecret } from "./keyvault" ;
14+ import * as keyvault from "./keyvault" ;
815
916const keyVaultName = uuid ( ) ;
10- const secretName = uuid ( ) ;
17+ const mockedName = uuid ( ) ;
1118const secretValue = uuid ( ) ;
1219
20+ jest . spyOn ( keyvault , "getClient" ) . mockReturnValue (
21+ Promise . resolve ( {
22+ getSecret : async (
23+ secretName : string ,
24+ options ?: GetSecretOptions
25+ ) : Promise < KeyVaultSecret > => {
26+ return {
27+ name : "test" ,
28+ properties : {
29+ name : "test" ,
30+ vaultUrl : "http://test.com"
31+ } ,
32+ value : "secretValue"
33+ } ;
34+ } ,
35+ setSecret : async (
36+ secretName : string ,
37+ value : string ,
38+ options ?: SetSecretOptions
39+ ) : Promise < KeyVaultSecret > => {
40+ return {
41+ name : "test" ,
42+ properties : {
43+ name : "test" ,
44+ vaultUrl : "http://test.com"
45+ }
46+ } ;
47+ }
48+ } as SecretClient )
49+ ) ;
50+
1351beforeAll ( ( ) => {
1452 enableVerboseLogging ( ) ;
1553} ) ;
@@ -20,41 +58,88 @@ afterAll(() => {
2058
2159describe ( "set secret" , ( ) => {
2260 test ( "should fail when all arguments are not specified" , async ( ) => {
23- let error : Error | undefined ;
61+ await expect ( setSecret ( "" , "" , "" ) ) . rejects . toThrow ( ) ;
62+ } ) ;
63+ test ( "should create storage account" , async ( ) => {
2464 try {
25- await setSecret ( "" , "" , "" ) ;
26- } catch ( err ) {
27- error = err ;
65+ await setSecret ( keyVaultName , mockedName , secretValue ) ;
66+ } catch ( _ ) {
67+ expect ( true ) . toBe ( false ) ;
2868 }
29- expect ( error ) . toBeDefined ( ) ;
3069 } ) ;
31-
32- test ( "should create storage account" , async ( ) => {
70+ test ( "negative test" , async ( ) => {
71+ jest . spyOn ( keyvault , "getClient" ) . mockReturnValueOnce (
72+ Promise . resolve ( {
73+ setSecret : async (
74+ secretName : string ,
75+ value : string ,
76+ options ?: SetSecretOptions
77+ ) : Promise < KeyVaultSecret > => {
78+ throw new Error ( "fake error" ) ;
79+ }
80+ } as SecretClient )
81+ ) ;
3382 try {
34- await setSecret ( keyVaultName , secretName , secretValue ) ;
35- } catch ( err ) {
36- logger . error ( err ) ;
83+ await setSecret ( keyVaultName , mockedName , secretValue ) ;
84+ expect ( true ) . toBe ( false ) ;
85+ } catch ( e ) {
86+ expect ( e ) . toBeDefined ( ) ;
3787 }
3888 } ) ;
3989} ) ;
4090
4191describe ( "get secret" , ( ) => {
4292 test ( "should fail getting storage account key when arguments are not specified" , async ( ) => {
43- let error : Error | undefined ;
93+ await expect ( getSecret ( "" , "" ) ) . rejects . toThrow ( ) ;
94+ } ) ;
95+ it ( "should get storage account key" , async ( ) => {
96+ try {
97+ const val = await getSecret ( keyVaultName , mockedName ) ;
98+ expect ( val ) . toBe ( "secretValue" ) ;
99+ } catch ( err ) {
100+ expect ( true ) . toBe ( false ) ;
101+ }
102+ } ) ;
103+ it ( "negative test: secret not found" , async ( ) => {
104+ jest . spyOn ( keyvault , "getClient" ) . mockReturnValueOnce (
105+ Promise . resolve ( {
106+ getSecret : async (
107+ secretName : string ,
108+ options ?: GetSecretOptions
109+ ) : Promise < KeyVaultSecret > => {
110+ throw {
111+ code : "SecretNotFound" ,
112+ statusCode : 404
113+ } ;
114+ }
115+ } as SecretClient )
116+ ) ;
44117 try {
45- await getSecret ( "" , "" ) ;
118+ const val = await getSecret ( keyVaultName , mockedName ) ;
119+ expect ( val ) . toBe ( undefined ) ;
46120 } catch ( err ) {
47- error = err ;
121+ expect ( true ) . toBe ( false ) ;
48122 }
49- expect ( error ) . toBeDefined ( ) ;
50123 } ) ;
51- test ( "should get storage account key" , async ( ) => {
52- let latestValue : string | undefined ;
124+ it ( "negative test: other errors" , async ( ) => {
125+ jest . spyOn ( keyvault , "getClient" ) . mockReturnValueOnce (
126+ Promise . resolve ( {
127+ getSecret : async (
128+ secretName : string ,
129+ options ?: GetSecretOptions
130+ ) : Promise < KeyVaultSecret > => {
131+ throw {
132+ code : "something else" ,
133+ statusCode : 400
134+ } ;
135+ }
136+ } as SecretClient )
137+ ) ;
53138 try {
54- latestValue = await getSecret ( keyVaultName , secretName ) ;
139+ const val = await getSecret ( keyVaultName , mockedName ) ;
140+ expect ( true ) . toBe ( false ) ;
55141 } catch ( err ) {
56- logger . error ( err ) ;
142+ expect ( err ) . toBeDefined ( ) ;
57143 }
58- expect ( latestValue ) . toBeUndefined ( ) ;
59144 } ) ;
60145} ) ;
0 commit comments