@@ -38,6 +38,7 @@ const mockDbLib = require('@adobe/aio-lib-db')
3838
3939jest . mock ( '@adobe/aio-lib-core-config' )
4040const mockConfig = require ( '@adobe/aio-lib-core-config' )
41+ const MOCK_ACCESS_TOKEN = 'mocktoken'
4142
4243const mockConfigData = {
4344 app : {
@@ -199,7 +200,7 @@ beforeEach(() => {
199200 authHelper . setRuntimeApiHostAndAuthHandler . mockImplementation ( ( aioConfig ) => aioConfig )
200201 authHelper . getAccessToken . mockImplementation ( ( ) => {
201202 return {
202- accessToken : 'mocktoken' ,
203+ accessToken : MOCK_ACCESS_TOKEN ,
203204 env : 'stage'
204205 }
205206 } )
@@ -1666,6 +1667,7 @@ describe('database provisioning', () => {
16661667 config ,
16671668 flags ,
16681669 spinner ,
1670+ accessToken = MOCK_ACCESS_TOKEN ,
16691671 mockResult = { status : DB_STATUS . PROVISIONED , region : 'amer' } ,
16701672 mockStatus = { status : DB_STATUS . NOT_PROVISIONED }
16711673 ) => {
@@ -1681,7 +1683,7 @@ describe('database provisioning', () => {
16811683 mockDb . provisionRequest . mockResolvedValueOnce ( mockResult )
16821684 }
16831685
1684- await command . provisionDatabase ( config , spinner , flags ) . catch ( e => { throw e } )
1686+ await command . provisionDatabase ( config , spinner , flags , accessToken ) . catch ( e => { throw e } )
16851687 return spinner
16861688 }
16871689
@@ -1696,7 +1698,7 @@ describe('database provisioning', () => {
16961698
16971699 expect ( command . error ) . toHaveBeenCalledTimes ( 0 )
16981700
1699- const expectedInitConfig = { ow : { namespace : 'test_ns' , auth : 'user:pass' } }
1701+ const expectedInitConfig = { ow : { namespace : 'test_ns' } , token : MOCK_ACCESS_TOKEN }
17001702 expect ( mockDbLib . init ) . toHaveBeenCalledWith ( expect . objectContaining ( expectedInitConfig ) )
17011703 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
17021704 expect ( mockDb . provisionRequest ) . toHaveBeenCalledTimes ( 1 )
@@ -1708,6 +1710,26 @@ describe('database provisioning', () => {
17081710 )
17091711 } )
17101712
1713+ test ( 'should not provision database when access token is missing' , async ( ) => {
1714+ authHelper . getAccessToken . mockResolvedValueOnce ( {
1715+ accessToken : null ,
1716+ env : 'stage'
1717+ } )
1718+ mockDb . provisionStatus . mockResolvedValue ( { status : DB_STATUS . NOT_PROVISIONED } )
1719+ mockDb . provisionRequest . mockResolvedValue ( { status : DB_STATUS . PROVISIONED , region : 'amer' } )
1720+ const appConfigWithDb = createAppConfig ( { ...command . appConfig , ...createDatabaseConfig ( ) } )
1721+
1722+ command . getAppExtConfigs . mockResolvedValueOnce ( appConfigWithDb )
1723+
1724+ await expect ( command . run ( ) ) . rejects . toThrow ( 'Database deployment requires an IMS access token.' )
1725+
1726+ expect ( mockDbLib . init ) . not . toHaveBeenCalled ( )
1727+ expect ( mockDb . provisionStatus ) . not . toHaveBeenCalled ( )
1728+ expect ( mockDb . provisionRequest ) . not . toHaveBeenCalled ( )
1729+ expect ( mockRuntimeLib . deployActions ) . not . toHaveBeenCalled ( )
1730+ expect ( mockWebLib . deployWeb ) . not . toHaveBeenCalled ( )
1731+ } )
1732+
17111733 test ( 'should not provision database when auto-provision is false' , async ( ) => {
17121734 mockDb . provisionStatus . mockResolvedValue ( { status : DB_STATUS . NOT_PROVISIONED } )
17131735 mockDb . provisionRequest . mockResolvedValue ( { status : DB_STATUS . PROVISIONED , region : 'emea' } )
@@ -1734,15 +1756,17 @@ describe('database provisioning', () => {
17341756 const config = createDatabaseConfig ( 'amer' )
17351757 const flags = { verbose : false }
17361758 const spinner = ora ( )
1759+ const accessToken = 'mockAccessToken'
17371760
1738- await runProvisionTest ( config , flags , spinner )
1761+ await runProvisionTest ( config , flags , spinner , accessToken )
17391762
17401763 expect ( spinner . start ) . toHaveBeenCalledWith ( expect . stringContaining ( 'Deploying database in the \'amer\' region' ) )
17411764 expect ( spinner . succeed ) . toHaveBeenCalledWith ( expect . stringContaining ( 'Database is deployed and ready for use' ) )
17421765
17431766 const expectedInitConfig = {
1744- ow : { namespace : 'test_ns' , auth : 'user:pass' } ,
1745- region : 'amer'
1767+ ow : { namespace : 'test_ns' } ,
1768+ region : 'amer' ,
1769+ token : accessToken
17461770 }
17471771 expect ( mockDbLib . init ) . toHaveBeenCalledWith ( expect . objectContaining ( expectedInitConfig ) )
17481772 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
@@ -1754,12 +1778,12 @@ describe('database provisioning', () => {
17541778 const flags = { verbose : false }
17551779 const spinner = ora ( )
17561780
1757- await runProvisionTest ( config , flags , spinner )
1781+ await runProvisionTest ( config , flags , spinner , MOCK_ACCESS_TOKEN )
17581782
17591783 expect ( spinner . start ) . toHaveBeenCalledWith ( expect . stringContaining ( 'Deploying database in the default region' ) )
17601784 expect ( spinner . succeed ) . toHaveBeenCalledWith ( expect . stringContaining ( 'Database is deployed and ready for use' ) )
17611785
1762- const expectedInitConfig = { ow : { namespace : 'test_ns' , auth : 'user:pass' } }
1786+ const expectedInitConfig = { ow : { namespace : 'test_ns' } }
17631787 expect ( mockDbLib . init ) . toHaveBeenCalledWith ( expect . objectContaining ( expectedInitConfig ) )
17641788 expect ( mockDbLib . init ) . not . toHaveBeenCalledWith ( expect . objectContaining ( { region : expect . any ( String ) } ) )
17651789 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
@@ -1771,7 +1795,7 @@ describe('database provisioning', () => {
17711795 const flags = { verbose : true }
17721796 const spinner = ora ( )
17731797
1774- await runProvisionTest ( config , flags , spinner , { status : DB_STATUS . PROVISIONED , region : 'apac' } , { status : DB_STATUS . DELETED } )
1798+ await runProvisionTest ( config , flags , spinner , MOCK_ACCESS_TOKEN , { status : DB_STATUS . PROVISIONED , region : 'apac' } , { status : DB_STATUS . DELETED } )
17751799
17761800 // Existing database status
17771801 expect ( spinner . start ) . toHaveBeenCalledWith ( expect . stringContaining ( 'Checking existing database deployment status...' ) )
@@ -1787,7 +1811,7 @@ describe('database provisioning', () => {
17871811 const flags = { verbose : true }
17881812 const spinner = ora ( )
17891813
1790- await runProvisionTest ( config , flags , spinner , { status : DB_STATUS . PROVISIONED , region : 'emea' } )
1814+ await runProvisionTest ( config , flags , spinner , MOCK_ACCESS_TOKEN , { status : DB_STATUS . PROVISIONED , region : 'emea' } )
17911815
17921816 // Existing database status
17931817 expect ( spinner . start ) . toHaveBeenCalledWith ( expect . stringContaining ( 'Checking existing database deployment status...' ) )
@@ -1804,7 +1828,7 @@ describe('database provisioning', () => {
18041828 const error = new Error ( 'Database provision failed' )
18051829 const spinner = ora ( )
18061830
1807- await expect ( runProvisionTest ( config , flags , spinner , error ) )
1831+ await expect ( runProvisionTest ( config , flags , spinner , MOCK_ACCESS_TOKEN , error ) )
18081832 . rejects . toThrow ( 'Database provision failed' )
18091833 expect ( spinner . fail ) . toHaveBeenCalled ( )
18101834 } )
@@ -1813,7 +1837,14 @@ describe('database provisioning', () => {
18131837 const config = createDatabaseConfig ( 'apac' )
18141838 const spinner = ora ( )
18151839
1816- await runProvisionTest ( config , { } , spinner , null , { status : DB_STATUS . PROVISIONED , region : 'apac' } )
1840+ await runProvisionTest (
1841+ config ,
1842+ { } ,
1843+ spinner ,
1844+ MOCK_ACCESS_TOKEN ,
1845+ { status : DB_STATUS . PROVISIONED , region : 'amer' } ,
1846+ { status : DB_STATUS . PROVISIONED , region : 'apac' }
1847+ )
18171848
18181849 expect ( mockDbLib . init ) . toHaveBeenCalledTimes ( 1 )
18191850 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
@@ -1826,7 +1857,14 @@ describe('database provisioning', () => {
18261857 const config = createDatabaseConfig ( 'apac' )
18271858 const spinner = ora ( )
18281859
1829- await runProvisionTest ( config , { } , spinner , null , { status : DB_STATUS . REQUESTED , region : 'apac' } )
1860+ await runProvisionTest (
1861+ config ,
1862+ { } ,
1863+ spinner ,
1864+ MOCK_ACCESS_TOKEN ,
1865+ { status : DB_STATUS . PROVISIONED , region : 'amer' } ,
1866+ { status : DB_STATUS . REQUESTED , region : 'apac' }
1867+ )
18301868
18311869 expect ( mockDbLib . init ) . toHaveBeenCalledTimes ( 1 )
18321870 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
@@ -1840,7 +1878,14 @@ describe('database provisioning', () => {
18401878 test ( 'should try to provision if previous request failed' , async ( ) => {
18411879 const config = createDatabaseConfig ( 'apac' )
18421880
1843- await runProvisionTest ( config , { } , ora ( ) , undefined , { status : DB_STATUS . FAILED , region : 'apac' } )
1881+ await runProvisionTest (
1882+ config ,
1883+ { } ,
1884+ ora ( ) ,
1885+ MOCK_ACCESS_TOKEN ,
1886+ { status : DB_STATUS . PROVISIONED , region : 'amer' } ,
1887+ { status : DB_STATUS . FAILED , region : 'apac' }
1888+ )
18441889
18451890 expect ( mockDbLib . init ) . toHaveBeenCalledTimes ( 1 )
18461891 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
@@ -1851,7 +1896,7 @@ describe('database provisioning', () => {
18511896 const config = createDatabaseConfig ( 'apac' )
18521897 const spinner = ora ( )
18531898
1854- await runProvisionTest ( config , { verbose : true } , spinner , undefined , new Error ( 'Status check failure' ) )
1899+ await runProvisionTest ( config , { verbose : true } , spinner , MOCK_ACCESS_TOKEN , undefined , new Error ( 'Status check failure' ) )
18551900
18561901 expect ( mockDbLib . init ) . toHaveBeenCalledTimes ( 1 )
18571902 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
@@ -1863,7 +1908,7 @@ describe('database provisioning', () => {
18631908 const config = createDatabaseConfig ( 'apac' )
18641909 const spinner = ora ( )
18651910
1866- await runProvisionTest ( config , { } , spinner , undefined , new Error ( 'Status check failure' ) )
1911+ await runProvisionTest ( config , { } , spinner , MOCK_ACCESS_TOKEN , undefined , new Error ( 'Status check failure' ) )
18671912
18681913 expect ( mockDbLib . init ) . toHaveBeenCalledTimes ( 1 )
18691914 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
@@ -1875,7 +1920,7 @@ describe('database provisioning', () => {
18751920 const config = createDatabaseConfig ( )
18761921 const spinner = ora ( )
18771922
1878- await runProvisionTest ( config , { } , spinner , { status : DB_STATUS . PROCESSING , region : 'apac' } )
1923+ await runProvisionTest ( config , { } , spinner , MOCK_ACCESS_TOKEN , { status : DB_STATUS . PROCESSING , region : 'apac' } )
18791924
18801925 expect ( mockDbLib . init ) . toHaveBeenCalledTimes ( 1 )
18811926 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
@@ -1887,7 +1932,7 @@ describe('database provisioning', () => {
18871932 const config = createDatabaseConfig ( )
18881933 const spinner = ora ( )
18891934
1890- await runProvisionTest ( config , { } , spinner , { status : 'OTHER_STATUS' } )
1935+ await runProvisionTest ( config , { } , spinner , MOCK_ACCESS_TOKEN , { status : 'OTHER_STATUS' } )
18911936
18921937 expect ( mockDbLib . init ) . toHaveBeenCalledTimes ( 1 )
18931938 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
@@ -1899,7 +1944,7 @@ describe('database provisioning', () => {
18991944 const config = createDatabaseConfig ( )
19001945 const spinner = ora ( )
19011946
1902- await runProvisionTest ( config , { } , spinner , { } )
1947+ await runProvisionTest ( config , { } , spinner , MOCK_ACCESS_TOKEN , { } )
19031948
19041949 expect ( mockDbLib . init ) . toHaveBeenCalledTimes ( 1 )
19051950 expect ( mockDb . provisionStatus ) . toHaveBeenCalledTimes ( 1 )
@@ -1911,7 +1956,7 @@ describe('database provisioning', () => {
19111956 const config = createDatabaseConfig ( )
19121957 const spinner = ora ( )
19131958
1914- await expect ( runProvisionTest ( config , { } , spinner , { status : DB_STATUS . FAILED , message : 'Could not be provisioned' } ) )
1959+ await expect ( runProvisionTest ( config , { } , spinner , MOCK_ACCESS_TOKEN , { status : DB_STATUS . FAILED , message : 'Could not be provisioned' } ) )
19151960 . rejects . toThrow ( 'Could not be provisioned' )
19161961
19171962 expect ( mockDbLib . init ) . toHaveBeenCalledTimes ( 1 )
@@ -1924,7 +1969,7 @@ describe('database provisioning', () => {
19241969 const config = createDatabaseConfig ( )
19251970 const spinner = ora ( )
19261971
1927- await expect ( runProvisionTest ( config , { } , spinner , { status : DB_STATUS . REJECTED } ) )
1972+ await expect ( runProvisionTest ( config , { } , spinner , MOCK_ACCESS_TOKEN , { status : DB_STATUS . REJECTED } ) )
19281973 . rejects . toThrow ( 'Unknown error' )
19291974
19301975 expect ( mockDbLib . init ) . toHaveBeenCalledTimes ( 1 )
@@ -1933,22 +1978,11 @@ describe('database provisioning', () => {
19331978 expect ( spinner . fail ) . toHaveBeenCalled ( )
19341979 } )
19351980
1936- test ( 'should throw error if OW auth is missing in config' , async ( ) => {
1937- const config = createDatabaseConfig ( )
1938- config . ow = { namespace : 'test_ns' } // missing auth
1939-
1940- await expect ( runProvisionTest ( config , { } , ora ( ) ) ) . rejects . toThrow ( )
1941-
1942- expect ( mockDbLib . init ) . not . toHaveBeenCalled ( )
1943- expect ( mockDb . provisionStatus ) . not . toHaveBeenCalled ( )
1944- expect ( mockDb . provisionRequest ) . not . toHaveBeenCalled ( )
1945- } )
1946-
19471981 test ( 'should throw error if OW namespace is missing in config' , async ( ) => {
19481982 const config = createDatabaseConfig ( )
19491983 config . ow = { auth : 'user:pass' } // missing namespace
19501984
1951- await expect ( runProvisionTest ( config , { } , ora ( ) ) ) . rejects . toThrow ( )
1985+ await expect ( runProvisionTest ( config , { } , ora ( ) , MOCK_ACCESS_TOKEN ) ) . rejects . toThrow ( )
19521986
19531987 expect ( mockDbLib . init ) . not . toHaveBeenCalled ( )
19541988 expect ( mockDb . provisionStatus ) . not . toHaveBeenCalled ( )
@@ -1959,7 +1993,7 @@ describe('database provisioning', () => {
19591993 const config = createDatabaseConfig ( )
19601994 delete config . ow
19611995
1962- await expect ( runProvisionTest ( config , { } , ora ( ) ) ) . rejects . toThrow ( )
1996+ await expect ( runProvisionTest ( config , { } , ora ( ) , MOCK_ACCESS_TOKEN ) ) . rejects . toThrow ( )
19631997
19641998 expect ( mockDbLib . init ) . not . toHaveBeenCalled ( )
19651999 expect ( mockDb . provisionStatus ) . not . toHaveBeenCalled ( )
0 commit comments