423
423
mp.all_comments = [comment]
424
424
self.assertEqual(
425
launchpadutils.get_latest_review(self.launchpad_user, mp), 47)
425
launchpadutils.get_latest_review(self.launchpad_user, mp), '47')
427
427
@patch('jlp.launchpadutils.get_latest_review', new=lambda x, y: 60)
428
428
def test_new_mp_candidate_revision_in_queue(self):
448
448
self.launchpad_user, mp)
449
449
self.assertTrue(ret)
451
class TestLatestReviewForGitMPs(unittest.TestCase):
453
self.launchpad_user = MagicMock()
454
self.jenkinsUserName = 'name'
455
self.launchpad_user.name = self.jenkinsUserName
459
mp.web_link = 'https://code.launchpad.net/~user/project/+git/project/+merge/777'
462
def create_mp_with_revision(self, revision):
463
mp = self.create_mp()
464
path = "refs/heads/nice"
467
ref.commit_sha1 = revision
468
mp.source_git_path = path
469
mp.source_git_repository.refs_collection = [ref]
472
def test_get_latest_review_no_comments(self):
473
mp = self.create_mp()
476
launchpadutils.get_latest_review(self.launchpad_user, mp), 0)
478
def test_get_latest_review_unrelated_comment(self):
479
mp = self.create_mp()
480
comment = MagicMock()
481
comment.vote_tag = get_config_option('launchpad_review_type')
482
comment.message_body = 'unrelated comment'
483
mp.all_comments = [comment]
485
launchpadutils.get_latest_review(self.launchpad_user, mp), 0)
487
def test_get_latest_review_which_passed(self):
488
mp = self.create_mp()
489
comment = MagicMock()
490
comment.author.name = self.jenkinsUserName
491
comment.vote_tag = get_config_option('launchpad_review_type')
492
comment.message_body = "PASSED: Continuous integration, rev:2fd4e1c67a2d28fced849ee1bb76e7391b93eb12\n" + \
494
mp.all_comments = [comment]
496
launchpadutils.get_latest_review(self.launchpad_user, mp), '2fd4e1c67a2d28fced849ee1bb76e7391b93eb12')
498
def test_get_latest_review_which_failed(self):
499
mp = self.create_mp()
500
comment = MagicMock()
501
comment.author.name = self.jenkinsUserName
502
comment.vote_tag = get_config_option('launchpad_review_type')
503
comment.message_body = "FAILED: Continuous integration, rev:2fd4e1c67a2d28fced849ee1bb76e7391b93eb12\n" + \
505
mp.all_comments = [comment]
507
launchpadutils.get_latest_review(self.launchpad_user, mp), '2fd4e1c67a2d28fced849ee1bb76e7391b93eb12')
509
@patch('jlp.launchpadutils.get_latest_review', new=lambda x, y: '2fd4e1c67a2d28fced849ee1bb76e7391b93eb12')
510
def test_new_mp_candidate_revision_in_queue(self):
511
mp = self.create_mp_with_revision('de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3')
512
ret = launchpadutils.latest_candidate_validated(
513
self.launchpad_user, mp)
514
self.assertFalse(ret)
516
@patch('jlp.launchpadutils.get_latest_review', new=lambda x, y: '2fd4e1c67a2d28fced849ee1bb76e7391b93eb12')
517
def test_mp_already_validated(self):
518
mp = self.create_mp_with_revision('2fd4e1c67a2d28fced849ee1bb76e7391b93eb12')
519
ret = launchpadutils.latest_candidate_validated(
520
self.launchpad_user, mp)
452
523
class TestApproveAndDisapprove(unittest.TestCase):
453
524
jenkinsUserName = 'jenkins-user'
459
530
mp.source_branch.display_name = 'lp:~ps-jenkins/unity/fix'
533
def _get_git_mp(self):
535
mp.web_link = 'https://code.launchpad.net/~dummy/agitproject/+git/gitproject/+merge/778899'
536
mp.target_git_repository.display_name = 'lp:agitproject'
537
mp.source_git_repository.display_name = 'lp:~auser/gitrepo'
538
mp.source_git_path = 'refs/heads/abranch'
539
mp.target_git_path = 'refs/heads/master'
462
542
def _get_subject(self, mp):
463
543
return 'Re: [Merge] {} into {}'.format(
464
544
mp.source_branch.display_name, mp.target_branch.display_name)
546
def _expected_git_mp_subject(self, mp):
547
source = mp.source_git_repository.display_name.replace('lp:', '') + \
549
mp.source_git_path.replace('refs/heads/', '')
550
target = mp.target_git_repository.display_name.replace('lp:', '') + \
552
mp.target_git_path.replace('refs/heads/', '')
554
return 'Re: [Merge] {} into {}'.format(source, target)
467
557
user = MagicMock()
468
558
user.name = self.jenkinsUserName
624
def test_approve_git_mp(self):
625
mp = self._get_git_mp()
626
subject = self._expected_git_mp_subject(mp)
627
launchpadutils.approve_mp(mp, '1', 'http://url')
628
content = dedent('''\
629
PASSED: Continuous integration, rev:1
632
Click here to trigger a rebuild:
635
mp.createComment.assert_called_once_with(
636
review_type=get_config_option('launchpad_review_type'),
637
vote=launchpadutils.LaunchpadVote.APPROVE,
641
def test_dissaprove_git_mp(self):
642
mp = self._get_git_mp()
643
subject = self._expected_git_mp_subject(mp)
644
launchpadutils.disapprove_mp(mp, '1', 'http://url')
645
content = dedent('''\
646
FAILED: Continuous integration, rev:1
649
Click here to trigger a rebuild:
652
mp.createComment.assert_called_once_with(
653
review_type=get_config_option('launchpad_review_type'),
654
vote=launchpadutils.LaunchpadVote.NEEDS_FIXING,
535
659
class TestGetMergeProposalsWithInvalidBranch(unittest.TestCase):
536
660
branch_with_mps = None
649
773
ret = launchpadutils.get_mp_handle_from_url(launchpad, mp_url)
650
774
self.assertEquals(ret, mp)
776
def test_call_git_api_for_git_url(self):
777
"""If there is a merge proposal for the given merge proposal URL then
778
get_mp_handle_from_url must return the respective merge proposal
781
mp_url = 'https://code.launchpad.net/~dummy/agitproject/+git/gitproject/+merge/778899'
782
launchpad = MagicMock()
786
git_repo.landing_targets = [mp]
787
launchpad.git_repositories.getByPath = lambda path: git_repo
788
ret = launchpadutils.get_mp_handle_from_url(launchpad, mp_url)
789
self.assertEquals(ret, mp)
652
791
class TestGetBranchHandle(unittest.TestCase):
654
793
'''Setup an empty launchpad.'''