def test_predicates(): class app(App): pass dectate.commit(app) def view(self, request): return "all" def post_view(self, request): return "post" app.get_view.register(View(view), model=Model) app.get_view.register(View(post_view), model=Model, request_method="POST") model = Model() assert ( resolve_response(model, app().request(get_environ(path=""))).body == b"all" ) assert ( resolve_response( model, app().request(get_environ(path="", method="POST")) ).body == b"post" )
def test_response_returned(): class app(morepath.App): pass dectate.commit(app) def view(self, request): return Response('Hello world!') app.get_view.register(View(view), model=Model) model = Model() response = resolve_response(model, app().request(get_environ(path=''))) assert response.body == b'Hello world!'
def test_view(): class app(App): pass dectate.commit(app) def view(self, request): return "View!" app.get_view.register(View(view), model=Model) model = Model() result = resolve_response(model, app().request(get_environ(path=''))) assert result.body == b'View!'
def test_notfound_with_predicates(): class app(morepath.App): pass dectate.commit(app) def view(self, request): return "view" app.get_view.register(View(view), model=Model) model = Model() request = app().request(get_environ('')) request.unconsumed = ['foo'] with pytest.raises(HTTPNotFound): resolve_response(model, request)
def test_render_html(): class app(App): pass dectate.commit(app) def view(self, request): return '<p>Hello world!</p>' app.get_view.register(View(view, render=render_html), model=Model) request = app().request(get_environ(path='')) model = Model() response = resolve_response(model, request) assert response.body == b'<p>Hello world!</p>' assert response.content_type == 'text/html'
def test_view_after(): class app(morepath.App): pass dectate.commit(app) def view(self, request): @request.after def set_header(response): response.headers.add('Foo', 'FOO') return "View!" app.get_view.register(View(view), model=Model) model = Model() result = resolve_response(model, app().request(get_environ(path=''))) assert result.body == b'View!' assert result.headers.get('Foo') == 'FOO'
def test_view_after_non_decorator(): class app(morepath.App): pass dectate.commit(app) def set_header(response): response.headers.add("Foo", "FOO") def view(self, request): request.after(set_header) return "View!" app.get_view.register(View(view), model=Model) model = Model() result = resolve_response(model, app().request(get_environ(path=""))) assert result.body == b"View!" assert result.headers.get("Foo") == "FOO"
def test_view_after_redirect(): class app(morepath.App): pass dectate.commit(app) def view(self, request): @request.after def set_header(response): response.headers.add('Foo', 'FOO') return morepath.redirect('http://example.org') app.get_view.register(View(view), model=Model) model = Model() result = resolve_response(model, app().request(get_environ(path=''))) assert result.status_code == 302 assert result.headers.get('Location') == 'http://example.org' assert result.headers.get('Foo') == 'FOO'
def test_view_raises_http_error(): class app(morepath.App): pass dectate.commit(app) def view(self, request): raise HTTPBadRequest() path_registry = app.config.path_registry path_registry.register_path(Model, 'foo', None, None, None, None, False, None, Model) app.get_view.register(View(view), model=Model) request = app().request(get_environ(path='foo')) with pytest.raises(HTTPBadRequest): publish(request)
def test_request_view(): class app(morepath.App): pass dectate.commit(app) def view(self, request): return {'hey': 'hey'} app.get_view.register(View(view, render=render_json), model=Model) request = app().request(get_environ(path='')) model = Model() response = resolve_response(model, request) # when we get the response, the json will be rendered assert response.body == b'{"hey":"hey"}' assert response.content_type == 'application/json' # but we get the original json out when we access the view assert request.view(model) == {'hey': 'hey'}
def test_request_view_with_predicates(): class app(morepath.App): pass dectate.commit(app) def view(self, request): return {'hey': 'hey'} app.get_view.register(View(view, render=render_json), model=Model, name='foo') request = app().request(get_environ(path='')) model = Model() # since the name is set to foo, we get nothing here assert request.view(model) is None # we have to pass the name predicate ourselves assert request.view(model, name='foo') == {'hey': 'hey'} # the predicate information in the request is ignored when we do a # manual view lookup using request.view request = app().request(get_environ(path='foo')) assert request.view(model) is None