@@ -16,6 +16,7 @@ import {
1616 createParamsSourcePrompter ,
1717 getBuildFlags ,
1818 ParamsSource ,
19+ resolveBuildFlags ,
1920 runBuild ,
2021} from '../../../shared/sam/build'
2122import { TreeNode } from '../../../shared/treeview/resourceTreeDataProvider'
@@ -26,12 +27,14 @@ import { getProjectRootUri } from '../../../shared/sam/utils'
2627import sinon from 'sinon'
2728import { createMultiPick , DataQuickPickItem } from '../../../shared/ui/pickerPrompter'
2829import * as config from '../../../shared/sam/config'
30+ import * as utils from '../../../shared/sam/utils'
2931import { PrompterTester } from '../wizards/prompterTester'
3032import { getWorkspaceFolder , TestFolder } from '../../testUtil'
3133import { samconfigCompleteData , validTemplateData } from './samTestUtils'
3234import { CloudFormationTemplateRegistry } from '../../../shared/fs/templateRegistry'
3335import { getTestWindow } from '../vscode/window'
3436import { CancellationError } from '../../../shared/utilities/timeoutUtils'
37+ import { SemVer } from 'semver'
3538
3639describe ( 'SAM BuildWizard' , async function ( ) {
3740 const createTester = async ( params ?: Partial < BuildParams > , arg ?: TreeNode | undefined ) =>
@@ -229,6 +232,38 @@ describe('SAM build helper functions', () => {
229232 assert . deepStrictEqual ( quickPick . items , expectedItems )
230233 } )
231234 } )
235+
236+ describe ( 'resolveBuildFlags' , ( ) => {
237+ let sandbox : sinon . SinonSandbox
238+ beforeEach ( ( ) => {
239+ sandbox = sinon . createSandbox ( )
240+ } )
241+
242+ afterEach ( ( ) => {
243+ sandbox . restore ( )
244+ } )
245+
246+ it ( 'uses --no-use-container when --use-container is absent' , async ( ) => {
247+ const normalVersion = new SemVer ( '1.133.0' )
248+ const buildFlags = [ '--cached' , '--debug' , '--parallel' ]
249+ const expectedBuildFlags = [ '--cached' , '--debug' , '--parallel' , '--no-use-container' ]
250+ return testResolveBuildFlags ( sandbox , normalVersion , buildFlags , expectedBuildFlags )
251+ } )
252+
253+ it ( 'preserves buildFlags when SAM CLI version < 1.133' , async ( ) => {
254+ const lowerVersion = new SemVer ( '1.110.0' )
255+ const buildFlags = [ '--cached' , '--parallel' , '--save-params' ]
256+ const expectedBuildFlags = [ '--cached' , '--parallel' , '--save-params' ]
257+ return testResolveBuildFlags ( sandbox , lowerVersion , buildFlags , expectedBuildFlags )
258+ } )
259+
260+ it ( 'respects existing --use-container flag' , async ( ) => {
261+ const normalVersion = new SemVer ( '1.110.0' )
262+ const buildFlags = [ '--cached' , '--parallel' , '--save-params' , '--use-container' ]
263+ const expectedBuildFlags = [ '--cached' , '--parallel' , '--save-params' , '--use-container' ]
264+ return testResolveBuildFlags ( sandbox , normalVersion , buildFlags , expectedBuildFlags )
265+ } )
266+ } )
232267} )
233268
234269describe ( 'SAM runBuild' , ( ) => {
@@ -551,3 +586,16 @@ describe('SAM runBuild', () => {
551586 } )
552587 } )
553588} )
589+
590+ function testResolveBuildFlags (
591+ sandbox : sinon . SinonSandbox ,
592+ parsedVersion : SemVer ,
593+ buildFlags : string [ ] ,
594+ expectedBuildFlags : string [ ]
595+ ) {
596+ const pathAndVersionStub = sandbox . stub ( ) . resolves ( { path : 'file:///path/to/cli' , parsedVersion } )
597+ sandbox . stub ( utils , 'getSamCliPathAndVersion' ) . callsFake ( pathAndVersionStub )
598+ return resolveBuildFlags ( buildFlags , parsedVersion ) . then ( ( resolvedBuildFlags ) => {
599+ assert . deepEqual ( resolvedBuildFlags , expectedBuildFlags )
600+ } )
601+ }
0 commit comments