@@ -46,6 +46,17 @@ describe('load config', () => {
4646 expect ( config ) . toEqual ( mockConfig )
4747 } )
4848
49+ test ( 'standalone app config with database' , async ( ) => {
50+ global . loadFixtureApp ( 'app-with-database' )
51+ config = await appConfig . load ( )
52+ expect ( config . all . application . database ) . toEqual ( {
53+ 'auto-provision' : true ,
54+ region : 'emea'
55+ } )
56+ expect ( config . all . application . app . hasBackend ) . toBe ( true )
57+ expect ( config . all . application . app . hasFrontend ) . toBe ( true )
58+ } )
59+
4960 test ( 'not in an app' , async ( ) => {
5061 global . loadFixtureApp ( 'not-in-app' )
5162 await expect ( appConfig . load ( ) ) . rejects . toThrow ( new Error ( 'ENOENT: no such file or directory, open \'package.json\'' ) )
@@ -1064,3 +1075,121 @@ describe('coalesce config', () => {
10641075 expect ( coalesced . includeIndex [ 'application.runtimeManifest.packages.my-app-package.actions.action.function' ] ) . toEqual ( { file : 'app/myactions/action.config.yaml' , key : 'function' } )
10651076 } )
10661077} )
1078+
1079+ describe ( 'database config' , ( ) => {
1080+ beforeEach ( async ( ) => {
1081+ mockAIOConfig . get . mockImplementation ( k => global . fakeConfig . tvm )
1082+ process . chdir ( '/' )
1083+ global . fakeFileSystem . clear ( )
1084+ libEnv . getCliEnv . mockReturnValue ( 'prod' )
1085+ } )
1086+
1087+ test ( 'valid database configuration' , async ( ) => {
1088+ global . fakeFileSystem . addJson ( {
1089+ '/package.json' : '{"name": "test-app", "version": "1.0.0"}' ,
1090+ '/app.config.yaml' : `
1091+ application:
1092+ runtimeManifest:
1093+ database:
1094+ auto-provision: true
1095+ region: 'emea'
1096+ packages:
1097+ my-app-package:
1098+ actions:
1099+ action:
1100+ function: 'actions/hello.js'
1101+ web: true
1102+ `
1103+ } )
1104+ const config = await appConfig . load ( )
1105+ expect ( config . all . application . database ) . toEqual ( {
1106+ 'auto-provision' : true ,
1107+ region : 'emea'
1108+ } )
1109+ } )
1110+
1111+ test ( 'database configuration with auto-provision true' , async ( ) => {
1112+ global . fakeFileSystem . addJson ( {
1113+ '/package.json' : '{"name": "test-app", "version": "1.0.0"}' ,
1114+ '/app.config.yaml' : `
1115+ application:
1116+ runtimeManifest:
1117+ database:
1118+ auto-provision: true
1119+ packages:
1120+ my-app-package:
1121+ actions:
1122+ action:
1123+ function: 'actions/hello.js'
1124+ web: true
1125+ `
1126+ } )
1127+ const config = await appConfig . load ( )
1128+ expect ( config . all . application . database ) . toEqual ( {
1129+ 'auto-provision' : true
1130+ } )
1131+ } )
1132+
1133+ test ( 'database configuration with empty fields' , async ( ) => {
1134+ global . fakeFileSystem . addJson ( {
1135+ '/package.json' : '{"name": "test-app", "version": "1.0.0"}' ,
1136+ '/app.config.yaml' : `
1137+ application:
1138+ runtimeManifest:
1139+ database: {}
1140+ packages:
1141+ my-app-package:
1142+ actions:
1143+ action:
1144+ function: 'actions/hello.js'
1145+ web: true
1146+ `
1147+ } )
1148+ await expect ( appConfig . load ( ) ) . rejects . toThrow ( 'Missing or invalid keys in app.config.yaml:' )
1149+ } )
1150+
1151+ test ( 'database configuration validation - valid' , async ( ) => {
1152+ const validConfig = {
1153+ application : {
1154+ runtimeManifest : {
1155+ database : {
1156+ 'auto-provision' : true ,
1157+ region : 'apac'
1158+ } ,
1159+ packages : {
1160+ 'my-app' : {
1161+ actions : {
1162+ hello : {
1163+ function : 'hello.js'
1164+ }
1165+ }
1166+ }
1167+ }
1168+ }
1169+ }
1170+ }
1171+ const validation = await appConfig . validate ( validConfig )
1172+ expect ( validation . valid ) . toBe ( true )
1173+ expect ( validation . errors ) . toBe ( null )
1174+ } )
1175+
1176+ test ( 'invalid database configuration - invalid auto-provision type' , async ( ) => {
1177+ global . fakeFileSystem . addJson ( {
1178+ '/package.json' : '{"name": "test-app", "version": "1.0.0"}' ,
1179+ '/app.config.yaml' : `
1180+ application:
1181+ runtimeManifest:
1182+ database:
1183+ auto-provision: 'invalid'
1184+ region: 'amer'
1185+ packages:
1186+ my-app-package:
1187+ actions:
1188+ action:
1189+ function: 'actions/hello.js'
1190+ web: true
1191+ `
1192+ } )
1193+ await expect ( appConfig . load ( { } ) ) . rejects . toThrow ( 'must be boolean' )
1194+ } )
1195+ } )
0 commit comments