1313 _handle_missing_parameters ,
1414 UsePreviousParameterValue ,
1515)
16+ from stacker .blueprints .base import Blueprint
1617from stacker .blueprints .variables .types import CFNString
1718from stacker .context import Context , Config
1819from stacker .exceptions import StackDidNotChange , StackDoesNotExist
1920from stacker .providers .base import BaseProvider
2021from stacker .providers .aws .default import Provider
2122from stacker .session_cache import get_session
23+ from stacker .stack import Stack
2224from stacker .status import (
2325 NotSubmittedStatus ,
2426 COMPLETE ,
2830 FAILED
2931)
3032
31- from ..factories import MockThreadingEvent , MockProviderBuilder
33+ from ..factories import (
34+ MockThreadingEvent ,
35+ MockProviderBuilder ,
36+ generate_definition
37+ )
3238
3339
3440def mock_stack_parameters (parameters ):
@@ -155,22 +161,6 @@ def test_execute_plan_when_outline_not_specified(self):
155161 build_action .run (outline = False )
156162 self .assertEqual (mock_generate_plan ().execute .call_count , 1 )
157163
158- def test_should_update (self ):
159- test_scenarios = (
160- dict (blueprint = None , locked = False , force = False , result = False ),
161- dict (blueprint = "BLUEPRINT" , locked = False , force = False ,
162- result = True ),
163- dict (blueprint = "BLUEPRINT" , locked = False , force = True , result = True ),
164- dict (blueprint = "BLUEPRINT" , locked = True , force = False ,
165- result = False ),
166- dict (blueprint = "BLUEPRINT" , locked = True , force = True , result = True )
167- )
168- for t in test_scenarios :
169- mock_stack = mock .MagicMock (
170- ["blueprint" , "locked" , "force" , "name" ],
171- name = 'test-stack' , ** t )
172- self .assertEqual (build .should_update (mock_stack ), t ['result' ])
173-
174164 def test_should_ensure_cfn_bucket (self ):
175165 test_scenarios = [
176166 dict (outline = False , dump = False , result = True ),
@@ -191,21 +181,18 @@ def test_should_ensure_cfn_bucket(self):
191181 e .args += ("scenario" , str (scenario ))
192182 raise
193183
194- def test_should_submit (self ):
195- test_scenarios = (
196- dict (blueprint = None , enabled = False , result = True ),
197- dict (blueprint = "BLUEPRINT" , enabled = False , result = False ),
198- dict (blueprint = "BLUEPRINT" , enabled = True , result = True ),
199- )
200184
201- for t in test_scenarios :
202- mock_stack = mock .MagicMock (
203- ["blueprint" , "enabled" , "name" ],
204- name = 'test-stack' , ** t )
205- self .assertEqual (build .should_submit (mock_stack ), t ['result' ])
185+ class TestLaunchStack (TestBuildAction ):
186+ def _get_stack (self ):
187+ stack = Stack (definition = generate_definition ("vpc" , 1 ),
188+ context = self .context ,)
206189
190+ blueprint_mock = mock .patch .object (type (stack ), 'blueprint' ,
191+ spec = Blueprint , rendered = '{}' )
192+ self .addCleanup (blueprint_mock .stop )
193+ blueprint_mock .start ()
194+ return stack
207195
208- class TestLaunchStack (TestBuildAction ):
209196 def setUp (self ):
210197 self .context = self ._get_context ()
211198 self .session = get_session (region = None )
@@ -215,13 +202,7 @@ def setUp(self):
215202 self .build_action = build .Action (self .context ,
216203 provider_builder = provider_builder ,
217204 cancel = MockThreadingEvent ())
218-
219- self .stack = mock .MagicMock ()
220- self .stack .region = None
221- self .stack .name = 'vpc'
222- self .stack .fqn = 'vpc'
223- self .stack .blueprint .rendered = '{}'
224- self .stack .locked = False
205+ self .stack = self ._get_stack ()
225206 self .stack_status = None
226207
227208 plan = self .build_action ._generate_plan ()
@@ -233,14 +214,16 @@ def patch_object(*args, **kwargs):
233214 self .addCleanup (m .stop )
234215 m .start ()
235216
236- def get_stack (name , * args , ** kwargs ):
237- if name != self .stack .name or not self .stack_status :
238- raise StackDoesNotExist (name )
217+ def get_stack (fqn , * args , ** kwargs ):
218+ if fqn != self .stack .fqn or not self .stack_status :
219+ raise StackDoesNotExist (fqn )
239220
221+ tags = [{'Key' : key , 'Value' : value }
222+ for (key , value ) in self .stack .tags .items ()]
240223 return {'StackName' : self .stack .name ,
241224 'StackStatus' : self .stack_status ,
242- 'Outputs' : [] ,
243- 'Tags' : [] }
225+ 'Outputs' : {} ,
226+ 'Tags' : tags }
244227
245228 patch_object (self .provider , 'get_stack' , side_effect = get_stack )
246229 patch_object (self .provider , 'update_stack' )
0 commit comments