class BitbucketTests(TestCase):
    def setUp(self):
        self.tracker = Bitbucket(repo_user='******', repo_name='repo_name')

    def test_get_issue_list_url(self):
        with patch.object(self.tracker, 'get_list_limit') as mock_get_limit:
            mock_get_limit.return_value = '12345'

            eq_(self.tracker.get_issue_list_url(sentinel.config, sentinel.options),
                "https://bitbucket.org/api/1.0/repositories/repo_user"
                "/repo_name/issues?limit=12345")
            mock_get_limit.assert_called_once_with(sentinel.config, sentinel.options)


    def test_parse_issue_list(self):
        objects = {
            sentinel.json_1: sentinel.issue_1,
            sentinel.json_2: sentinel.issue_2,
            sentinel.json_3: sentinel.issue_3,
        }
        json_list = list(objects)
        with patch.object(self.tracker, 'parse_issue') as mock_parse_issue:
            mock_parse_issue.side_effect = lambda x, c, o: objects[x]

            parsed = self.tracker.parse_issue_list({'issues': json_list}, sentinel.config, sentinel.options)

            mock_parse_issue.assert_any_call(sentinel.json_1, sentinel.config, sentinel.options)
            mock_parse_issue.assert_any_call(sentinel.json_2, sentinel.config, sentinel.options)
            mock_parse_issue.assert_any_call(sentinel.json_3, sentinel.config, sentinel.options)
            eq_(parsed, [objects[x] for x in json_list])


    def test_get_issue_url(self):
        eq_(self.tracker.get_issue_url('the_issue', sentinel.config, sentinel.options),
            'https://bitbucket.org/api/1.0/repositories/repo_user/'
            'repo_name/issues/the_issue')