Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions packages/core/src/shared/sam/sync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ import { TemplateItem, createTemplatePrompter } from '../ui/sam/templatePrompter
import { createStackPrompter } from '../ui/sam/stackPrompter'
import { ParamsSource, createSyncParamsSourcePrompter } from '../ui/sam/paramsSourcePrompter'
import { createEcrPrompter } from '../ui/sam/ecrPrompter'
import { BucketSource, createBucketNamePrompter } from '../ui/sam/bucketPrompter'
import { BucketSource, createBucketNamePrompter, createBucketSourcePrompter } from '../ui/sam/bucketPrompter'
import { runInTerminal } from './processTerminal'

export interface SyncParams {
Expand Down Expand Up @@ -175,12 +175,15 @@ export class SyncWizard extends Wizard<SyncParams> {
paramsSource === ParamsSource.Specify || paramsSource === ParamsSource.SpecifyAndSave,
}
)
this.form.bucketSource.bindPrompter(() => createBucketSourcePrompter(), {
showWhen: ({ paramsSource }) =>
paramsSource === ParamsSource.Specify || paramsSource === ParamsSource.SpecifyAndSave,
})

this.form.bucketName.bindPrompter(
({ region }) => createBucketNamePrompter(new DefaultS3Client(region!), syncMementoRootKey),
{
showWhen: ({ paramsSource }) =>
paramsSource === ParamsSource.Specify || paramsSource === ParamsSource.SpecifyAndSave,
showWhen: ({ bucketSource }) => bucketSource === BucketSource.UserProvided,
}
)

Expand Down
122 changes: 87 additions & 35 deletions packages/core/src/test/shared/sam/sync.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,31 +66,12 @@ import { createTestRegionProvider } from '../regions/testUtil'
import { ToolkitPromptSettings } from '../../../shared/settings'
import { DefaultEcrClient } from '../../../shared/clients/ecrClient'
import assert from 'assert'
import { BucketSource } from '../../../shared/ui/sam/bucketPrompter'

describe('SAM SyncWizard', async function () {
const createTester = async (params?: Partial<SyncParams>) =>
createWizardTester(new SyncWizard({ deployType: 'code', ...params }, await globals.templateRegistry))

it('shows steps in correct order', async function () {
const tester = await createTester()
tester.template.assertShowFirst()
tester.paramsSource.assertShowSecond()
tester.projectRoot.assertDoesNotShow()

const workspaceUri = vscode.workspace.workspaceFolders?.[0]?.uri || vscode.Uri.file('/')
const rootFolderUri = vscode.Uri.joinPath(workspaceUri, 'my')
const templateUri = vscode.Uri.joinPath(rootFolderUri, 'template.yaml')
const tester2 = await createTester({
template: { uri: templateUri, data: createBaseTemplate() },
paramsSource: ParamsSource.SpecifyAndSave,
projectRoot: rootFolderUri,
})
tester2.region.assertShow(1)
tester2.stackName.assertShow(2)
tester2.bucketName.assertShow(3)
tester2.projectRoot.assertDoesNotShow()
})

it('skips prompts if user chooses samconfig file as params source', async function () {
const workspaceUri = vscode.workspace.workspaceFolders?.[0]?.uri || vscode.Uri.file('/')
const rootFolderUri = vscode.Uri.joinPath(workspaceUri, 'my')
Expand Down Expand Up @@ -190,7 +171,8 @@ describe('SAM SyncWizard', async () => {
* - paramsSource : [Select] 1. ('Specify required parameters and save as defaults')
* - region : [Select] 'us-west-2'
* - stackName : [Select] 1. 'stack1'
* - bucketName : [Select] 1. 'stack-1-bucket'
* - bucketSource : [Select] 1. BucketSource.SamCliManaged
* - bucketName : [Skip] undefined
* - syncFlags : [Select] ["--dependency-layer","--use-container","--save-params"]
*/

Expand Down Expand Up @@ -221,12 +203,17 @@ describe('SAM SyncWizard', async () => {
assert.strictEqual(quickPick.items[2].label, 'stack3')
quickPick.acceptItem(quickPick.items[0])
})
.handleQuickPick('Select an S3 Bucket', async (picker) => {
.handleQuickPick('Specify S3 bucket for deployment artifacts', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 3)
assert.strictEqual(picker.items[0].label, 'stack-1-bucket')
assert.strictEqual(picker.items[1].label, 'stack-2-bucket')
assert.strictEqual(picker.items[2].label, 'stack-3-bucket')
assert.strictEqual(picker.items.length, 2)
assert.deepEqual(picker.items[0], {
label: 'Create a SAM CLI managed S3 bucket',
data: BucketSource.SamCliManaged,
})
assert.deepEqual(picker.items[1], {
label: 'Specify an S3 bucket',
data: BucketSource.UserProvided,
})
picker.acceptItem(picker.items[0])
})
.handleQuickPick('Specify parameters for sync', async (picker) => {
Expand All @@ -248,8 +235,9 @@ describe('SAM SyncWizard', async () => {
assert.strictEqual(parameters.paramsSource, ParamsSource.Specify)
assert.strictEqual(parameters.region, 'us-west-2')
assert.strictEqual(parameters.stackName, 'stack1')
assert.strictEqual(parameters.bucketSource, BucketSource.SamCliManaged)
assert(!parameters.bucketName)
assert.strictEqual(parameters.deployType, 'infra')
assert.strictEqual(parameters.bucketName, 'stack-1-bucket')
assert.strictEqual(parameters.skipDependencyLayer, true)
assert.strictEqual(parameters.syncFlags, '["--dependency-layer","--use-container","--save-params"]')
prompterTester.assertCallAll()
Expand All @@ -263,6 +251,7 @@ describe('SAM SyncWizard', async () => {
* - paramsSource : [Select] 3. ('Use default values from samconfig')
* - region : [Skip] null; will use 'us-west-2' from samconfig
* - stackName : [Skip] null; will use 'project-1' from samconfig
* - bucketSource : [Skip] null;
* - bucketName : [Skip] automatically set for bucketSource option 1
* - syncFlags : [Skip] null; will use flags from samconfig
*/
Expand Down Expand Up @@ -319,6 +308,7 @@ describe('SAM SyncWizard', async () => {
* - paramsSource : [Select] 2. ('Specify required parameters')
* - region : [Select] 'us-west-2'
* - stackName : [Select] 2. 'stack2'
* - bucketSource : [Select] 2. BucketSource.UserProvided
* - bucketName : [select] 3. stack-3-bucket
* - syncFlags : [Select] ["--save-params"]
*/
Expand Down Expand Up @@ -346,6 +336,19 @@ describe('SAM SyncWizard', async () => {
assert.strictEqual(picker.items[2].label, 'stack3')
picker.acceptItem(picker.items[1])
})
.handleQuickPick('Specify S3 bucket for deployment artifacts', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 2)
assert.deepStrictEqual(picker.items[0], {
label: 'Create a SAM CLI managed S3 bucket',
data: BucketSource.SamCliManaged,
})
assert.deepStrictEqual(picker.items[1], {
label: 'Specify an S3 bucket',
data: BucketSource.UserProvided,
})
picker.acceptItem(picker.items[1])
})
.handleQuickPick('Select an S3 Bucket', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 3)
Expand All @@ -371,6 +374,7 @@ describe('SAM SyncWizard', async () => {
assert.strictEqual(parameters.paramsSource, ParamsSource.Specify)
assert.strictEqual(parameters.region, 'us-west-2')
assert.strictEqual(parameters.stackName, 'stack2')
assert.strictEqual(parameters.bucketSource, BucketSource.UserProvided)
assert.strictEqual(parameters.bucketName, 'stack-3-bucket')
assert.strictEqual(parameters.deployType, 'infra')
assert.strictEqual(parameters.skipDependencyLayer, true)
Expand All @@ -386,7 +390,8 @@ describe('SAM SyncWizard', async () => {
* - paramsSource : [Select] 3. ('Use default values from samconfig')
* - region : [Skip] null; will use value from samconfig file
* - stackName : [Skip] null; will use value from samconfig file
* - bucketName : [Skip] automatically set for bucketSource option 1
* - bucketSource : [Skip] null;
* - bucketName : [Skip] null; automatically set for bucketSource option 1
* - syncFlags : [Skip] null; will use flags from samconfig
*/

Expand Down Expand Up @@ -417,6 +422,7 @@ describe('SAM SyncWizard', async () => {
assert(!parameters.region)
assert(!parameters.stackName)
assert(!parameters.bucketSource)
assert(!parameters.bucketName)
assert.strictEqual(parameters.skipDependencyLayer, true)
prompterTester.assertCallAll()
})
Expand Down Expand Up @@ -471,6 +477,19 @@ describe('SAM SyncWizard', async () => {
assert.strictEqual(picker.items[2].label, 'stack3')
picker.acceptItem(picker.items[1])
})
.handleQuickPick('Specify S3 bucket for deployment artifacts', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 2)
assert.deepStrictEqual(picker.items[0], {
label: 'Create a SAM CLI managed S3 bucket',
data: BucketSource.SamCliManaged,
})
assert.deepStrictEqual(picker.items[1], {
label: 'Specify an S3 bucket',
data: BucketSource.UserProvided,
})
picker.acceptItem(picker.items[1])
})
.handleQuickPick('Select an S3 Bucket', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 3)
Expand All @@ -497,6 +516,7 @@ describe('SAM SyncWizard', async () => {
assert.strictEqual(parameters.paramsSource, ParamsSource.Specify)
assert.strictEqual(parameters.region, 'us-west-2')
assert.strictEqual(parameters.stackName, 'stack2')
assert.strictEqual(parameters.bucketSource, BucketSource.UserProvided)
assert.strictEqual(parameters.bucketName, 'stack-2-bucket')
assert.strictEqual(parameters.deployType, 'infra')
assert.strictEqual(parameters.skipDependencyLayer, true)
Expand Down Expand Up @@ -645,6 +665,19 @@ describe('SAM SyncWizard', async () => {
const select = quickPick.items.filter((i) => i.detail === 'us-west-2')[0]
quickPick.acceptItem(select || quickPick.items[0])
})
.handleQuickPick('Specify S3 bucket for deployment artifacts', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 2)
assert.deepStrictEqual(picker.items[0], {
label: 'Create a SAM CLI managed S3 bucket',
data: BucketSource.SamCliManaged,
})
assert.deepStrictEqual(picker.items[1], {
label: 'Specify an S3 bucket',
data: BucketSource.UserProvided,
})
picker.acceptItem(picker.items[1])
})
.handleQuickPick('Select an S3 Bucket', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 3)
Expand All @@ -670,6 +703,7 @@ describe('SAM SyncWizard', async () => {
assert.strictEqual(parameters.paramsSource, ParamsSource.Specify)
assert.strictEqual(parameters.region, 'us-west-2')
assert.strictEqual(parameters.stackName, 'stack2')
assert.strictEqual(parameters.bucketSource, BucketSource.UserProvided)
assert.strictEqual(parameters.bucketName, 'stack-2-bucket')
assert.strictEqual(parameters.deployType, 'infra')
assert.strictEqual(parameters.skipDependencyLayer, true)
Expand Down Expand Up @@ -720,13 +754,18 @@ describe('SAM SyncWizard', async () => {
assert.strictEqual(picker.items[2].label, 'stack3')
picker.acceptItem(picker.items[2])
})
.handleQuickPick('Select an S3 Bucket', async (picker) => {
.handleQuickPick('Specify S3 bucket for deployment artifacts', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 3)
assert.strictEqual(picker.items[0].label, 'stack-1-bucket')
assert.strictEqual(picker.items[1].label, 'stack-2-bucket')
assert.strictEqual(picker.items[2].label, 'stack-3-bucket')
picker.acceptItem(picker.items[2])
assert.strictEqual(picker.items.length, 2)
assert.deepStrictEqual(picker.items[0], {
label: 'Create a SAM CLI managed S3 bucket',
data: BucketSource.SamCliManaged,
})
assert.deepStrictEqual(picker.items[1], {
label: 'Specify an S3 bucket',
data: BucketSource.UserProvided,
})
picker.acceptItem(picker.items[0])
})
.handleQuickPick('Specify parameters for sync', async (picker) => {
await picker.untilReady()
Expand All @@ -746,7 +785,8 @@ describe('SAM SyncWizard', async () => {
assert.strictEqual(parameters.paramsSource, ParamsSource.SpecifyAndSave)
assert.strictEqual(parameters.region, 'us-west-2')
assert.strictEqual(parameters.stackName, 'stack3')
assert.strictEqual(parameters.bucketName, 'stack-3-bucket')
assert.strictEqual(parameters.bucketSource, BucketSource.SamCliManaged)
assert(!parameters.bucketName)
assert.strictEqual(parameters.deployType, 'infra')
assert.strictEqual(parameters.skipDependencyLayer, true)
assert.strictEqual(parameters.syncFlags, '["--dependency-layer","--use-container"]')
Expand Down Expand Up @@ -923,6 +963,12 @@ describe('SAM runSync', () => {
assert.strictEqual(picker.items[2].label, 'stack3')
picker.acceptItem(picker.items[2])
})
.handleQuickPick('Specify S3 bucket for deployment artifacts', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 2)
assert.strictEqual(picker.items[1].label, 'Specify an S3 bucket')
picker.acceptItem(picker.items[1])
})
.handleQuickPick('Select an S3 Bucket', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 3)
Expand Down Expand Up @@ -1002,6 +1048,12 @@ describe('SAM runSync', () => {
assert.strictEqual(quickPick.items[0].label, 'stack1')
quickPick.acceptItem(quickPick.items[0])
})
.handleQuickPick('Specify S3 bucket for deployment artifacts', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items.length, 2)
assert.strictEqual(picker.items[1].label, 'Specify an S3 bucket')
picker.acceptItem(picker.items[1])
})
.handleQuickPick('Select an S3 Bucket', async (picker) => {
await picker.untilReady()
assert.strictEqual(picker.items[0].label, 'stack-1-bucket')
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type": "Bug Fix",
"description": "SAM: Add artifact bucket source prompter for SAM sync command"
}
Loading