Skip to content

Commit 4883a7f

Browse files
committed
feat: update libint to accept Ims accessToken
1 parent a80ded9 commit 4883a7f

2 files changed

Lines changed: 81 additions & 42 deletions

File tree

src/commands/app/deploy.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ class Deploy extends BuildCommand {
135135
const v = {
136136
...setRuntimeApiHostAndAuthHandler(values[i])
137137
}
138-
await this.deploySingleConfig({ name: k, config: v, originalConfig: values[i], flags, spinner })
138+
await this.deploySingleConfig({ name: k, config: v, originalConfig: values[i], flags, spinner, accessToken: cliDetails?.accessToken })
139139
if (cliDetails?.accessToken && v.app.hasFrontend && flags['web-assets']) {
140140
const opItems = getFilesCountWithExtension(v.web.distProd)
141141
try {
@@ -174,7 +174,7 @@ class Deploy extends BuildCommand {
174174
this.log(chalk.green(chalk.bold('Successful deployment 🏄')))
175175
}
176176

177-
async deploySingleConfig ({ name, config, originalConfig, flags, spinner }) {
177+
async deploySingleConfig ({ name, config, originalConfig, flags, spinner, accessToken }) {
178178
const onProgress = !flags.verbose
179179
? info => {
180180
spinner.text = info
@@ -208,7 +208,7 @@ class Deploy extends BuildCommand {
208208

209209
// provision database if configured
210210
if (config.manifest?.full?.database?.['auto-provision'] === true) {
211-
await this.provisionDatabase(config, spinner, flags)
211+
await this.provisionDatabase(config, spinner, flags, accessToken)
212212
}
213213

214214
if (flags.actions) {
@@ -307,11 +307,15 @@ class Deploy extends BuildCommand {
307307
}
308308
}
309309

310-
async provisionDatabase (config, spinner, flags) {
311-
const { namespace, auth } = config.ow || {}
312-
if (!(namespace && auth)) {
313-
throw new Error('Database deployment requires OW auth configuration.')
310+
async provisionDatabase (config, spinner, flags, accessToken) {
311+
const { namespace } = config.ow || {}
312+
if (!(namespace)) {
313+
throw new Error('Database deployment requires OW namespace configuration.')
314314
}
315+
if (!accessToken) {
316+
throw new Error('Database deployment requires an IMS access token.')
317+
}
318+
315319
const region = config.manifest?.full?.database?.region
316320
const regionMess = region ? `'${region}'` : 'default'
317321

@@ -329,7 +333,8 @@ class Deploy extends BuildCommand {
329333
try {
330334
spinner.start(`Deploying database in the ${regionMess} region...`)
331335

332-
const db = await dbLib.init({ ow: { namespace, auth }, region })
336+
const db = await dbLib.init({ ow: { namespace }, region, token: accessToken })
337+
333338
progress({ next: 'Checking existing database deployment status...', verboseOnly: true })
334339

335340
let prevStatus

test/commands/app/deploy.test.js

Lines changed: 68 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const mockDbLib = require('@adobe/aio-lib-db')
3838

3939
jest.mock('@adobe/aio-lib-core-config')
4040
const mockConfig = require('@adobe/aio-lib-core-config')
41+
const MOCK_ACCESS_TOKEN = 'mocktoken'
4142

4243
const 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

Comments
 (0)