#!/usr/bin/env vpython3
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import os
import sys
import unittest

from datetime import datetime

DEPOT_TOOLS_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, DEPOT_TOOLS_ROOT)

import my_activity


class MyActivityTest(unittest.TestCase):
    def test_datetime_to_midnight(self):
        self.assertEqual(
            datetime(2020, 9, 12),
            my_activity.datetime_to_midnight(datetime(2020, 9, 12, 13, 0, 0)))
        self.assertEqual(
            datetime(2020, 12, 31),
            my_activity.datetime_to_midnight(datetime(2020, 12, 31, 23, 59,
                                                      59)))
        self.assertEqual(
            datetime(2020, 12, 31),
            my_activity.datetime_to_midnight(datetime(2020, 12, 31)))

    def test_get_quarter_of(self):
        self.assertEqual((datetime(2020, 7, 1), datetime(2020, 10, 1)),
                         my_activity.get_quarter_of(datetime(2020, 9, 12)))
        # Quarter range includes beginning
        self.assertEqual((datetime(2020, 10, 1), datetime(2021, 1, 1)),
                         my_activity.get_quarter_of(datetime(2020, 10, 1)))
        # Quarter range excludes end
        self.assertEqual((datetime(2021, 1, 1), datetime(2021, 4, 1)),
                         my_activity.get_quarter_of(datetime(2021, 1, 1)))
        self.assertEqual(
            (datetime(2020, 10, 1), datetime(2021, 1, 1)),
            my_activity.get_quarter_of(datetime(2020, 12, 31, 23, 59, 59)))

    def test_get_year_of(self):
        self.assertEqual((datetime(2020, 1, 1), datetime(2021, 1, 1)),
                         my_activity.get_year_of(datetime(2020, 9, 12)))
        # Year range includes beginning
        self.assertEqual((datetime(2020, 1, 1), datetime(2021, 1, 1)),
                         my_activity.get_year_of(datetime(2020, 1, 1)))
        # Year range excludes end
        self.assertEqual((datetime(2021, 1, 1), datetime(2022, 1, 1)),
                         my_activity.get_year_of(datetime(2021, 1, 1)))

    def test_get_week_of(self):
        self.assertEqual((datetime(2020, 9, 7), datetime(2020, 9, 14)),
                         my_activity.get_week_of(datetime(2020, 9, 12)))
        # Week range includes beginning
        self.assertEqual((datetime(2020, 9, 7), datetime(2020, 9, 14)),
                         my_activity.get_week_of(datetime(2020, 9, 7)))
        # Week range excludes beginning
        self.assertEqual((datetime(2020, 9, 14), datetime(2020, 9, 21)),
                         my_activity.get_week_of(datetime(2020, 9, 14)))

    def _get_issue_with_description(self, description):
        return {
            'current_revision': 'rev',
            'revisions': {
                'rev': {
                    'commit': {
                        'message': description
                    }
                }
            },
        }

    def test_extract_bug_numbers_from_description(self):
        issue = self._get_issue_with_description(
            'Title\n'
            '\n'
            'Description\n'
            'A comment:\n'
            '> Bug: 1234, another:5678\n'
            '\n'
            'Bug: another:1234, 5678\n'
            'BUG=project:13141516\n'
            'Fixed: fixed:9101112\n'
            'Change-Id: Iabcdef1234567890\n')
        self.assertEqual([
            'another:1234', 'chromium:5678', 'fixed:9101112', 'project:13141516'
        ], my_activity.extract_bug_numbers_from_description(issue))


if __name__ == '__main__':
    unittest.main()