Index: /mergebot/trunk/utils/test.py
===================================================================
--- /mergebot/trunk/utils/test.py	(revision 58)
+++ /mergebot/trunk/utils/test.py	(revision 59)
@@ -125,4 +125,10 @@
 
     def merge(self, ticket_id, component, timeout=5):
+        self._merge(ticket_id, component, 'Merged .* to .* for', timeout)
+
+    def merge_conflict(self, ticket_id, component, timeout=5):
+        self._merge(ticket_id, component, 'Found [0-9]+ conflicts? in attempt to merge ', timeout)
+
+    def _merge(self, ticket_id, component, search, timeout=5):
         """timeout is in seconds."""
         self.go_to_mergebot()
@@ -132,5 +138,5 @@
         tc.find('Branch')
         self.go_to_ticket(ticket_id)
-        tc.find('Merged .* to .* for')
+        tc.find(search)
         # TODO: We may want to change this to remove the "dead" branch
         retval = call(['svn', 'ls', self.repo_url + '/' + component + '/branches/ticket-%s' % ticket_id],
@@ -294,16 +300,7 @@
 
 
-class MergeBotTestCheckMerge(FunctionalTwillTestCaseSetup):
-    def runTest(self):
-        """Verify that the 'checkmerge' button works"""
-        ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
-            info={'component':'stuff', 'version':'trunk'})
-        self._tester.branch(ticket_id, 'stuff')
-        self._tester.checkmerge(ticket_id, 'stuff')
-
-
-class MergeBotTestRebranchWithChange(FunctionalSvnTestCaseSetup):
-    def runTest(self):
-        """Verify that the 'rebranch' button works with changes on the branch"""
+class MergeBotTestMergeWithChange(FunctionalSvnTestCaseSetup):
+    def runTest(self):
+        """Verify that the 'merge' button works with changes on the branch"""
         ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
             info={'component':'stuff', 'version':'trunk'})
@@ -316,10 +313,10 @@
         self.commit('Add a new file')
 
-        self._tester.rebranch(ticket_id, 'stuff')
-
-
-class MergeBotTestRebranchWithChangeAndTrunkChange(FunctionalSvnTestCaseSetup):
-    def runTest(self):
-        """Verify that the 'rebranch' button works with changes on the branch and trunk"""
+        self._tester.merge(ticket_id, 'stuff')
+
+
+class MergeBotTestMergeWithChangeAndTrunkChange(FunctionalSvnTestCaseSetup):
+    def runTest(self):
+        """Verify that the 'merge' button works with changes on the branch and trunk"""
         ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
             info={'component':'stuff', 'version':'trunk'})
@@ -336,10 +333,10 @@
         self.commit('Add a new file on trunk')
 
-        self._tester.rebranch(ticket_id, 'stuff')
-
-
-class MergeBotTestRebranchWithConflict(FunctionalSvnTestCaseSetup):
-    def runTest(self):
-        """Verify that the 'rebranch' button works with conflicts on the branch and trunk"""
+        self._tester.merge(ticket_id, 'stuff')
+
+
+class MergeBotTestMergeWithConflict(FunctionalSvnTestCaseSetup):
+    def runTest(self):
+        """Verify that the 'merge' button detects conflicts between the branch and trunk"""
         ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
             info={'component':'stuff', 'version':'trunk'})
@@ -363,11 +360,11 @@
         self.commit('Modify the file on branch')
 
-        # rebranch, make sure it shows a conflict
-        self._tester.rebranch_conflict(ticket_id, 'stuff')
-
-
-class MergeBotTestRebranchWithBranchRenameConflict(FunctionalSvnTestCaseSetup):
-    def runTest(self):
-        """Verify that the 'rebranch' button works when a file renamed on the branch was modified on trunk"""
+        # merge, make sure it shows a conflict
+        self._tester.merge_conflict(ticket_id, 'stuff')
+
+
+class MergeBotTestMergeWithBranchRenameConflict(FunctionalSvnTestCaseSetup):
+    def runTest(self):
+        """Verify that the 'merge' button detects a conflict when a file renamed on the branch was modified on trunk"""
         ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
             info={'component':'stuff', 'version':'trunk'})
@@ -391,10 +388,138 @@
         self.commit('Rename the file on the branch')
 
+        self._tester.merge_conflict(ticket_id, 'stuff')
+
+
+class MergeBotTestMergeWithTrunkRenameConflict(FunctionalSvnTestCaseSetup):
+    def runTest(self):
+        """Verify that the 'merge' button detects conflicts when a file renamed on trunk was modified on the branch"""
+        ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
+            info={'component':'stuff', 'version':'trunk'})
+        basename = self.__class__.__name__
+
+        # create a file in which to have conflicts
+        self.checkout()
+        self.add_new_file(basename)
+        self.commit('Add a new file on trunk')
+
+        # create the branch
+        self._tester.branch(ticket_id, 'stuff')
+
+        # rename the file on trunk
+        self.mv(basename, basename + '-renamed')
+        self.commit('Rename the file on trunk')
+
+        # rename the file on the branch
+        self.switch(ticket_id)
+        open(os.path.join(self.get_workdir(), basename), 'a').write(random_sentence())
+        self.commit('Modify the file on the branch')
+
+        # make sure it finds the conflict
+        self._tester.merge_conflict(ticket_id, 'stuff')
+
+
+class MergeBotTestCheckMerge(FunctionalTwillTestCaseSetup):
+    def runTest(self):
+        """Verify that the 'checkmerge' button works"""
+        ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
+            info={'component':'stuff', 'version':'trunk'})
+        self._tester.branch(ticket_id, 'stuff')
+        self._tester.checkmerge(ticket_id, 'stuff')
+
+
+class MergeBotTestRebranchWithChange(FunctionalSvnTestCaseSetup):
+    def runTest(self):
+        """Verify that the 'rebranch' button works with changes on the branch"""
+        ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
+            info={'component':'stuff', 'version':'trunk'})
+        self._tester.branch(ticket_id, 'stuff')
+
+        # checkout a working copy & make a change
+        self.checkout(ticket_id)
+        # Create & add a new file
+        self.add_new_file()
+        self.commit('Add a new file')
+
+        self._tester.rebranch(ticket_id, 'stuff')
+
+
+class MergeBotTestRebranchWithChangeAndTrunkChange(FunctionalSvnTestCaseSetup):
+    def runTest(self):
+        """Verify that the 'rebranch' button works with changes on the branch and trunk"""
+        ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
+            info={'component':'stuff', 'version':'trunk'})
+        self._tester.branch(ticket_id, 'stuff')
+
+        # checkout a working copy & make a change
+        self.checkout(ticket_id)
+        # Create & add a new file
+        basename = self.__class__.__name__
+        self.add_new_file(basename + '-ticket')
+        self.commit('Add a new file on ticket')
+        self.switch()
+        self.add_new_file(basename + '-trunk')
+        self.commit('Add a new file on trunk')
+
+        self._tester.rebranch(ticket_id, 'stuff')
+
+
+class MergeBotTestRebranchWithConflict(FunctionalSvnTestCaseSetup):
+    def runTest(self):
+        """Verify that the 'rebranch' button detects conflicts between the branch and trunk"""
+        ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
+            info={'component':'stuff', 'version':'trunk'})
+        basename = self.__class__.__name__
+
+        # create a file in which to have conflicts
+        self.checkout()
+        self.add_new_file(basename)
+        self.commit('Add a new file on trunk')
+
+        # create the branch
+        self._tester.branch(ticket_id, 'stuff')
+
+        # modify the file on trunk
+        open(os.path.join(self.get_workdir(), basename), 'a').write(random_sentence())
+        self.commit('Modify the file on trunk')
+
+        # modify the file on the branch
+        self.switch(ticket_id)
+        open(os.path.join(self.get_workdir(), basename), 'a').write(random_sentence())
+        self.commit('Modify the file on branch')
+
+        # rebranch, make sure it shows a conflict
         self._tester.rebranch_conflict(ticket_id, 'stuff')
 
 
+class MergeBotTestRebranchWithBranchRenameConflict(FunctionalSvnTestCaseSetup):
+    def runTest(self):
+        """Verify that the 'rebranch' button detects a conflict when a file renamed on the branch was modified on trunk"""
+        ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
+            info={'component':'stuff', 'version':'trunk'})
+        basename = self.__class__.__name__
+
+        # create a file in which to have conflicts
+        self.checkout()
+        self.add_new_file(basename)
+        self.commit('Add a new file on trunk')
+
+        # create the branch
+        self._tester.branch(ticket_id, 'stuff')
+
+        # modify the file on trunk
+        open(os.path.join(self.get_workdir(), basename), 'a').write(random_sentence())
+        self.commit('Modify the file on trunk')
+
+        # rename the file on the branch
+        self.switch(ticket_id)
+        self.mv(basename, basename + '-renamed')
+        self.commit('Rename the file on the branch')
+
+        self._tester.rebranch_conflict(ticket_id, 'stuff')
+
+
 class MergeBotTestRebranchWithTrunkRenameConflict(FunctionalSvnTestCaseSetup):
     def runTest(self):
-        """Verify that the 'rebranch' button works when a file renamed on trunk was modified on the branch"""
+        """Verify that the 'rebranch' button detects conflicts when a file renamed on trunk was modified on the branch"""
         ticket_id = self._tester.create_ticket(summary=self.__class__.__name__,
             info={'component':'stuff', 'version':'trunk'})
@@ -465,4 +590,9 @@
     suite.addTest(MergeBotTestRebranchWithBranchRenameConflict())
     suite.addTest(MergeBotTestRebranchWithTrunkRenameConflict())
+    suite.addTest(MergeBotTestMergeWithChange())
+    suite.addTest(MergeBotTestMergeWithChangeAndTrunkChange())
+    suite.addTest(MergeBotTestMergeWithConflict())
+    suite.addTest(MergeBotTestMergeWithBranchRenameConflict())
+    suite.addTest(MergeBotTestMergeWithTrunkRenameConflict())
     suite.addTest(MergeBotTestSingleUseCase())
     return suite
