@@ -63,9 +63,19 @@ public KeysControllerTests()
6363
6464 _functionsSyncManagerMock = new Mock < IFunctionsSyncManager > ( MockBehavior . Strict ) ;
6565 _functionsSyncManagerMock . Setup ( p => p . TrySyncTriggersAsync ( false ) ) . ReturnsAsync ( new SyncTriggersResult { Success = true } ) ;
66+
6667 var hostManagerMock = new Mock < IScriptHostManager > ( MockBehavior . Strict ) ;
6768 hostManagerMock . SetupGet ( p => p . State ) . Returns ( ScriptHostState . Running ) ;
68- _testController = new KeysController ( new OptionsWrapper < ScriptApplicationHostOptions > ( settings ) , new TestSecretManagerProvider ( _secretsManagerMock . Object ) , new LoggerFactory ( ) , fileSystem . Object , _functionsSyncManagerMock . Object , hostManagerMock . Object ) ;
69+
70+ var metadataManagerMock = new Mock < IFunctionMetadataManager > ( MockBehavior . Strict ) ;
71+ FunctionMetadata metadata = null ;
72+ metadataManagerMock . Setup ( m => m . TryGetFunctionMetadata ( "FunctionWithoutFile" , out metadata , false ) ) . Returns ( true ) ;
73+ metadataManagerMock . Setup ( m => m . TryGetFunctionMetadata ( "TestFunction1" , out metadata , false ) ) . Returns ( true ) ;
74+ // Function that has a physical file, but is loaded (safety net).
75+ metadataManagerMock . Setup ( m => m . TryGetFunctionMetadata ( "TestFunction2" , out metadata , false ) ) . Returns ( false ) ;
76+ metadataManagerMock . Setup ( m => m . TryGetFunctionMetadata ( "DNE" , out metadata , false ) ) . Returns ( false ) ;
77+
78+ _testController = new KeysController ( new OptionsWrapper < ScriptApplicationHostOptions > ( settings ) , new TestSecretManagerProvider ( _secretsManagerMock . Object ) , new LoggerFactory ( ) , fileSystem . Object , _functionsSyncManagerMock . Object , metadataManagerMock . Object , hostManagerMock . Object ) ;
6979
7080 var keys = new Dictionary < string , string >
7181 {
@@ -79,6 +89,12 @@ public KeysControllerTests()
7989 } ;
8090 _secretsManagerMock . Setup ( p => p . GetFunctionSecretsAsync ( "TestFunction2" , false ) ) . ReturnsAsync ( keys ) ;
8191
92+ keys = new Dictionary < string , string >
93+ {
94+ { "key1" , "secret1" }
95+ } ;
96+ _secretsManagerMock . Setup ( p => p . GetFunctionSecretsAsync ( "FunctionWithoutFile" , false ) ) . ReturnsAsync ( keys ) ;
97+
8298 _secretsManagerMock . Setup ( p => p . GetFunctionSecretsAsync ( "DNE" , false ) ) . ReturnsAsync ( ( IDictionary < string , string > ) null ) ;
8399
84100 SetHttpContext ( ) ;
@@ -95,6 +111,17 @@ public async Task GetKeys_ReturnsKeys()
95111 Assert . Equal ( "secret1" , keys [ 0 ] [ "value" ] ) ;
96112 }
97113
114+ [ Fact ]
115+ public async Task GetKeys_NoFileFunction_ReturnsKeys ( )
116+ {
117+ ObjectResult result = ( ObjectResult ) await _testController . Get ( "FunctionWithoutFile" ) ;
118+
119+ var content = ( JObject ) result . Value ;
120+ var keys = content [ "keys" ] ;
121+ Assert . Equal ( "key1" , keys [ 0 ] [ "name" ] ) ;
122+ Assert . Equal ( "secret1" , keys [ 0 ] [ "value" ] ) ;
123+ }
124+
98125 [ Fact ]
99126 public async Task GetKeys_NotAFunction_ReturnsNotFound ( )
100127 {
0 commit comments