Skip to content

Commit ae3a17d

Browse files
committed
Promote validate-only migrations via PUT state update
1 parent 0431c13 commit ae3a17d

2 files changed

Lines changed: 15 additions & 29 deletions

File tree

azure-devops/azext_devops/dev/migration/migration.py

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -198,24 +198,9 @@ def _is_validate_only_succeeded(migration):
198198

199199

200200
def _promote_to_full_migration(migration_data, repository_id, organization):
201-
repository_id = _resolve_repository_id(repository_id)
202-
client = _get_service_client(organization)
203-
url = _build_migration_url(organization, repository_id)
204-
205-
payload = {
206-
'targetRepository': migration_data.get('targetRepository'),
207-
'targetOwnerUserId': migration_data.get('targetOwnerUserId'),
208-
'validateOnly': False,
209-
'skipValidation': 2147483647,
210-
}
211-
agent_pool = migration_data.get('agentPoolName')
212-
if agent_pool:
213-
payload['agentPoolName'] = agent_pool
214-
cutover_date = migration_data.get('scheduledCutoverDate')
215-
if cutover_date:
216-
payload['scheduledCutoverDate'] = cutover_date
217-
218-
return _send_request(client, 'POST', url, payload)
201+
del migration_data
202+
return _update_migration(repository_id, organization, detect=None,
203+
validate_only=False, status_requested='active')
219204

220205

221206
def _resolve_org_for_auth(organization, detect):

azure-devops/azext_devops/tests/latest/migration/test_migration.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -334,10 +334,6 @@ def test_resume_migration_promotes_validate_only_succeeded(self):
334334
mock_get.return_value = {
335335
'status': 'succeeded',
336336
'validateOnly': True,
337-
'targetRepository': 'https://ghe.example.com/org/repo',
338-
'targetOwnerUserId': 'testuser',
339-
'agentPoolName': 'MyPool',
340-
'scheduledCutoverDate': '2030-06-01T00:00:00Z',
341337
}
342338
mock_resolve.return_value = self._TEST_ORG
343339

@@ -346,16 +342,12 @@ def test_resume_migration_promotes_validate_only_succeeded(self):
346342
organization=self._TEST_ORG, detect=False)
347343

348344
args = mock_send.call_args[0]
349-
self.assertEqual(args[1], 'POST')
345+
self.assertEqual(args[1], 'PUT')
350346
payload = args[3]
351347
self.assertFalse(payload['validateOnly'])
352-
self.assertEqual(payload['skipValidation'], 2147483647)
353-
self.assertEqual(payload['targetRepository'], 'https://ghe.example.com/org/repo')
354-
self.assertEqual(payload['targetOwnerUserId'], 'testuser')
355-
self.assertEqual(payload['agentPoolName'], 'MyPool')
356-
self.assertEqual(payload['scheduledCutoverDate'], '2030-06-01T00:00:00Z')
348+
self.assertEqual(payload['statusRequested'], 'active')
357349

358-
def test_resume_migration_promote_omits_null_optional_fields(self):
350+
def test_resume_migration_promote_uses_only_state_transition_fields(self):
359351
with patch('azext_devops.dev.migration.migration.get_migration') as mock_get, \
360352
patch('azext_devops.dev.migration.migration.resolve_instance') as mock_resolve, \
361353
patch('azext_devops.dev.migration.migration._get_service_client') as mock_client, \
@@ -366,6 +358,9 @@ def test_resume_migration_promote_omits_null_optional_fields(self):
366358
'validateOnly': True,
367359
'targetRepository': 'https://ghe.example.com/org/repo',
368360
'targetOwnerUserId': 'testuser',
361+
'agentPoolName': 'MyPool',
362+
'scheduledCutoverDate': '2030-06-01T00:00:00Z',
363+
'skipValidation': 2147483647,
369364
}
370365
mock_resolve.return_value = self._TEST_ORG
371366

@@ -374,8 +369,14 @@ def test_resume_migration_promote_omits_null_optional_fields(self):
374369
organization=self._TEST_ORG, detect=False)
375370

376371
payload = mock_send.call_args[0][3]
372+
self.assertEqual(payload['validateOnly'], False)
373+
self.assertEqual(payload['statusRequested'], 'active')
374+
self.assertEqual(set(payload.keys()), {'validateOnly', 'statusRequested'})
377375
self.assertNotIn('agentPoolName', payload)
378376
self.assertNotIn('scheduledCutoverDate', payload)
377+
self.assertNotIn('targetRepository', payload)
378+
self.assertNotIn('targetOwnerUserId', payload)
379+
self.assertNotIn('skipValidation', payload)
379380

380381
def test_resume_succeeded_without_migration_flag_errors(self):
381382
with patch('azext_devops.dev.migration.migration.get_migration') as mock_get, \

0 commit comments

Comments
 (0)