def test_route_tuple(self): """ Routes can be specified as tuples. """ interceptor = route.router((u'/foo', route.GET, [tracer('a')])) context = empty_context.set(REQUEST, basic_request(uri=u'/foo')) self.assertThat( execute(context, [interceptor]), succeeded(Traced(Equals(v(('enter', 'a'), ('leave', 'a'))))))
def test_after(self): """ Interceptor only has a leave function. """ interceptors = [tracer('a'), after(tracing('leave', 'b')), tracer('c')] self.assertThat( execute(empty_context, interceptors), succeeded( Traced( Equals( v(('enter', 'a'), ('enter', 'c'), ('leave', 'c'), ('leave', 'b'), ('leave', 'a'))))))
def test_path_specificity(self): """ Ensure that more specific routes have a higher priority than less specific routes. """ interceptor = route.router( route.route(u'/bar', route.GET, [tracer('b')], u'b'), route.route(u'/bar/:id/*rest', route.GET, [tracer('d')], u'd'), route.route(u'/foo', route.GET, [tracer('a')], u'a'), route.route(u'/bar/:id', route.GET, [tracer('c')], u'c')) req = lambda uri: execute( empty_context.set(REQUEST, basic_request(uri=uri)), [interceptor]) self.assertThat( req(u'/foo'), succeeded(Traced(Equals(v(('enter', 'a'), ('leave', 'a')))))) self.assertThat( req(u'/bar'), succeeded(Traced(Equals(v(('enter', 'b'), ('leave', 'b')))))) self.assertThat( req(u'/bar/1'), succeeded(Traced(Equals(v(('enter', 'c'), ('leave', 'c')))))) self.assertThat( req(u'/bar/1/pa/th'), succeeded(Traced(Equals(v(('enter', 'd'), ('leave', 'd'))))))
def test_error_handler(self): """ Interceptor only has an error function. """ def _swallow(marker): return lambda context, error: tracing('error', ( marker, 'from', error.failure.value.source))(context) interceptors = [ tracer('a'), error_handler(_swallow('b')), thrower('c'), tracer('d') ] self.assertThat( execute(empty_context, interceptors), succeeded( Traced( Equals( v(('enter', 'a'), ('error', ('b', 'from', 'c')), ('leave', 'a'))))))