示例#1
0
 def setUp(self):
     self.super()
     self.hostname = 'foo.example.com'
     self.path = '/json'
     self.base_url = self.hostname + self.path
     self.transport = Mock(request=self._echo_request_function)
     self.server = ServerProxy('http://' + self.base_url,
                               transport=self.transport)
示例#2
0
 def test_dont_append_slash_if_uri_ends_with_slash_already(self):
     # Check that a protocoll specification is not necessary - http will be
     # assumed
     new_hostname = self.base_url + '/'
     self.server = ServerProxy(new_hostname, transport=self.transport)
     params = dict(name='baz', value='quux')
     response = self.server.foo.bar.get(**params)
     self.assert_equals('%s/foo/bar' % self.path, response[1])
     self.assert_equals(params, response[2])
示例#3
0
 def test_transport_get_authentication_data_if_provided(self):
     self.server = ServerProxy(self.base_url,
                               transport=self.transport,
                               username='******',
                               password='******')
     params = dict(key='value')
     response = self.server.foo.bar.get(**params)
     self.assert_equals(params, response[2])
     headers = response[4]
     self.assert_equals('Basic ZjBvOmI0cg==\n', headers['AUTHORIZATION'])
示例#4
0
 def __init__(self, url, env):
     self.server = ServerProxy(url)
     self.server.save_errors_to_file(self.filename_for_exceptions())
     self.env = env
示例#5
0
class AgiloJSONTester(object):
    def __init__(self, url, env):
        self.server = ServerProxy(url)
        self.server.save_errors_to_file(self.filename_for_exceptions())
        self.env = env

    def filename_for_exceptions(self):
        try:
            testcase = get_instance_of_current_testcase()
            classname = testcase.__class__.__name__
            logdir = testcase.testenv.get_log_dir()
        except:
            logdir = os.path.dirname(os.path.abspath(__file__))
            classname = 'no_testcase_found'
        return os.path.join(logdir, '%s.html' % classname)

    def _extract_trac_session_id_from_response(self, response):
        cookie_header = response.getheader('set-cookie')
        if cookie_header:
            cookie = Cookie.SimpleCookie()
            cookie.load(cookie_header)
            if 'trac_auth' in cookie:
                return cookie['trac_auth'].value
        return None

    def create_task(self, **kwargs):
        kwargs[Key.TYPE] = Type.TASK
        return self.server.json.tickets.put(**kwargs)

    def login_as(self, username, password=None):
        if password is None:
            password = username
        # We need to store the cookie for later reuse
        self.server.set_username(username)
        self.server.set_password(password)
        (data, response) = self.server.login.get_json_with_response()
        session_id = self._extract_trac_session_id_from_response(response)
        assert session_id is not None
        self.server.set_session_id(session_id)

    # REFACT: no 'get_'
    def get_sprint_backlog(self, sprint_name):
        return self.server.json.sprints[sprint_name].backlog.get()

    def burndownvalues(self, sprint_name):
        return self.server.json.sprints[sprint_name].burndownvalues.get()

    def edit_ticket(self, ticket_id, **kwargs):
        if 'time_of_last_change' not in kwargs:
            ticket = AgiloTicket(self.env, ticket_id)
            kwargs['time_of_last_change'] = to_timestamp(ticket.time_changed)
        if 'ts' not in kwargs:
            ticket = AgiloTicket(self.env, ticket_id)
            kwargs['ts'] = str(ticket.time_changed)
        from agilo.ticket import AgiloTicketSystem
        if AgiloTicketSystem.is_trac_1_0():
            from trac.util.datefmt import to_utimestamp
            if 'view_time' not in kwargs:
                ticket = AgiloTicket(self.env, ticket_id)
                kwargs['view_time'] = str(to_utimestamp(ticket.time_changed))
            if 'submit' not in kwargs:
                kwargs['submit'] = True
        return self.server.json.tickets[ticket_id].post(**kwargs)

    def get_team_for_sprint(self, sprint_name):
        return self.server.json.sprints[sprint_name].team.get()
示例#6
0
 def __init__(self, url, env):
     self.server = ServerProxy(url)
     self.server.save_errors_to_file(self.filename_for_exceptions())
     self.env = env
示例#7
0
class AgiloJSONTester(object):
    
    def __init__(self, url, env):
        self.server = ServerProxy(url)
        self.server.save_errors_to_file(self.filename_for_exceptions())
        self.env = env
    
    def filename_for_exceptions(self):
        try:
            testcase = get_instance_of_current_testcase()
            classname = testcase.__class__.__name__
            logdir = testcase.testenv.get_log_dir()
        except:
            logdir = os.path.dirname(os.path.abspath(__file__))
            classname = 'no_testcase_found'
        return os.path.join(logdir, '%s.html' % classname)
    
    def _extract_trac_session_id_from_response(self, response):
        cookie_header = response.getheader('set-cookie')
        if cookie_header:
            cookie = Cookie.SimpleCookie()
            cookie.load(cookie_header)
            if 'trac_auth' in cookie:
                return cookie['trac_auth'].value
        return None
    
    def create_task(self, **kwargs):
        kwargs[Key.TYPE] = Type.TASK
        return self.server.json.tickets.put(**kwargs)
    
    def login_as(self, username, password=None):
        if password is None:
            password = username
        # We need to store the cookie for later reuse
        self.server.set_username(username)
        self.server.set_password(password)
        (data, response) = self.server.login.get_json_with_response()
        session_id = self._extract_trac_session_id_from_response(response)
        assert session_id is not None
        self.server.set_session_id(session_id)
    
    # REFACT: no 'get_'
    def get_sprint_backlog(self, sprint_name):
        return self.server.json.sprints[sprint_name].backlog.get()
    
    def burndownvalues(self, sprint_name):
        return self.server.json.sprints[sprint_name].burndownvalues.get()
    
    def edit_ticket(self, ticket_id, **kwargs):
        if 'time_of_last_change' not in kwargs:
            ticket = AgiloTicket(self.env, ticket_id)
            kwargs['time_of_last_change'] = to_timestamp(ticket.time_changed)
        if 'ts' not in kwargs:
            ticket = AgiloTicket(self.env, ticket_id)
            kwargs['ts'] = str(ticket.time_changed)
        from agilo.ticket import AgiloTicketSystem
        if AgiloTicketSystem.is_trac_1_0():
            from trac.util.datefmt import to_utimestamp
            if 'view_time' not in kwargs:
                ticket = AgiloTicket(self.env, ticket_id)
                kwargs['view_time'] = str(to_utimestamp(ticket.time_changed))
            if 'submit' not in kwargs:
                kwargs['submit'] = True
        return self.server.json.tickets[ticket_id].post(**kwargs)
    
    def get_team_for_sprint(self, sprint_name):
        return self.server.json.sprints[sprint_name].team.get()
示例#8
0
 def test_transport_drops_invalid_json_response_from_server(self):
     fake_response = Mock(status=200, read=lambda: '')
     transport = Mock(request=lambda *args, **kwargs: fake_response)
     server = ServerProxy('http://' + self.base_url, transport=transport)
     self.assert_raises(JSONDecodeError, server.foo.bar.get, foo='bar')