1d0825bca7fe65beaee391d30da42e937db621564Steve Block# Copyright (C) 2009 Google Inc. All rights reserved.
2d0825bca7fe65beaee391d30da42e937db621564Steve Block#
3d0825bca7fe65beaee391d30da42e937db621564Steve Block# Redistribution and use in source and binary forms, with or without
4d0825bca7fe65beaee391d30da42e937db621564Steve Block# modification, are permitted provided that the following conditions are
5d0825bca7fe65beaee391d30da42e937db621564Steve Block# met:
6d0825bca7fe65beaee391d30da42e937db621564Steve Block#
7d0825bca7fe65beaee391d30da42e937db621564Steve Block#    * Redistributions of source code must retain the above copyright
8d0825bca7fe65beaee391d30da42e937db621564Steve Block# notice, this list of conditions and the following disclaimer.
9d0825bca7fe65beaee391d30da42e937db621564Steve Block#    * Redistributions in binary form must reproduce the above
10d0825bca7fe65beaee391d30da42e937db621564Steve Block# copyright notice, this list of conditions and the following disclaimer
11d0825bca7fe65beaee391d30da42e937db621564Steve Block# in the documentation and/or other materials provided with the
12d0825bca7fe65beaee391d30da42e937db621564Steve Block# distribution.
13d0825bca7fe65beaee391d30da42e937db621564Steve Block#    * Neither the name of Google Inc. nor the names of its
14d0825bca7fe65beaee391d30da42e937db621564Steve Block# contributors may be used to endorse or promote products derived from
15d0825bca7fe65beaee391d30da42e937db621564Steve Block# this software without specific prior written permission.
16d0825bca7fe65beaee391d30da42e937db621564Steve Block#
17d0825bca7fe65beaee391d30da42e937db621564Steve Block# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18d0825bca7fe65beaee391d30da42e937db621564Steve Block# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19d0825bca7fe65beaee391d30da42e937db621564Steve Block# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20d0825bca7fe65beaee391d30da42e937db621564Steve Block# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21d0825bca7fe65beaee391d30da42e937db621564Steve Block# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22d0825bca7fe65beaee391d30da42e937db621564Steve Block# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23d0825bca7fe65beaee391d30da42e937db621564Steve Block# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24d0825bca7fe65beaee391d30da42e937db621564Steve Block# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25d0825bca7fe65beaee391d30da42e937db621564Steve Block# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26d0825bca7fe65beaee391d30da42e937db621564Steve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27d0825bca7fe65beaee391d30da42e937db621564Steve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28d0825bca7fe65beaee391d30da42e937db621564Steve Block
29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.thirdparty.mock import Mock
30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.tool.commands.commandtest import CommandsTest
31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockfrom webkitpy.tool.commands.upload import *
32e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkefrom webkitpy.tool.mocktool import MockOptions, MockTool
33d0825bca7fe65beaee391d30da42e937db621564Steve Block
34d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass UploadCommandsTest(CommandsTest):
35d0825bca7fe65beaee391d30da42e937db621564Steve Block    def test_commit_message_for_current_diff(self):
36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        tool = MockTool()
376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        expected_stdout = "This is a fake commit message that is at least 50 characters.\n"
38d0825bca7fe65beaee391d30da42e937db621564Steve Block        self.assert_execute_outputs(CommitMessageForCurrentDiff(), [], expected_stdout=expected_stdout, tool=tool)
39d0825bca7fe65beaee391d30da42e937db621564Steve Block
408a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block    def test_clean_pending_commit(self):
418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        self.assert_execute_outputs(CleanPendingCommit(), [])
428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block
43d0825bca7fe65beaee391d30da42e937db621564Steve Block    def test_assign_to_committer(self):
44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        tool = MockTool()
458a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block        expected_stderr = "Warning, attachment 128 on bug 42 has invalid committer (non-committer@example.com)\nBug 77 is already assigned to foo@foo.com (None).\nBug 76 has no non-obsolete patches, ignoring.\n"
46d0825bca7fe65beaee391d30da42e937db621564Steve Block        self.assert_execute_outputs(AssignToCommitter(), [], expected_stderr=expected_stderr, tool=tool)
47d0825bca7fe65beaee391d30da42e937db621564Steve Block        tool.bugs.reassign_bug.assert_called_with(42, "eric@webkit.org", "Attachment 128 was posted by a committer and has review+, assigning to Eric Seidel for commit.")
48d0825bca7fe65beaee391d30da42e937db621564Steve Block
49d0825bca7fe65beaee391d30da42e937db621564Steve Block    def test_obsolete_attachments(self):
50d0825bca7fe65beaee391d30da42e937db621564Steve Block        expected_stderr = "Obsoleting 2 old patches on bug 42\n"
51d0825bca7fe65beaee391d30da42e937db621564Steve Block        self.assert_execute_outputs(ObsoleteAttachments(), [42], expected_stderr=expected_stderr)
52d0825bca7fe65beaee391d30da42e937db621564Steve Block
53d0825bca7fe65beaee391d30da42e937db621564Steve Block    def test_post(self):
54e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        options = MockOptions()
55a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        options.cc = None
56a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        options.check_style = True
57a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        options.comment = None
58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        options.description = "MOCK description"
59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        options.request_commit = False
60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        options.review = True
61e14391e94c850b8bd03680c23b38978db68687a8John Reck        options.suggest_reviewers = False
622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        expected_stderr = """MOCK: user.open_url: file://...
632fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWas that diff correct?
64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockObsoleting 2 old patches on bug 42
65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockMOCK add_patch_to_bug: bug_id=42, description=MOCK description, mark_for_review=True, mark_for_commit_queue=False, mark_for_landing=False
66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockMOCK: user.open_url: http://example.com/42
67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block"""
682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        self.assert_execute_outputs(Post(), [42], options=options, expected_stderr=expected_stderr)
69d0825bca7fe65beaee391d30da42e937db621564Steve Block
702bde8e466a4451c7319e3a072d118917957d6554Steve Block    def test_attach_to_bug(self):
712bde8e466a4451c7319e3a072d118917957d6554Steve Block        options = MockOptions()
722bde8e466a4451c7319e3a072d118917957d6554Steve Block        options.comment = "extra comment"
732bde8e466a4451c7319e3a072d118917957d6554Steve Block        options.description = "file description"
742bde8e466a4451c7319e3a072d118917957d6554Steve Block        expected_stderr = """MOCK add_attachment_to_bug: bug_id=42, description=file description filename=None
752bde8e466a4451c7319e3a072d118917957d6554Steve Block-- Begin comment --
762bde8e466a4451c7319e3a072d118917957d6554Steve Blockextra comment
772bde8e466a4451c7319e3a072d118917957d6554Steve Block-- End comment --
782bde8e466a4451c7319e3a072d118917957d6554Steve Block"""
792bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_execute_outputs(AttachToBug(), [42, "path/to/file.txt", "file description"], options=options, expected_stderr=expected_stderr)
802bde8e466a4451c7319e3a072d118917957d6554Steve Block
812bde8e466a4451c7319e3a072d118917957d6554Steve Block    def test_attach_to_bug_no_description_or_comment(self):
822bde8e466a4451c7319e3a072d118917957d6554Steve Block        options = MockOptions()
832bde8e466a4451c7319e3a072d118917957d6554Steve Block        options.comment = None
842bde8e466a4451c7319e3a072d118917957d6554Steve Block        options.description = None
852bde8e466a4451c7319e3a072d118917957d6554Steve Block        expected_stderr = """MOCK add_attachment_to_bug: bug_id=42, description=file.txt filename=None
862bde8e466a4451c7319e3a072d118917957d6554Steve Block"""
872bde8e466a4451c7319e3a072d118917957d6554Steve Block        self.assert_execute_outputs(AttachToBug(), [42, "path/to/file.txt"], options=options, expected_stderr=expected_stderr)
882bde8e466a4451c7319e3a072d118917957d6554Steve Block
89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    def test_land_safely(self):
90f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        expected_stderr = "Obsoleting 2 old patches on bug 42\nMOCK add_patch_to_bug: bug_id=42, description=Patch for landing, mark_for_review=False, mark_for_commit_queue=False, mark_for_landing=True\n"
91d0825bca7fe65beaee391d30da42e937db621564Steve Block        self.assert_execute_outputs(LandSafely(), [42], expected_stderr=expected_stderr)
92d0825bca7fe65beaee391d30da42e937db621564Steve Block
93d0825bca7fe65beaee391d30da42e937db621564Steve Block    def test_prepare_diff_with_arg(self):
94d0825bca7fe65beaee391d30da42e937db621564Steve Block        self.assert_execute_outputs(Prepare(), [42])
95d0825bca7fe65beaee391d30da42e937db621564Steve Block
96d0825bca7fe65beaee391d30da42e937db621564Steve Block    def test_prepare(self):
97f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        expected_stderr = "MOCK create_bug\nbug_title: Mock user response\nbug_description: Mock user response\ncomponent: MOCK component\ncc: MOCK cc\n"
98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        self.assert_execute_outputs(Prepare(), [], expected_stderr=expected_stderr)
99d0825bca7fe65beaee391d30da42e937db621564Steve Block
100d0825bca7fe65beaee391d30da42e937db621564Steve Block    def test_upload(self):
101e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke        options = MockOptions()
102a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        options.cc = None
103a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        options.check_style = True
104a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        options.comment = None
105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        options.description = "MOCK description"
106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        options.request_commit = False
107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        options.review = True
108e14391e94c850b8bd03680c23b38978db68687a8John Reck        options.suggest_reviewers = False
1092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        expected_stderr = """MOCK: user.open_url: file://...
1102fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWas that diff correct?
111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockObsoleting 2 old patches on bug 42
112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockMOCK add_patch_to_bug: bug_id=42, description=MOCK description, mark_for_review=True, mark_for_commit_queue=False, mark_for_landing=False
113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockMOCK: user.open_url: http://example.com/42
114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block"""
1152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        self.assert_execute_outputs(Upload(), [42], options=options, expected_stderr=expected_stderr)
116d0825bca7fe65beaee391d30da42e937db621564Steve Block
117d0825bca7fe65beaee391d30da42e937db621564Steve Block    def test_mark_bug_fixed(self):
118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        tool = MockTool()
119d0825bca7fe65beaee391d30da42e937db621564Steve Block        tool._scm.last_svn_commit_log = lambda: "r9876 |"
120d0825bca7fe65beaee391d30da42e937db621564Steve Block        options = Mock()
121d0825bca7fe65beaee391d30da42e937db621564Steve Block        options.bug_id = 42
122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        options.comment = "MOCK comment"
123f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        expected_stderr = """Bug: <http://example.com/42> Bug with two r+'d and cq+'d patches, one of which has an invalid commit-queue setter.
124f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochRevision: 9876
125f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochMOCK: user.open_url: http://example.com/42
1262fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockIs this correct?
127f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochAdding comment to Bug 42.
128f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochMOCK bug comment: bug_id=42, cc=None
129f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch--- Begin comment ---
130f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochMOCK comment
131f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
132f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochCommitted r9876: <http://trac.webkit.org/changeset/9876>
133f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch--- End comment ---
134f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
135f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch"""
1362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        self.assert_execute_outputs(MarkBugFixed(), [], expected_stderr=expected_stderr, tool=tool, options=options)
137d0825bca7fe65beaee391d30da42e937db621564Steve Block
138d0825bca7fe65beaee391d30da42e937db621564Steve Block    def test_edit_changelog(self):
139d0825bca7fe65beaee391d30da42e937db621564Steve Block        self.assert_execute_outputs(EditChangeLogs(), [])
140