def runTest(self): team_name = 'team_for_capacity_saving' member_name = 'Team member_name' sprint_name = 'capacity_saving_sprint' self._tester.login_as(Usernames.admin) self._tester.create_new_team(team_name) self._tester.add_member_to_team(team_name, member_name) sprint_start = now() self._tester.create_sprint_via_admin(sprint_name, start=sprint_start, team=team_name) # having tasks with remaining time which were not assigned to a specific # user triggered another bug on the team page. attributes = dict(sprint=sprint_name, remaining_time='12') self._tester.create_new_agilo_task('Not assigned Task', **attributes) self._tester.login_as(Usernames.scrum_master) self._tester.go_to_team_page(team_name, sprint_name) team_page_url = tc.get_browser().get_url() day_ordinal = (sprint_start + timedelta(days=3)).toordinal() input_name = 'ts_%s_%d' % (member_name, day_ordinal) tc.formvalue('team_capacity_form', input_name, '2') tc.submit('save') tc.code(200) tc.url(team_page_url)
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): self._tester.login_as(Usernames.admin) # get page for editing requirement ticket type page_url = self._tester.url + '/admin/agilo/types/requirement' tc.go(page_url) tc.url(page_url) tc.code(200) tc.find('requirement') tc.find('Alias:') # test default field tc.find('name="fields" value="businessvalue" checked="checked"') # change alias and fields and save tc.formvalue('modcomp', 'fields', '+priority') tc.formvalue('modcomp', 'fields', '-businessvalue') tc.formvalue('modcomp', 'fields', '-milestone') tc.formvalue('modcomp', 'fields', '-keywords') tc.submit('save') # redirects to list page, now only the priority should be selected tc.find('<td class="fields">[\n ]*Priority<br />[\n ]*</td>') tc.go(page_url) # We must ensure that these fields are available for later tests. tc.formvalue('modcomp', 'fields', '+businessvalue') tc.formvalue('modcomp', 'fields', '+milestone') tc.submit('save')
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 _test_adding_a_backlog(self, page_url, backlog_name): tc.go(page_url) tc.url(page_url) tc.fv('addbacklog', 'name', backlog_name) tc.submit('add') # we're at the edit page backlog_url = page_url + '/' + backlog_name tc.url(backlog_url)
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 remove version""" name = "VersionRemove" self._tester.create_version(name) version_url = self._tester.url + "/admin/ticket/versions" tc.go(version_url) tc.formvalue('version_table', 'sel', name) tc.submit('remove') tc.url(version_url + '$') tc.notfind(name)
def runTest(self): """Admin remove version""" name = self._testenv.add_version() self._tester.go_to_url('/admin/ticket/versions') tc.find(name) tc.formvalue('version_table', 'sel', name) tc.submit('remove') tc.url(self._tester.url + "/admin/ticket/versions", regexp=False) tc.notfind(name)
def runTest(self): """Admin remove priority""" name = self._testenv.add_priority() self._tester.go_to_url('/admin/ticket/priority') tc.find(name) tc.formvalue('enumtable', 'sel', name) tc.submit('remove') priority_url = self._tester.url + '/admin/ticket/priority' tc.url(priority_url, regexp=False) tc.notfind(name)
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 badly renumber priorities""" # Make the first priority the 2nd priority, and leave the 2nd priority # as the 2nd priority. priority_url = self._tester.url + '/admin/ticket/priority' self._tester.go_to_url(priority_url) tc.formvalue('enumtable', 'value_1', '2') tc.submit('apply') tc.url(priority_url + '#', regexp=False) tc.find('Order numbers must be unique')
def runTest(self): """Admin milestone listing.""" name1 = self._tester.create_milestone() self._tester.create_ticket(info={'milestone': name1}) name2 = self._tester.create_milestone() milestone_url = self._tester.url + '/admin/ticket/milestones' tc.go(milestone_url) tc.url(milestone_url) tc.find(r'<a href="/admin/ticket/milestones/%(name)s">%(name)s</a>' % {'name': name1}) m1_query_link = r'<a href="/query\?group=status&' \ r'milestone=%(name)s">1</a>' % {'name': name1} tc.find(m1_query_link) tc.find(r'<a href="/admin/ticket/milestones/%(name)s">%(name)s</a>' % {'name': name2}) tc.notfind(r'<a href="/query\?group=status&milestone=%(name)s">' r'0</a>' % {'name': name2}) apply_submit = '<input type="submit" name="apply" ' \ 'value="Apply changes" />' clear_submit = '<input type="submit"[ \t\n]+title="Clear default ' \ 'ticket milestone and default retargeting milestone"' \ '[ \t\n]+name="clear" value="Clear defaults" />' tc.find(apply_submit) tc.find(clear_submit) tc.find( '<input type="radio" name="ticket_default" value="%(name)s"/>' % {'name': name1}) tc.find( '<input type="radio" name="retarget_default" value="%(name)s"/>' % {'name': name1}) # TICKET_ADMIN is required to change the ticket default and retarget # default configuration options. TICKET_VIEW is required for the # milestone tickets query link to be present. try: self._testenv.grant_perm('user', 'MILESTONE_ADMIN') self._testenv.revoke_perm('anonymous', 'TICKET_VIEW') self._tester.go_to_front() self._tester.logout() self._tester.login('user') tc.go(milestone_url) tc.notfind(apply_submit) tc.notfind(clear_submit) tc.find('<input type="radio" name="ticket_default" ' 'disabled="disabled" value="%(name)s"/>' % {'name': name1}) tc.find('<input type="radio" name="retarget_default" ' 'disabled="disabled" value="%(name)s"/>' % {'name': name1}) tc.notfind(m1_query_link) finally: self._testenv.revoke_perm('user', 'MILESTONE_ADMIN') self._testenv.grant_perm('anonymous', 'TICKET_VIEW') self._tester.logout() self._tester.login('admin')
def runTest(self): """Admin create duplicate version""" name = "DuplicateVersion" self._tester.create_version(name) version_admin = self._tester.url + "/admin/ticket/versions" tc.go(version_admin) tc.url(version_admin) tc.formvalue('addversion', 'name', name) tc.submit() tc.notfind(internal_error) tc.find(escape('Version "%s" already exists.' % name))
def runTest(self): """Admin badly renumber priorities""" # Make the first priority the 2nd priority, and leave the 2nd priority # as the 2nd priority. priority_url = self._tester.url + '/admin/ticket/priority' tc.go(priority_url) tc.url(priority_url + '$') tc.formvalue('enumtable', 'value_1', '2') tc.submit('apply') tc.url(priority_url + '$') tc.find('Order numbers must be unique')
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 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): """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 create duplicate version""" name = "DuplicateVersion" self._tester.create_version(name) version_admin = self._tester.url + "/admin/ticket/versions" tc.go(version_admin) tc.url(version_admin) tc.formvalue('addversion', 'name', name) tc.submit() tc.notfind(internal_error) tc.find('Version "%s" already exists.' % name)
def runTest(self): """Admin remove priority""" name = "RemovePriority" 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.formvalue('enumtable', 'sel', name) tc.submit('remove') tc.url(priority_url + '$') tc.notfind(name)
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): """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 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): """Test for regression of http://trac.edgewall.org/ticket/11438 fix for log: link with revision ranges included "head" keyword """ rev = self._testenv.svn_mkdir(['ticket11438'], '') rev = self._testenv.svn_add('ticket11438/file1.txt', '') rev = self._testenv.svn_add('ticket11438/file2.txt', '') tc.go(self._tester.url + '/intertrac/log:@%d:head' % (rev - 1)) tc.url(self._tester.url + r'/log/\?revs=' + str(rev - 1) + '-head') tc.notfind('@%d' % (rev + 1)) tc.find('@%d' % rev) tc.find('@%d' % (rev - 1)) tc.notfind('@%d' % (rev - 2))
def runTest(self): """Test for regression of http://trac.edgewall.org/ticket/11438 fix for log: link with revision ranges included "head" keyword """ rev = self._testenv.svn_mkdir(["ticket11438"], "") rev = self._testenv.svn_add("ticket11438/file1.txt", "") rev = self._testenv.svn_add("ticket11438/file2.txt", "") tc.go(self._tester.url + "/intertrac/log:@%d:head" % (rev - 1)) tc.url(self._tester.url + r"/log/\?revs=" + str(rev - 1) + "-head") tc.notfind("@%d" % (rev + 1)) tc.find("@%d" % rev) tc.find("@%d" % (rev - 1)) tc.notfind("@%d" % (rev - 2))
def runTest(self): """Admin create duplicate milestone""" name = "DuplicateMilestone" self._tester.create_milestone(name) milestone_url = self._tester.url + "/admin/ticket/milestones" tc.go(milestone_url) tc.url(milestone_url) tc.formvalue('addmilestone', 'name', name) tc.submit() tc.notfind(internal_error) tc.find('Milestone "%s" already exists, please choose ' 'another name.' % name) tc.notfind('%s')
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): self._tester.login_as(Usernames.admin) self._tester.delete_custom_field('remaining_time', 'Remaining Time') # add the field again tc.formvalue('addcf', 'name', 'remaining_time') # don't put a value in label field, test empty value tc.submit('add') tc.code(200) tc.url(self._tester.url + '/admin/agilo/fields') # redirects to list page, now link with default label # should be found again tc.find('<td><a href="/admin/agilo/fields/remaining_time">remaining_time') tc.find('<td>Remaining_time</td>', 'm') last = self._get_number_of_custom_fields() self._assert_field_has_number('remaining_time', last) self._tester.modify_custom_field('remaining_time', label='Linking Source') # see if the new label is found tc.find('<td>Linking Source</td>') # add another field tc.formvalue('addcf', 'name', 'testfield') tc.formvalue('addcf', 'label', 'Test Field') tc.submit('add') # see if the new label is found tc.find('<td><a href="/admin/agilo/fields/testfield">testfield') tc.find('<td>Test Field</td>') tc.code(200) # set order of fields last = self._get_number_of_custom_fields() # There are 7 standard fields, so these new ones should be 7 and 8. ord1 = str(last - 1) ord2 = str(last) # check the actual position of the two custom fields self._assert_field_has_number('remaining_time', ord1) self._assert_field_has_number('testfield', ord2) # Change the order tc.formvalue('customfields', 'order_testfield', ord1) tc.formvalue('customfields', 'order_remaining_time', ord2) tc.submit('apply') # has the order been changed? This regex finds the order select field # for testfield and the selected option -> should be 8 tc.find('<select name="order_remaining_time">(</*option>|\s|\d)*' \ '<option selected="selected">\s*' + ord2, 'm') tc.find('<select name="order_testfield">(</*option>|\s|\d)*' \ '<option selected="selected">\s*' + ord1, 'm')
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): """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): """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 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): """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): """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): name = self._testenv.add_milestone() tid1 = self._tester.create_ticket(info={'milestone': name}) tc.click('#propertyform .collapsed .foldable a') tc.formvalue('propertyform', 'action', 'resolve') tc.formvalue('propertyform', 'action_resolve_resolve_resolution', 'fixed') tc.submit('submit') # Check that hint is shown when there are no open tickets to retarget milestone_url = self._tester.url + "/admin/ticket/milestones/" + name self._tester.go_to_url(milestone_url) tc.find("There are no open tickets associated with this milestone.") retarget_to = self._testenv.add_milestone() # Check that open tickets retargeted, closed not retargeted tid2 = self._tester.create_ticket(info={'milestone': name}) self._tester.go_to_url(milestone_url) completed = format_datetime(datetime_now(tz=utc) - datetime.timedelta(hours=1), tzinfo=localtz, locale=locale_en) tc.formvalue('edit', 'completed', True) tc.formvalue('edit', 'completeddate', completed) tc.formvalue('edit', 'target', retarget_to) tc.submit('save') tc.url(self._tester.url + '/admin/ticket/milestones') tc.find('The open tickets associated with milestone "%s" ' 'have been retargeted to milestone "%s".' % (name, retarget_to)) tc.find("Completed") # Closed ticket will not be retargeted. self._tester.go_to_ticket(tid1) tc.find('<a class="closed milestone" href="/milestone/%(name)s" ' 'title="Completed .+ ago (.+)">%(name)s</a>' % {'name': name}) tc.notfind('changed from <em>%s</em> to <em>%s</em>' % (name, retarget_to)) tc.notfind("Ticket retargeted after milestone closed") # Open ticket will be retargeted. self._tester.go_to_ticket(tid2) tc.find('<a class="milestone" href="/milestone/%(name)s" ' 'title="No date set">%(name)s</a>' % {'name': retarget_to}) tc.find('<span class="trac-field-old">%s</span>' '[ \n]+→[ \n]+' '<span class="trac-field-new">%s</span>' % (name, retarget_to)) tc.find("Ticket retargeted after milestone closed")
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 remove multiple versions""" name = [] count = 3 for i in range(count): name.append(self._testenv.add_version()) self._tester.go_to_url('/admin/ticket/versions') for i in range(count): tc.find(name[i]) for i in range(count): tc.formvalue('version_table', 'sel', name[i]) tc.submit('remove') tc.url(self._tester.url + '/admin/ticket/versions', regexp=False) for i in range(count): tc.notfind(name[i])
def runTest(self): self._tester.login_as(Usernames.admin) # Create the milestone first self._tester.create_milestone('milestone2') # get sprint listing, should be empty page_url = self._tester.url + '/admin/agilo/sprints' tc.go(page_url) tc.url(page_url) tc.code(200) # add new sprint sprint_start = normalize_date(now()) sprint_name = 'Test sprint' tc.formvalue('addsprint', 'name', sprint_name) tc.formvalue('addsprint', 'start', format_datetime(sprint_start, format='iso8601')) tc.formvalue('addsprint', 'duration', '1') tc.formvalue('addsprint', 'milestone', 'milestone2') tc.submit('add') # add redirects to list view, new sprint should be in there tc.find(sprint_name) # go to detail page tc.go("%s/%s" % (page_url, quote(sprint_name))) # see if milestone is set correctly tc.find('<option selected="selected">\s*milestone2') # test setting end date, not duration tc.formvalue('modcomp', 'description', '[http://www.example.com]') tomorrow = sprint_start + timedelta(days=1) tc.formvalue('modcomp', 'end', format_datetime(tomorrow, format='iso8601')) tc.formvalue('modcomp', 'duration', '') tc.submit('save') tc.url(page_url) # duration of the new sprint should be 2 tc.find('"duration">2</td>') # --- test invalid values when adding sprint --- # no values, should redirect to list view tc.formvalue('addsprint', 'name', '') tc.submit('add') tc.url(page_url) # invalid date, should throw an error tc.formvalue('addsprint', 'name', 'Testsprint 2') tc.formvalue('addsprint', 'start', '2008 May 13') tc.formvalue('addsprint', 'duration', '1') tc.submit('add') tc.find('Error: Invalid Date') # no end date or duration tc.go(page_url) tc.formvalue('addsprint', 'name', 'Testsprint 2') yesterday = now() - timedelta(days=3) tc.formvalue('addsprint', 'start', format_datetime(yesterday, format='iso8601')) tc.submit('add') tc.url(page_url)
def runTest(self): # First login as team member, there should be no Requirement but the task self._tester.login_as(Usernames.team_member) tc.go('/newticket?type=task') tc.url(r'(.+)(/newticket\?type=task)') error_msg = 'Requirement should not be allowed for team members!' self.assertNotFindItem('field-type', 'Requirement', error_msg) tc.fv('propertyform', 'field-type', 'Task') # Now login as PO and the Requirement should be there, but the task not self._tester.login_as(Usernames.product_owner) tc.go('/newticket?type=requirement') tc.url(r'(.+)(/newticket\?type=requirement)') error_msg = 'Task should not be allowed for product owner!' self.assertNotFindItem('field-type', 'Task', error_msg) tc.fv('propertyform', 'field-type', 'Requirement')
def runTest(self): """Admin remove multiple priorities""" name = "MultiRemovePriority" count = 3 for i in range(count): self._tester.create_priority("%s%s" % (name, i)) priority_url = self._tester.url + '/admin/ticket/priority' tc.go(priority_url) tc.url(priority_url + '$') for i in range(count): tc.find("%s%s" % (name, i)) for i in range(count): tc.formvalue('enumtable', 'sel', "%s%s" % (name, i)) tc.submit('remove') tc.url(priority_url + '$') for i in range(count): tc.notfind("%s%s" % (name, i))
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): """Admin remove multiple milestones""" name = "MultiRemoveMilestone" count = 3 for i in range(count): self._tester.create_milestone("%s%s" % (name, i)) milestone_url = self._tester.url + '/admin/ticket/milestones' tc.go(milestone_url) tc.url(milestone_url + '$') for i in range(count): tc.find("%s%s" % (name, i)) for i in range(count): tc.formvalue('milestone_table', 'sel', "%s%s" % (name, i)) tc.submit('remove') tc.url(milestone_url + '$') for i in range(count): tc.notfind("%s%s" % (name, i))
def runTest(self): """Admin remove multiple versions""" name = "MultiRemoveVersion" count = 3 for i in range(count): self._tester.create_version("%s%s" % (name, i)) version_url = self._tester.url + '/admin/ticket/versions' tc.go(version_url) tc.url(version_url + '$') for i in range(count): tc.find("%s%s" % (name, i)) for i in range(count): tc.formvalue('version_table', 'sel', "%s%s" % (name, i)) tc.submit('remove') tc.url(version_url + '$') for i in range(count): tc.notfind("%s%s" % (name, i))
def _close_sprint(name, retarget=None): page_url = '%s/%s' % (SPRINT_URL, name) confirm_url = '%s/%s/confirm' % (SPRINT_URL, name) tc.go(page_url) tc.fv('confirmform', 'close', 'click') tc.submit() # show confirmation form tc.url(confirm_url) if retarget is not None: # should show that one ticket can be retargeted tc.find('Retarget the \d+ remaining tickets to sprint') tc.fv('confirmform', 'retarget', retarget) tc.fv('confirmform', 'sure', 'click') tc.submit('sure') # we're back at the roadmap tc.url('/roadmap')
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 _delete_sprint(name, retarget=None, tickets=0): page_url = '%s/%s' % (SPRINT_URL, name) confirm_url = '%s/%s/confirm' % (SPRINT_URL, name) tc.go(page_url) tc.fv('confirmform', 'delete', 'click') tc.submit() # show confirmation form tc.url(confirm_url) if retarget is not None: # should show that some tickets can be re-targeted tc.find('Retarget the %s remaining tickets to sprint' % tickets) tc.fv('confirmform', 'retarget', retarget) tc.fv('confirmform', 'sure', 'click') tc.submit('sure') # we're back at the roadmap tc.code(200) tc.url('/roadmap')