def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11186 alias TracError should be raised when repository alias with name already exists """ self._tester.go_to_admin() tc.follow("\\bRepositories\\b") tc.url(self._tester.url + '/admin/versioncontrol/repository') word = random_word() target = '%s_repos' % word name = '%s_alias' % word tc.formvalue('trac-addrepos', 'name', target) tc.formvalue('trac-addrepos', 'dir', '/var/svn/%s' % target) tc.submit() # Jinja2 tc.find('The repository "%s" has been added.' % target) tc.find('The repository "%s" has been added.' % target) tc.formvalue('trac-addalias', 'name', name) tc.formvalue('trac-addalias', 'alias', target) tc.submit() # Jinja2 tc.find('The alias "%s" has been added.' % name) tc.find('The alias "%s" has been added.' % name) tc.formvalue('trac-addalias', 'name', name) tc.formvalue('trac-addalias', 'alias', target) tc.submit() tc.find('The alias "%s" already exists.' % name) tc.notfind(internal_error)
def runTest(self): """Test timeline in RSS format.""" pagename = random_unique_camel() self._tester.create_wiki_page(pagename) page = WikiPage(self._testenv.get_trac_environment(), pagename) self._tester.go_to_timeline() tc.follow("RSS Feed") tc.find( r"""<\?xml version="1.0"\?>[\n]+ <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel> <title>Functional Tests</title> <link>http://127.0.0.1:\d+/timeline</link> <description>Trac Timeline</description> <language>en-US</language> <generator>Trac [^<]+</generator> <image> <title>Functional Tests</title> <url>http://127.0.0.1:\d+/chrome/site/your_project_logo.png</url> <link>http://127.0.0.1:\d+/timeline</link> </image> <item> <title>%(pagename)s created</title> <dc:creator>admin</dc:creator> <pubDate>%(http_date)s</pubDate> <link>http://127.0.0.1:\d+/wiki/%(pagename)s\?version=1</link> <guid isPermaLink="false">http://127.0.0.1:\d+/wiki/%(pagename)s\?version=1/\d+</guid> <description>[^<]+</description> <category>wiki</category> </item> """ % { 'pagename': pagename, 'http_date': http_date(page.time) }, 'ms')
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11355 Save with no changes should redirect back to the repository listing. """ # Add a repository self._tester.go_to_admin("Repositories") name = random_unique_camel() dir = os.path.join(tempfile.gettempdir(), name.lower()) tc.formvalue("trac-addrepos", "name", name) tc.formvalue("trac-addrepos", "dir", dir) tc.submit("add_repos") tc.find('The repository "%s" has been added.' % name) # Save unmodified form and redirect back to listing page tc.follow(r"\b%s\b" % name) tc.url(self._tester.url + "/admin/versioncontrol/repository/" + name) tc.submit("save", formname="edit") tc.url(self._tester.url + "/admin/versioncontrol/repository") tc.find("Your changes have been saved.") # Warning is added when repository dir is not an absolute path tc.follow(r"\b%s\b" % name) tc.url(self._tester.url + "/admin/versioncontrol/repository/" + name) tc.formvalue("edit", "dir", os.path.basename(dir)) tc.submit("save") tc.url(self._tester.url + "/admin/versioncontrol/repository/" + name) tc.find("The repository directory must be an absolute path.")
def runTest(self): """Admin rename milestone""" name1 = self._tester.create_milestone() name2 = random_unique_camel() tid = self._tester.create_ticket(info={'milestone': name1}) milestone_url = self._tester.url + '/admin/ticket/milestones' self._tester.go_to_url(milestone_url) tc.follow(name1) tc.url(milestone_url + '/' + name1) tc.formvalue('edit', 'name', name2) tc.submit('save') tc.find(r"Your changes have been saved\.") tc.find(r"\b%s\b" % name2) tc.notfind(r"\b%s\b" % name1) self._tester.go_to_ticket(tid) tc.find('<a class="milestone" href="/milestone/%(name)s" ' 'title="No date set">%(name)s</a>' % {'name': name2}) tc.find('<th class="trac-field-milestone">Milestone:</th>[ \t\n]+' '<td>[ \t\n]+<span class="trac-field-old">%s</span>' '[ \t\n]+→[ \t\n]+' '<span class="trac-field-new">%s</span>[ \t\n]+</td>' % (name1, name2)) tc.find("Milestone renamed")
def runTest(self): """Admin modify priority details""" name1 = self._testenv.add_priority() self._tester.go_to_url('/admin/ticket/priority') # Modify the details of the priority tc.follow(name1) priority_url = self._tester.url + "/admin/ticket/priority" tc.url(priority_url + '/' + name1, regexp=False) name2 = random_unique_camel() tc.formvalue('edit', 'name', name2) tc.submit('save') tc.url(priority_url, regexp=False) # Cancel more modifications self._tester.go_to_url(priority_url) tc.follow(name2) name3 = random_unique_camel() tc.formvalue('edit', 'name', name3) tc.submit('cancel') tc.url(priority_url, regexp=False) # Verify that only the correct modifications show up tc.notfind(name1) tc.find(name2) tc.notfind(name3)
def runTest(self): """Admin modify priority details""" name = "DetailPriority" # Create a priority self._tester.create_priority(name + '1') # Modify the details of the priority priority_url = self._tester.url + "/admin/ticket/priority" tc.go(priority_url) tc.url(priority_url + '$') tc.follow(name + '1') tc.url(priority_url + '/' + name + '1') tc.formvalue('edit', 'name', name + '2') tc.submit('save') tc.url(priority_url + '$') # Cancel more modifications tc.go(priority_url) tc.follow(name) tc.formvalue('edit', 'name', name + '3') tc.submit('cancel') tc.url(priority_url + '$') # Verify that only the correct modifications show up tc.notfind(name + '1') tc.find(name + '2') tc.notfind(name + '3')
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11355 Save with no changes should redirect back to the repository listing. """ # Add a repository self._tester.go_to_admin("Repositories") name = random_unique_camel() dir = os.path.join(tempfile.gettempdir(), name.lower()) tc.formvalue('trac-addrepos', 'name', name) tc.formvalue('trac-addrepos', 'dir', dir) tc.submit('add_repos') tc.find('The repository "%s" has been added.' % name) # Save unmodified form and redirect back to listing page tc.follow(r"\b%s\b" % name) tc.url(self._tester.url + '/admin/versioncontrol/repository/' + name) tc.submit('save', formname='edit') tc.url(self._tester.url + '/admin/versioncontrol/repository') tc.find("Your changes have been saved.") # Warning is added when repository dir is not an absolute path tc.follow(r"\b%s\b" % name) tc.url(self._tester.url + '/admin/versioncontrol/repository/' + name) tc.formvalue('edit', 'dir', os.path.basename(dir)) tc.submit('save') tc.url(self._tester.url + '/admin/versioncontrol/repository/' + name) tc.find('The repository directory must be an absolute path.')
def runTest(self): self._tester.login_as(Usernames.team_member) page_url = self._tester.url + TEAM_URL tc.go(page_url) tc.url(page_url) tc.code(200) tc.follow('Team#1') tc.code(200) tc.find('Member#1')
def runTest(self): """Admin milestone completed""" name = self._testenv.add_milestone() milestone_url = self._tester.url + "/admin/ticket/milestones" self._tester.go_to_url(milestone_url) tc.follow(name) tc.url(milestone_url + '/' + name, regexp=False) tc.formvalue('edit', 'completed', True) tc.submit('save') tc.url(milestone_url, regexp=False)
def runTest(self): """Admin create milestone""" name = self._tester.create_milestone() # Make sure it's on the roadmap. tc.follow(r"\bRoadmap\b") tc.url(self._tester.url + '/roadmap', regexp=False) tc.find("Milestone:.*%s" % name) tc.follow(r"\b%s\b" % name) tc.url(self._tester.url + '/milestone/' + name, regexp=False) tc.find('No date set')
def runTest(self): """Admin component detail""" name = self._testenv.add_component() self._tester.go_to_url('/admin/ticket/components') tc.follow(name) desc = 'Some component description' tc.formvalue('edit', 'description', desc) tc.submit('cancel') tc.url(self._tester.url + '/admin/ticket/components', regexp=False) tc.follow(name) tc.notfind(desc)
def runTest(self): """Admin modify priority""" name = self._testenv.add_priority() self._tester.go_to_url('/admin/ticket/priority') tc.find(name) tc.follow(name) tc.formvalue('edit', 'name', name * 2) tc.submit('save') priority_url = self._tester.url + '/admin/ticket/priority' tc.url(priority_url, regexp=False) tc.find(name * 2)
def runTest(self): """Check empty repository""" browser_url = self._tester.url + '/browser' self._tester.go_to_url(browser_url) # This tests the current behavior; I'm not sure it's the best # behavior. tc.follow('Last Change') tc.find('Error: No such changeset') tc.back() tc.follow('Revision Log') tc.notfind('Error: Nonexistent path')
def runTest(self): """Check empty repository""" browser_url = self._tester.url + "/browser" tc.go(browser_url) tc.url(browser_url) # This tests the current behavior; I'm not sure it's the best # behavior. tc.follow("Last Change") tc.find("Error: No such changeset") tc.back() tc.follow("Revision Log") tc.notfind("Error: Nonexistent path")
def runTest(self): """Admin version details""" name = self._testenv.add_version() self._tester.go_to_url('/admin/ticket/versions') tc.follow(name) desc = 'Some other version description.' tc.formvalue('edit', 'description', desc) tc.submit('cancel') tc.url(self._tester.url + "/admin/ticket/versions", regexp=False) tc.follow(name) tc.notfind(desc)
def runTest(self): """Admin milestone completed""" name = "CompletedMilestone" self._tester.create_milestone(name) milestone_url = self._tester.url + "/admin/ticket/milestones" tc.go(milestone_url) tc.url(milestone_url) tc.follow(name) tc.url(milestone_url + '/' + name) tc.formvalue('edit', 'completed', True) tc.submit('save') tc.url(milestone_url + "$")
def runTest(self): """Admin modify milestone details""" name = self._tester.create_milestone() milestone_url = self._tester.url + '/admin/ticket/milestones' def go_to_milestone_detail(): tc.go(milestone_url) tc.url(milestone_url) tc.follow(name) tc.url(milestone_url + '/' + name) # Modify the details of the milestone go_to_milestone_detail() tc.formvalue('edit', 'due', True) tc.formvalue('edit', 'description', 'Some description.') tc.submit('save') tc.url(milestone_url) # Milestone is not closed self._tester.go_to_roadmap() tc.find(name) # Cancel more modifications and modification are not saved go_to_milestone_detail() tc.formvalue('edit', 'description', '~~Some other description.~~') tc.submit('cancel') tc.url(milestone_url) self._tester.go_to_roadmap() tc.find('Some description.') tc.follow(name) tc.find('Some description.') # Milestone is readonly when user doesn't have MILESTONE_MODIFY self._tester.logout() self._testenv.grant_perm('user', 'TICKET_ADMIN') self._tester.login('user') go_to_milestone_detail() try: tc.find(r'<input[^>]+id="name"[^>]+readonly="readonly"') tc.find(r'<input[^>]+id="due"[^>]+disabled="disabled"') tc.find(r'<input[^>]+id="duedate"[^>]+readonly="readonly"') tc.find(r'<input[^>]+id="completed"[^>]+disabled="disabled"') tc.find(r'<input[^>]+id="completeddate"[^>]+readonly="readonly"') tc.find(r'<textarea[^>]+id="description"[^>]+readonly="readonly"') tc.find(r'<input[^>]+name="save"[^>]+disabled="disabled"') tc.submit('cancel', 'edit') tc.url(milestone_url) finally: self._tester.logout() self._testenv.revoke_perm('user', 'TICKET_ADMIN') self._tester.login('admin')
def runTest(self): """Admin modify priority""" name = "ModifyPriority" self._tester.create_priority(name) priority_url = self._tester.url + '/admin/ticket/priority' tc.go(priority_url) tc.url(priority_url + '$') tc.find(name) tc.follow(name) tc.formvalue('edit', 'name', name * 2) tc.submit('save') tc.url(priority_url + '$') tc.find(name * 2)
def runTest(self): """Admin component detail""" name = "DetailComponent" self._tester.create_component(name) component_url = self._tester.url + "/admin/ticket/components" tc.go(component_url) tc.follow(name) desc = 'Some component description' tc.formvalue('edit', 'description', desc) tc.submit('cancel') tc.url(component_url + '$') tc.follow(name) tc.notfind(desc)
def runTest(self): """Admin version detail set time""" name = "DetailTimeVersion" self._tester.create_version(name) version_admin = self._tester.url + "/admin/ticket/versions" tc.go(version_admin) tc.url(version_admin) tc.follow(name) tc.formvalue('edit', 'time', '') tc.submit('save') tc.url(version_admin + '$') tc.find(name + '(<[^>]*>|\\s)*<[^>]* name="default" value="%s"' % name, 's')
def runTest(self): """Admin version details""" name = "DetailVersion" self._tester.create_version(name) version_admin = self._tester.url + "/admin/ticket/versions" tc.go(version_admin) tc.url(version_admin) tc.follow(name) desc = 'Some other version description.' tc.formvalue('edit', 'description', desc) tc.submit('cancel') tc.url(version_admin) tc.follow(name) tc.notfind(desc)
def runTest(self): """Admin milestone completed in the future""" name = self._testenv.add_milestone() milestone_url = self._tester.url + "/admin/ticket/milestones" self._tester.go_to_url(milestone_url) tc.follow(name) tc.url(milestone_url + '/' + name, regexp=False) tc.formvalue('edit', 'completed', True) cdate = datetime_now(tz=utc) + datetime.timedelta(days=2) cdate_string = format_date(cdate, tzinfo=localtz, locale=locale_en) tc.formvalue('edit', 'completeddate', cdate_string) tc.submit('save') tc.find('Completion date may not be in the future') # And make sure it wasn't marked as completed. self._tester.go_to_roadmap() tc.find(name)
def runTest(self): """Admin modify milestone duedate on detail page""" name = self._testenv.add_milestone() # Modify the details of the milestone milestone_url = self._tester.url + "/admin/ticket/milestones" self._tester.go_to_url(milestone_url) tc.follow(name) tc.url(milestone_url + '/' + name, regexp=False) duedate = datetime_now(tz=utc) duedate_string = format_datetime(duedate, tzinfo=utc, locale=locale_en) tc.formvalue('edit', 'due', True) tc.formvalue('edit', 'duedate', duedate_string) tc.submit('save') tc.url(milestone_url, regexp=False) tc.find(name + '(<[^>]*>|\\s)*' + duedate_string, 's')
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11186 TracError should be raised when repository with name already exists """ self._tester.go_to_admin() tc.follow("\\bRepositories\\b") tc.url(self._tester.url + '/admin/versioncontrol/repository') name = random_word() tc.formvalue('trac-addrepos', 'name', name) tc.formvalue('trac-addrepos', 'dir', '/var/svn/%s' % name) tc.submit() tc.find('The repository "%s" has been added.' % name) tc.formvalue('trac-addrepos', 'name', name) tc.formvalue('trac-addrepos', 'dir', '/var/svn/%s' % name) tc.submit() tc.find('The repository "%s" already exists.' % name) tc.notfind(internal_error)
def runTest(self): """Render reStructured text using a wikiprocessor""" pagename = self._tester.create_wiki_page(content=""" {{{ #!rst Hello ===== .. trac:: wiki:WikiStart Some Link }}} """) self._tester.go_to_wiki(pagename) tc.find("Some Link") tc.find(r'<h1[^>]*>Hello') tc.notfind("wiki:WikiStart") tc.follow("Some Link") tc.url(self._tester.url + "/wiki/WikiStart")
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11186 TracError should be raised when repository with name already exists """ self._tester.go_to_admin() tc.follow("\\bRepositories\\b") tc.url(self._tester.url + "/admin/versioncontrol/repository") name = random_word() tc.formvalue("trac-addrepos", "name", name) tc.formvalue("trac-addrepos", "dir", "/var/svn/%s" % name) tc.submit() tc.find('The repository "%s" has been added.' % name) tc.formvalue("trac-addrepos", "name", name) tc.formvalue("trac-addrepos", "dir", "/var/svn/%s" % name) tc.submit() tc.find('The repository "%s" already exists.' % name) tc.notfind(internal_error)
def _test_create_new_type(self, page_url, backlog_name): # Creates a new type and check if it appears directly in the # backlog list of types tc.go(self._tester.url + '/admin/ticket/type') tc.formvalue('addenum', 'name', 'testtype') tc.submit('add') # Now go to Agilo Types and make it a type tc.go(self._tester.url + '/admin/agilo/types') tc.follow('testtype') tc.formvalue('modcomp', 'alias', 'Test Type') tc.formvalue('modcomp', 'fields', 'drp_resources') tc.submit('save') # Go to the Backlog and verify the newly created type is there tc.go(self._tester.url + '/admin/agilo/backlogs/' + \ backlog_name) tc.find('<option value="testtype">') tc.go(self._tester.url + '/admin/agilo/backlogs/')
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11618 fix for malformed `readonly="True"` attribute in repository admin. """ env = self._testenv.get_trac_environment() env.config.set("repositories", "t11618.dir", self._testenv.repo_path_for_initenv()) env.config.save() try: self._tester.go_to_admin() tc.follow(r"\bRepositories\b") tc.url(self._tester.url + "/admin/versioncontrol/repository") tc.follow(r"\bt11618\b") tc.url(self._tester.url + "/admin/versioncontrol/repository/t11618") tc.notfind(' readonly="True"') tc.find(' readonly="readonly"') finally: env.config.remove("repositories", "t11618.dir") env.config.save()
def runTest(self): """Admin milestone completed in the future""" name = "CompletedFutureMilestone" self._tester.create_milestone(name) milestone_url = self._tester.url + "/admin/ticket/milestones" tc.go(milestone_url) tc.url(milestone_url) tc.follow(name) tc.url(milestone_url + '/' + name) tc.formvalue('edit', 'completed', True) cdate = datetime.now(tz=utc) + timedelta(days=2) cdate_string = format_date(cdate, tzinfo=localtz, locale=locale_en) tc.formvalue('edit', 'completeddate', cdate_string) tc.submit('save') tc.find('Completion date may not be in the future') # And make sure it wasn't marked as completed. self._tester.go_to_roadmap() tc.find(name)
def runTest(self): '''Checks that a modified description produces a description diff and we can look at that diff later as well as the ticket history page.''' self._tester.login_as(Usernames.admin) ticket_id = self._tester.create_new_agilo_task('Blub', 'The boring description') self._tester.go_to_view_ticket_page(ticket_id) tc.formvalue('propertyform', 'field_description', 'A new, exciting description') tc.submit('submit') self._tester.go_to_view_ticket_page(ticket_id) tc.follow('diff') tc.code(200) # There seems to be no easyer way to get to the ticket history page tc.follow('Ticket History') tc.code(200)
def runTest(self): pagename = self._tester.create_wiki_page() self._tester.edit_wiki_page(pagename) tc.follow(r"\bHistory\b") tc.url(self._tester.url + r'/wiki/%s\?action=history' % pagename) version_link = '<td class="version">[ \t\n]*' \ '<a href="/wiki/%(pagename)s\?version=%%(version)s" ' \ 'title="View this version">%%(version)s[ \t\n]*</a>' \ % {'pagename': pagename} tc.find(version_link % {'version': 1}) tc.find(version_link % {'version': 2}) tc.formvalue('history', 'old_version', '1') tc.formvalue('history', 'version', '2') tc.submit() tc.url(r'%s/wiki/%s\?action=diff&version=2&old_version=1' % (self._tester.url, pagename)) tc.find(r'<a href="/wiki/%s\?version=1">Version 1</a>' % pagename) tc.find(r'<a href="/wiki/%s\?version=2">Version 2</a>' % pagename) tc.find(r'<a href="/wiki/%(name)s">%(name)s</a>' % {'name': pagename})
def runTest(self): """Admin modify milestone duedate on detail page""" name = "DetailDueMilestone" # Create a milestone self._tester.create_milestone(name) # Modify the details of the milestone milestone_url = self._tester.url + "/admin/ticket/milestones" tc.go(milestone_url) tc.url(milestone_url) tc.follow(name) tc.url(milestone_url + '/' + name) duedate = datetime.now(tz=utc) duedate_string = format_datetime(duedate, tzinfo=utc, locale=locale_en) tc.formvalue('edit', 'due', True) tc.formvalue('edit', 'duedate', duedate_string) tc.submit('save') tc.url(milestone_url + '$') tc.find(name + '(<[^>]*>|\\s)*' + duedate_string, 's')
def runTest(self): '''Checks that a modified description produces a description diff and we can look at that diff later as well as the ticket history page.''' self._tester.login_as(Usernames.admin) ticket_id = self._tester.create_new_agilo_task( 'Blub', 'The boring description') self._tester.go_to_view_ticket_page(ticket_id) tc.formvalue('propertyform', 'field_description', 'A new, exciting description') tc.submit('submit') self._tester.go_to_view_ticket_page(ticket_id) tc.follow('diff') tc.code(200) # There seems to be no easyer way to get to the ticket history page tc.follow('Ticket History') tc.code(200)
def runTest(self): plugin_name = self.__class__.__name__ env = self._testenv.get_trac_environment() env.config.set('components', plugin_name + '.*', 'enabled') env.config.save() create_file(os.path.join(env.path, 'plugins', plugin_name + '.py'), """\ from genshi.builder import tag from trac.core import Component, implements from trac.util.translation import tag_ from trac.wiki.api import IWikiPageManipulator class WikiPageManipulator(Component): implements(IWikiPageManipulator) def prepare_wiki_page(self, req, page, fields): pass def validate_wiki_page(self, req, page): field = 'comment' yield None, tag_("The page contains invalid markup at" " line %(number)s.", number=tag.strong('10')) yield field, tag_("The field %(field)s cannot be empty.", field=tag.strong(field)) """) self._testenv.restart() try: self._tester.go_to_front() tc.follow("Wiki") tc.formvalue('modifypage', 'action', 'edit') tc.submit() tc.submit('save', 'edit') tc.url(self._tester.url + '/wiki/WikiStart$') tc.find("Invalid Wiki page: The page contains invalid markup at" " line <strong>10</strong>.") tc.find("The Wiki page field 'comment' is invalid:" " The field <strong>comment</strong> cannot be empty.") finally: env.config.set('components', plugin_name + '.*', 'disabled') env.config.save()
def runTest(self): plugin_name = self.__class__.__name__ env = self._testenv.get_trac_environment() env.config.set('components', plugin_name + '.*', 'enabled') env.config.save() create_file( os.path.join(env.path, 'plugins', plugin_name + '.py'), """\ from genshi.builder import tag from trac.core import Component, implements from trac.util.translation import tag_ from trac.wiki.api import IWikiPageManipulator class WikiPageManipulator(Component): implements(IWikiPageManipulator) def prepare_wiki_page(self, req, page, fields): pass def validate_wiki_page(self, req, page): field = 'comment' yield None, tag_("The page contains invalid markup at" " line %(number)s.", number=tag.strong('10')) yield field, tag_("The field %(field)s cannot be empty.", field=tag.strong(field)) """) self._testenv.restart() try: self._tester.go_to_front() tc.follow("Wiki") tc.formvalue('modifypage', 'action', 'edit') tc.submit() tc.submit('save', 'edit') tc.url(self._tester.url + '/wiki/WikiStart$') tc.find("Invalid Wiki page: The page contains invalid markup at" " line <strong>10</strong>.") tc.find("The Wiki page field <strong>comment</strong> is invalid:" " The field <strong>comment</strong> cannot be empty.") finally: env.config.set('components', plugin_name + '.*', 'disabled') env.config.save()
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11584 don't raise NoSuchChangeset for empty repository if no "rev" parameter """ repo_path = self._testenv.svnadmin_create('repo-t11584') self._tester.go_to_admin() tc.follow("\\bRepositories\\b") tc.url(self._tester.url + '/admin/versioncontrol/repository') tc.formvalue('trac-addrepos', 'name', 't11584') tc.formvalue('trac-addrepos', 'dir', repo_path) tc.submit() tc.notfind(internal_error) self._testenv._tracadmin('repository', 'sync', 't11584') browser_url = self._tester.url + '/browser/t11584' tc.go(browser_url) tc.url(browser_url) tc.notfind('Error: No such changeset')
def runTest(self): """Admin modify milestone duedate on detail page""" name = "DetailDueMilestone" # Create a milestone self._tester.create_milestone(name) # Modify the details of the milestone milestone_url = self._tester.url + "/admin/ticket/milestones" tc.go(milestone_url) tc.url(milestone_url) tc.follow(name) tc.url(milestone_url + '/' + name) duedate = datetime.now(tz=utc) duedate_string = format_datetime(duedate, tzinfo=utc, locale=locale_en) tc.formvalue('edit', 'due', True) tc.formvalue('edit', 'duedate', duedate_string) tc.submit('save') tc.url(milestone_url + '$') tc.find(name + '(<[^>]*>|\\s)*'+ duedate_string, 's')
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11618 fix for malformed `readonly="True"` attribute in repository admin. """ env = self._testenv.get_trac_environment() env.config.set('repositories', 't11618.dir', self._testenv.repo_path_for_initenv()) env.config.save() try: self._tester.go_to_admin() tc.follow(r'\bRepositories\b') tc.url(self._tester.url + '/admin/versioncontrol/repository') tc.follow(r'\bt11618\b') tc.url(self._tester.url + '/admin/versioncontrol/repository/t11618') tc.notfind(' readonly="True"') tc.find(' readonly="readonly"') finally: env.config.remove('repositories', 't11618.dir') env.config.save()
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11584 don't raise NoSuchChangeset for empty repository if no "rev" parameter """ repo_path = self._testenv.svnadmin_create("repo-t11584") self._tester.go_to_admin() tc.follow("\\bRepositories\\b") tc.url(self._tester.url + "/admin/versioncontrol/repository") tc.formvalue("trac-addrepos", "name", "t11584") tc.formvalue("trac-addrepos", "dir", repo_path) tc.submit() tc.notfind(internal_error) self._testenv._tracadmin("repository", "sync", "t11584") browser_url = self._tester.url + "/browser/t11584" tc.go(browser_url) tc.url(browser_url) tc.notfind("Error: No such changeset")
def runTest(self): """The table should be hidden and help text shown when there are no components defined (#11103).""" from trac.ticket import model env = self._testenv.get_trac_environment() components = list(model.Component.select(env)) self._tester.go_to_admin() tc.follow(r"\bComponents\b") try: for comp in components: tc.formvalue('component_table', 'sel', comp.name) tc.submit('remove') tc.notfind('<table class="listing" id="complist">') tc.find("As long as you don't add any items to the list, this " "field[ \t\n]*will remain completely hidden from the " "user interface.") finally: for comp in components: self._tester.create_component(comp.name, comp.owner, comp.description)
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11194 TracError should be raised when repository with name already exists """ self._tester.go_to_admin() tc.follow("\\bRepositories\\b") tc.url(self._tester.url + '/admin/versioncontrol/repository') word = random_word() names = ['%s_%d' % (word, n) for n in xrange(3)] tc.formvalue('trac-addrepos', 'name', names[0]) tc.formvalue('trac-addrepos', 'dir', '/var/svn/%s' % names[0]) tc.submit() tc.notfind(internal_error) tc.formvalue('trac-addrepos', 'name', names[1]) tc.formvalue('trac-addrepos', 'dir', '/var/svn/%s' % names[1]) tc.submit() tc.notfind(internal_error) tc.follow('\\b' + names[1] + '\\b') tc.url(self._tester.url + '/admin/versioncontrol/repository/' + names[1]) tc.formvalue('trac-modrepos', 'name', names[2]) tc.submit('save') tc.notfind(internal_error) tc.url(self._tester.url + '/admin/versioncontrol/repository') tc.follow('\\b' + names[2] + '\\b') tc.url(self._tester.url + '/admin/versioncontrol/repository/' + names[2]) tc.formvalue('trac-modrepos', 'name', names[0]) tc.submit('save') tc.find('The repository "%s" already exists.' % names[0]) tc.notfind(internal_error)
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11194 TracError should be raised when repository with name already exists """ self._tester.go_to_admin() tc.follow("\\bRepositories\\b") tc.url(self._tester.url + "/admin/versioncontrol/repository") word = random_word() names = ["%s_%d" % (word, n) for n in xrange(3)] tc.formvalue("trac-addrepos", "name", names[0]) tc.formvalue("trac-addrepos", "dir", "/var/svn/%s" % names[0]) tc.submit() tc.notfind(internal_error) tc.formvalue("trac-addrepos", "name", names[1]) tc.formvalue("trac-addrepos", "dir", "/var/svn/%s" % names[1]) tc.submit() tc.notfind(internal_error) tc.follow("\\b" + names[1] + "\\b") tc.url(self._tester.url + "/admin/versioncontrol/repository/" + names[1]) tc.formvalue("edit", "name", names[2]) tc.submit("save") tc.notfind(internal_error) tc.url(self._tester.url + "/admin/versioncontrol/repository") tc.follow("\\b" + names[2] + "\\b") tc.url(self._tester.url + "/admin/versioncontrol/repository/" + names[2]) tc.formvalue("edit", "name", names[0]) tc.submit("save") tc.find('The repository "%s" already exists.' % names[0]) tc.notfind(internal_error)
def runTest(self): """Admin rename milestone""" name1 = self._tester.create_milestone() name2 = random_unique_camel() tid = self._tester.create_ticket(info={'milestone': name1}) milestone_url = self._tester.url + '/admin/ticket/milestones' self._tester.go_to_url(milestone_url) tc.follow(name1) tc.url(milestone_url + '/' + name1) tc.formvalue('edit', 'name', name2) tc.submit('save') tc.find(r"Your changes have been saved\.") tc.find(r"\b%s\b" % name2) tc.notfind(r"\b%s\b" % name1) self._tester.go_to_ticket(tid) tc.find('<a class="milestone" href="/milestone/%(name)s" ' 'title="No date set">%(name)s</a>' % {'name': name2}) tc.find('<strong class="trac-field-milestone">Milestone</strong>' '[ \t\n]+changed from <em>%s</em> to <em>%s</em>' % (name1, name2)) tc.find("Milestone renamed")
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11186 alias TracError should be raised when repository alias with name already exists """ self._tester.go_to_admin() tc.follow("\\bRepositories\\b") tc.url(self._tester.url + '/admin/versioncontrol/repository') word = random_word() target = '%s_repos' % word name = '%s_alias' % word tc.formvalue('trac-addrepos', 'name', target) tc.formvalue('trac-addrepos', 'dir', '/var/svn/%s' % target) tc.submit() tc.find('The repository "%s" has been added.' % target) tc.formvalue('trac-addalias', 'name', name) tc.formvalue('trac-addalias', 'alias', target) tc.submit() tc.find('The alias "%s" has been added.' % name) tc.formvalue('trac-addalias', 'name', name) tc.formvalue('trac-addalias', 'alias', target) tc.submit() tc.find('The alias "%s" already exists.' % name) tc.notfind(internal_error)
def runTest(self): """Add a file to the repository and verify it is in the browser""" # Add a file to Subversion tempfilename = random_word() + '_repo_browse.txt' fulltempfilename = 'component1/trunk/' + tempfilename revision = self._testenv.svn_add(fulltempfilename, random_page()) # Verify that it appears in the browser view: browser_url = self._tester.url + '/browser' tc.go(browser_url) tc.url(browser_url) tc.find('component1') tc.follow('component1') tc.follow('trunk') tc.follow(tempfilename) self._tester.quickjump('[%s]' % revision) tc.find('Changeset %s' % revision) tc.find('admin') tc.find('Add %s' % fulltempfilename) tc.find('1 added') tc.follow('Timeline') tc.find('Add %s' % fulltempfilename)
def runTest(self): """Add a file to the repository and verify it is in the browser""" # Add a file to Subversion tempfilename = random_word() + "_repo_browse.txt" fulltempfilename = "component1/trunk/" + tempfilename revision = self._testenv.svn_add(fulltempfilename, random_page()) # Verify that it appears in the browser view: browser_url = self._tester.url + "/browser" tc.go(browser_url) tc.url(browser_url) tc.find("component1") tc.follow("component1") tc.follow("trunk") tc.follow(tempfilename) self._tester.quickjump("[%s]" % revision) tc.find("Changeset %s" % revision) tc.find("admin") tc.find("Add %s" % fulltempfilename) tc.find("1 added") tc.follow("Timeline") tc.find("Add %s" % fulltempfilename)
def runTest(self): """Create a directory tree in the repository""" # This should probably use the svn bindings... directories = [] for component in ('component1', 'component2'): directories.append(component) for subdir in ('branches', 'tags', 'trunk'): directories.append('/'.join([component, subdir])) commit_message = 'Create component trees.' self._testenv.svn_mkdir(directories, commit_message) browser_url = self._tester.url + '/browser' tc.go(browser_url) tc.url(browser_url) tc.find('component1') tc.find('component2') tc.follow('Last Change') tc.url(self._tester.url + '/changeset/1/') tc.find(commit_message) for directory in directories: tc.find(directory) tc.back() tc.follow('Revision Log') # (Note that our commit log message is short enough to avoid # truncation.) tc.find(commit_message) tc.follow('Timeline') # (Note that our commit log message is short enough to avoid # truncation.) tc.find(commit_message) tc.formvalue('prefs', 'ticket', False) tc.formvalue('prefs', 'milestone', False) tc.formvalue('prefs', 'wiki', False) tc.submit() tc.find('by.*admin') # (Note that our commit log message is short enough to avoid # truncation.) tc.find(commit_message)
def runTest(self): """Create a directory tree in the repository""" # This should probably use the svn bindings... directories = [] for component in ("component1", "component2"): directories.append(component) for subdir in ("branches", "tags", "trunk"): directories.append("/".join([component, subdir])) commit_message = "Create component trees." self._testenv.svn_mkdir(directories, commit_message) browser_url = self._tester.url + "/browser" tc.go(browser_url) tc.url(browser_url) tc.find("component1") tc.find("component2") tc.follow("Last Change") tc.url(self._tester.url + "/changeset/1/") tc.find(commit_message) for directory in directories: tc.find(directory) tc.back() tc.follow("Revision Log") # (Note that our commit log message is short enough to avoid # truncation.) tc.find(commit_message) tc.follow("Timeline") # (Note that our commit log message is short enough to avoid # truncation.) tc.find(commit_message) tc.formvalue("prefs", "ticket", False) tc.formvalue("prefs", "milestone", False) tc.formvalue("prefs", "wiki", False) tc.submit() tc.find("by.*admin") # (Note that our commit log message is short enough to avoid # truncation.) tc.find(commit_message)