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

"""Unit tests for the chrome_chromeos_lkgm program."""

from unittest import mock

from chromite.lib import chromeos_version
from chromite.lib import cros_test_lib
from chromite.scripts import chrome_chromeos_lkgm


class StubGerritChange:
    """Stab class corresponding to cros_patch.GerritChange."""

    def __init__(
        self,
        gerrit_number,
        file_content,
        subject,
        mergeable=True,
        original_file_content=None,
    ) -> None:
        self._gerrit_number = gerrit_number
        self._subject = subject
        self._file_content = file_content
        self._mergeable = mergeable
        self._original_file_content = original_file_content or file_content

    @property
    def subject(self):
        return self._subject

    @property
    def gerrit_number(self):
        return self._gerrit_number

    def GetFileContents(self, _path: str):
        return self._file_content

    def GetOriginalFileContents(self, _path: str):
        return self._original_file_content

    def IsMergeable(self):
        return self._mergeable

    def Rebase(self, allow_conflicts: bool = False) -> None:
        pass


# pylint: disable=protected-access
class ChromeLKGMCommitterTester(
    cros_test_lib.RunCommandTestCase, cros_test_lib.MockTempDirTestCase
):
    """Test cros_chromeos_lkgm.Committer."""

    def testCommitNewLKGM(self) -> None:
        """Tests that we can commit a new LKGM file."""
        committer = chrome_chromeos_lkgm.ChromeLKGMCommitter(
            "1001.0.0",
            "main",
            chromeos_version.VersionInfo("999.0.0"),
            False,
        )

        with mock.patch.object(committer._gerrit_helper, "CreateChange") as cg:
            cg.return_value = mock.MagicMock(gerrit_number=123456)
            with mock.patch.object(
                committer._gerrit_helper, "ChangeEdit"
            ) as ce:
                with mock.patch.object(
                    committer._gerrit_helper, "SetReview"
                ) as bc:
                    with mock.patch.object(
                        committer._gerrit_helper, "SetHashtags"
                    ):
                        committer.UpdateLKGM()
                        ce.assert_called_once_with(
                            123456, "chromeos/CHROMEOS_LKGM", "1001.0.0"
                        )
                        bc.assert_called_once_with(
                            123456,
                            labels={"Bot-Commit": 1, "Commit-Queue": 2},
                            notify="NONE",
                            ready=True,
                            reviewers=[
                                "chrome-os-gardeners-reviews@google.com"
                            ],
                        )

    def testOlderLKGMFails(self) -> None:
        """Tests that trying to update to an older lkgm version fails."""
        committer = chrome_chromeos_lkgm.ChromeLKGMCommitter(
            "1001.0.0",
            "main",
            chromeos_version.VersionInfo("1002.0.0"),
            False,
        )
        with mock.patch.object(committer._gerrit_helper, "CreateChange") as cg:
            cg.return_value = mock.MagicMock(gerrit_number=123456)
            with mock.patch.object(
                committer._gerrit_helper, "ChangeEdit"
            ) as ce:
                self.assertRaises(
                    chrome_chromeos_lkgm.LKGMNotValid, committer.UpdateLKGM
                )
                ce.assert_not_called()

    def testAbandonObsoleteLKGMs(self) -> None:
        """Tests that trying to abandon the obsolete lkgm CLs."""
        cleaner = chrome_chromeos_lkgm.ChromeLKGMCleaner(
            "main", chromeos_version.VersionInfo("10002.0.0"), "USER_EMAIL"
        )

        older_change = StubGerritChange(
            3876550, "10001.0.0", "10001.0.0", mergeable=False
        )
        newer_change = StubGerritChange(3876551, "10003.0.0", "10003.0.0")
        open_issues = [older_change, newer_change]

        with mock.patch.object(
            cleaner._gerrit_helper, "Query", return_value=open_issues
        ) as mock_query:
            with mock.patch.object(
                cleaner._gerrit_helper, "AbandonChange"
            ) as ac:
                cleaner.ProcessObsoleteLKGMRolls()
                mock_query.assert_called_once()
                ac.assert_called_once_with((older_change), msg=mock.ANY)

    def testRebaseObsoleteLKGMs(self) -> None:
        """Tests that trying to abandon the obsolete lkgm CLs."""
        cleaner = chrome_chromeos_lkgm.ChromeLKGMCleaner(
            "main", chromeos_version.VersionInfo("10002.0.0"), "USER_EMAIL"
        )

        # LKGM Roll CL from "10001.0.0" to "10003.0.0" should be in the
        # merge-conflict state, since the current LKGM version is "10002.0.0".
        ROLL_FROM = "10001.0.0"
        ROLL_TO = "10003.0.0"
        GERRIT_NUM = 3876551
        roll = StubGerritChange(
            GERRIT_NUM,
            ROLL_TO,
            ROLL_TO,
            mergeable=False,
            original_file_content=ROLL_FROM,
        )

        with mock.patch.object(
            cleaner._gerrit_helper, "Query", return_value=[roll]
        ) as mock_query:
            with mock.patch.object(roll, "Rebase") as rebase:
                with mock.patch.object(
                    cleaner._gerrit_helper, "ChangeEdit"
                ) as ce:
                    cleaner.ProcessObsoleteLKGMRolls()
                    mock_query.assert_called_once()

                    # Confirm that it does rebasing.
                    rebase.assert_called_once_with(allow_conflicts=True)
                    ce.assert_called_once_with(GERRIT_NUM, mock.ANY, ROLL_TO)

    def testDoNothingObsoleteLKGMs(self) -> None:
        """Tests that trying to abandon the obsolete lkgm CLs."""
        cleaner = chrome_chromeos_lkgm.ChromeLKGMCleaner(
            "main", chromeos_version.VersionInfo("10002.0.0"), "USER_EMAIL"
        )

        # LKGM Roll CL from "10002.0.0" to "10003.0.0" should NOT be in the
        # merge-conflict state, since the current LKGM version is "10002.0.0".
        ROLL_FROM = "10002.0.0"
        ROLL_TO = "10003.0.0"
        GERRIT_NUM = 3876551
        # Even if mergeable=False, the logic should not do nothing.
        roll = StubGerritChange(
            GERRIT_NUM,
            ROLL_TO,
            ROLL_TO,
            mergeable=False,
            original_file_content=ROLL_FROM,
        )

        with mock.patch.object(
            cleaner._gerrit_helper, "Query", return_value=[roll]
        ) as mock_query:
            with mock.patch.object(roll, "Rebase") as rebase:
                with mock.patch.object(
                    cleaner._gerrit_helper, "ChangeEdit"
                ) as ce:
                    cleaner.ProcessObsoleteLKGMRolls()
                    mock_query.assert_called_once()

                    # Confirm that it does nothing.
                    rebase.assert_not_called()
                    ce.assert_not_called()

    def testVersionWithChromeBranch(self) -> None:
        """Tests passing a version with a chrome branch strips the branch."""
        branch = "refs/branch-heads/5000"
        committer = chrome_chromeos_lkgm.ChromeLKGMCommitter(
            "1003.0.0-rc2",
            branch,
            chromeos_version.VersionInfo("1002.0.0"),
            False,
        )

        with mock.patch.object(committer._gerrit_helper, "CreateChange") as cg:
            cg.return_value = mock.MagicMock(gerrit_number=123456)
            with mock.patch.object(
                committer._gerrit_helper, "ChangeEdit"
            ) as ce:
                with mock.patch.object(
                    committer._gerrit_helper, "SetReview"
                ) as bc:
                    with mock.patch.object(
                        committer._gerrit_helper, "SetHashtags"
                    ):
                        # Check the file was actually written out correctly.
                        committer.UpdateLKGM()
                        cg.assert_called_once_with(
                            "chromium/src", branch, mock.ANY, False
                        )
                        ce.assert_called_once_with(
                            123456, "chromeos/CHROMEOS_LKGM", "1003.0.0"
                        )
                        bc.assert_called_once_with(
                            123456,
                            labels={"Bot-Commit": 1, "Commit-Queue": 2},
                            notify="NONE",
                            ready=True,
                            reviewers=[
                                "chrome-os-gardeners-reviews@google.com"
                            ],
                        )

    def testCommitMsg(self) -> None:
        """Tests format of the commit message."""
        committer = chrome_chromeos_lkgm.ChromeLKGMCommitter(
            "1001.0.0",
            "main",
            chromeos_version.VersionInfo("999.0.0"),
            False,
            buildbucket_id="some-build-id",
        )

        committer._PRESUBMIT_BOTS = ["bot1", "bot2"]
        commit_msg_lines = committer.ComposeCommitMsg().splitlines()
        self.assertIn(
            "Automated Commit: LKGM 1001.0.0 for chromeos.", commit_msg_lines
        )
        self.assertIn(
            "Uploaded by https://ci.chromium.org/b/some-build-id",
            commit_msg_lines,
        )
        self.assertIn(
            "CQ_INCLUDE_TRYBOTS=luci.chrome.try:bot1", commit_msg_lines
        )
        self.assertIn(
            "CQ_INCLUDE_TRYBOTS=luci.chrome.try:bot2", commit_msg_lines
        )
