# Copyright 2018 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import unittest
from unittest import mock

from core.services import buildbucket_service


class TestBuildbucketApi(unittest.TestCase):
  def setUp(self):
    self.mock_request = mock.patch('core.services.request.Request').start()
    self.mock_request.return_value = 'OK'

  def tearDown(self):
    mock.patch.stopall()

  def testGetBuild(self):
    self.assertEqual(
      buildbucket_service.GetBuild(
        'chromium', 'try', 'linux_chromium_rel_ng', 227278
      ),
      'OK',
    )
    self.mock_request.assert_called_once_with(
      buildbucket_service.SERVICE_URL + 'GetBuild',
      method='POST',
      use_auth=True,
      content_type='json',
      accept='json',
      data={
        'builder': {
          'project': 'chromium',
          'bucket': 'try',
          'builder': 'linux_chromium_rel_ng',
        },
        'buildNumber': 227278,
      },
    )

  def testGetBuilds(self):
    self.assertEqual(
      buildbucket_service.GetBuilds('chromium', 'try', 'linux_chromium_rel_ng'),
      'OK',
    )
    self.mock_request.assert_called_once_with(
      buildbucket_service.SERVICE_URL + 'SearchBuilds',
      method='POST',
      use_auth=True,
      content_type='json',
      accept='json',
      data={
        'predicate': {
          'builder': {
            'project': 'chromium',
            'bucket': 'try',
            'builder': 'linux_chromium_rel_ng',
          },
          'status': 'ENDED_MASK',
        }
      },
    )

  def testGetBuildsIncludeUnfinished(self):
    self.assertEqual(
      buildbucket_service.GetBuilds(
        'chromium', 'try', 'linux_chromium_rel_ng', only_completed=False
      ),
      'OK',
    )
    self.mock_request.assert_called_once_with(
      buildbucket_service.SERVICE_URL + 'SearchBuilds',
      method='POST',
      use_auth=True,
      content_type='json',
      accept='json',
      data={
        'predicate': {
          'builder': {
            'project': 'chromium',
            'bucket': 'try',
            'builder': 'linux_chromium_rel_ng',
          }
        }
      },
    )
