#!/usr/bin/env vpython3
# Copyright 2020 The Chromium Authors
# 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  # noqa: E402


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()
