@@ -136,83 +136,62 @@ def test_release_rollback(self, mock_requests):
136136 response = self .client .post (url )
137137 self .assertEqual (response .status_code , 201 , response .data )
138138 app_id = response .data ['id' ]
139+ app = App .objects .get (id = app_id )
139140 # try to rollback with only 1 release extant, expecting 400
140141 url = "/v2/apps/{app_id}/releases/rollback/" .format (** locals ())
141142 response = self .client .post (url )
142143 self .assertEqual (response .status_code , 400 , response .data )
143144 self .assertEqual (response .data , {'detail' : 'version cannot be below 0' })
144145 self .assertEqual (response .get ('content-type' ), 'application/json' )
145- # update config to roll a new release
146+ # update the build to roll a new release
147+ url = '/v2/apps/{app_id}/builds' .format (** locals ())
148+ body = {'image' : 'autotest/example' }
149+ response = self .client .post (url , body )
150+ self .assertEqual (response .status_code , 201 , response .data )
151+ # update config to roll another release
146152 url = '/v2/apps/{app_id}/config' .format (** locals ())
147153 body = {'values' : json .dumps ({'NEW_URL1' : 'http://localhost:8080/' })}
148154 response = self .client .post (url , body )
149155 self .assertEqual (response .status_code , 201 , response .data )
150- # TODO: edge case that fails becasue version 1 has no build object.
151- # update the build to roll a new release
152- # url = '/v2/apps/{app_id}/builds'.format(**locals())
153- # body = {'image': 'autotest/example'}
154- # response = self.client.post(url, body)
155- # self.assertEqual(response.status_code, 201, response.data)
156- # rollback and check to see that a 4th release was created
157- # with the build and config of release #2
156+ # create another release with a different build
157+ url = '/v2/apps/{app_id}/builds' .format (** locals ())
158+ body = {'image' : 'autotest/example:canary' }
159+ response = self .client .post (url , body )
160+ self .assertEqual (response .status_code , 201 , response .data )
161+ # rollback and check to see that a 5th release was created
162+ # with the build and config of release #3
158163 url = "/v2/apps/{app_id}/releases/rollback/" .format (** locals ())
159164 response = self .client .post (url )
160165 self .assertEqual (response .status_code , 201 , response .data )
161- url = '/v2/apps/{app_id}/releases' .format (** locals ())
162- response = self .client .get (url )
163- self .assertEqual (response .status_code , 200 , response .data )
164- self .assertEqual (response .data ['count' ], 3 )
165- url = '/v2/apps/{app_id}/releases/v1' .format (** locals ())
166- response = self .client .get (url )
167- self .assertEqual (response .status_code , 200 , response .data )
168- release1 = response .data
169- self .assertEqual (release1 ['version' ], 1 )
170- url = '/v2/apps/{app_id}/releases/v3' .format (** locals ())
171- response = self .client .get (url )
172- self .assertEqual (response .status_code , 200 , response .data )
173- release3 = response .data
174- self .assertEqual (release3 ['version' ], 3 )
175- self .assertNotEqual (release1 ['uuid' ], release3 ['uuid' ])
176- self .assertEqual (release1 ['build' ], release3 ['build' ])
177- self .assertEqual (release1 ['config' ], release3 ['config' ])
178- # rollback explicitly to release #1 and check that a 5th release
179- # was created with the build and config of release #1
166+ self .assertEqual (Release .objects .count (), 5 )
167+ release1 = Release .objects .get (app = app , version = 1 )
168+ release2 = Release .objects .get (app = app , version = 2 )
169+ release3 = Release .objects .get (app = app , version = 3 )
170+ release4 = Release .objects .get (app = app , version = 4 )
171+ release5 = Release .objects .get (app = app , version = 5 )
172+ # verify the rollback to v3
173+ self .assertNotEqual (release5 .uuid , release3 .uuid )
174+ self .assertNotEqual (release5 .build , release4 .build )
175+ self .assertEqual (release5 .build , release3 .build )
176+ self .assertEqual (release5 .config .values , release3 .config .values )
177+ # double-check to see that the current build and config is the same as v3
178+ self .assertEqual (release5 .build .image , 'autotest/example' )
179+ self .assertEqual (release5 .config .values , {'NEW_URL1' : 'http://localhost:8080/' })
180+ # try to rollback to v1 and verify that the rollback failed
181+ # (v1 is an initial release with no build)
180182 url = "/v2/apps/{app_id}/releases/rollback/" .format (** locals ())
181183 body = {'version' : 1 }
182184 response = self .client .post (url , body )
183- self .assertEqual (response .status_code , 201 , response .data )
184- url = '/v2/apps/{app_id}/releases' .format (** locals ())
185- response = self .client .get (url )
186- self .assertEqual (response .status_code , 200 , response .data )
187- self .assertEqual (response .data ['count' ], 4 )
188- url = '/v2/apps/{app_id}/releases/v1' .format (** locals ())
189- response = self .client .get (url )
190- self .assertEqual (response .status_code , 200 , response .data )
191- release1 = response .data
192- url = '/v2/apps/{app_id}/releases/v4' .format (** locals ())
193- response = self .client .get (url )
194- self .assertEqual (response .status_code , 200 , response .data )
195- release4 = response .data
196- self .assertEqual (release4 ['version' ], 4 )
197- self .assertNotEqual (release1 ['uuid' ], release4 ['uuid' ])
198- self .assertEqual (release1 ['build' ], release4 ['build' ])
199- self .assertEqual (release1 ['config' ], release4 ['config' ])
200- # check to see that the current config is actually the initial one
201- url = "/v2/apps/{app_id}/config" .format (** locals ())
202- response = self .client .get (url )
203- self .assertEqual (response .status_code , 200 , response .data )
204- self .assertEqual (response .data ['values' ], {})
205- # rollback to #2 and see that it has the correct config
185+ self .assertContains (response , 'Cannot roll back to initial release.' , status_code = 400 )
186+ # roll back to v2 so we can verify config gets rolled back too
206187 url = "/v2/apps/{app_id}/releases/rollback/" .format (** locals ())
207188 body = {'version' : 2 }
208189 response = self .client .post (url , body )
209190 self .assertEqual (response .status_code , 201 , response .data )
210- url = "/v2/apps/{app_id}/config" .format (** locals ())
211- response = self .client .get (url )
212- self .assertEqual (response .status_code , 200 , response .data )
213- values = response .data ['values' ]
214- self .assertIn ('NEW_URL1' , values )
215- self .assertEqual ('http://localhost:8080/' , values ['NEW_URL1' ])
191+ self .assertEqual (Release .objects .count (), 6 )
192+ release6 = Release .objects .get (app = app , version = 6 )
193+ self .assertEqual (release6 .build .image , 'autotest/example' )
194+ self .assertEqual (release6 .config .values , {})
216195
217196 def test_release_str (self , mock_requests ):
218197 """Test the text representation of a release."""
0 commit comments