def test_request_scope_successive_calls(self): callee = mock.Mock() def configure(binder): binder.bind(object, to=lambda: callee(), scope=klein.ext.injector.request ) inj = injector.Injector([configure]) app = klein.Klein() kr = KleinResource(app) klein.ext.injector.KleinInjector(app, inj) @app.route("/") @injector.inject(p1=object) def test_handler(request, p1): return "Hello" @app.route("/page2") @injector.inject(p1=object) def test_handler(request, p1): return "Hello" yield _render(kr, requestMock('/')) yield _render(kr, requestMock('/')) yield _render(kr, requestMock('/page2')) self.assertEqual(callee.call_count, 3)
def test_invalid_email(self): request = requestMock(b"/api/not-a-valid-email") deferred = _render(KleinResource(self.app), request) self.assertEqual(self.successResultOf(deferred), None) self.assertEqual(request.code, 400) self.assertTrue(b"Invalid email address: 'not-a-valid-email'." in request.getWrittenData())
def test_valid_macaddr(self): request = requestMock(b"/api/00:00:DE:CA:FB:AD") deferred = _render(KleinResource(self.app), request) self.assertEqual(self.successResultOf(deferred), None) self.assertEqual(request.code, 200) self.assertEqual(request.getWrittenData(), six.b(json.dumps("00:00:DE:CA:FB:AD")))
def test_html_escape(self): request = requestMock(b"/api/not-a-valid-<anything>") deferred = _render(KleinResource(self.app), request) self.assertEqual(self.successResultOf(deferred), None) self.assertEqual(request.code, 400) self.assertTrue(b"'not-a-valid-<anything>'" in request.getWrittenData())
def test_invalid_serial(self): request = requestMock(b"/api/not a valid serial") deferred = _render(KleinResource(self.app), request) self.assertEqual(self.successResultOf(deferred), None) self.assertEqual(request.code, 400) self.assertTrue(b"Invalid serial number: 'not a valid serial'." in request.getWrittenData())
def test_valid_email(self): request = requestMock(b"/api/[email protected]") deferred = _render(KleinResource(self.app), request) self.assertEqual(self.successResultOf(deferred), None) self.assertEqual(request.code, 200) self.assertEqual(request.getWrittenData(), six.b(json.dumps("*****@*****.**")))
def test_double_injection(self): msg1 = "Hello world from injector!" msg2 = ("hello", "word") def configure(binder): binder.bind(str, to=msg1) binder.bind(tuple, to=msg2) inj = injector.Injector([configure]) app = klein.Klein() kr = KleinResource(app) klein.ext.injector.KleinInjector(app, inj) @app.route("/") @injector.inject(p1=str, p2=tuple) def test_handler(request, p1, p2): return "-".join((p1, ) + p2) request = requestMock('/') yield _render(kr, request) self.assertEqual( request.getWrittenData(), "-".join((msg1,) + msg2) )
def test_request_scope_sub_calls(self): callee = mock.Mock() def configure(binder): binder.bind(object, to=lambda: callee(), scope=klein.ext.injector.request ) inj = injector.Injector([configure]) app = klein.Klein() kr = KleinResource(app) klein.ext.injector.KleinInjector(app, inj) @injector.inject(arg=object) def handler_dep_dep(arg): return True @injector.inject(arg=object, depDep=handler_dep_dep) def handler_dep(arg, depDep): return True @app.route("/") @injector.inject(p1=object, depRv=handler_dep) def test_handler(request, p1, depRv): return "Hello" yield _render(kr, requestMock('/')) self.assertEqual(callee.call_count, 1)
def test_route_match_required_with_cookie(self): request = requestMock(b"/api/[email protected]") request.received_cookies = {b'token': mock.sentinel} deferred = _render(self.kr, request) self.assertEqual(self.successResultOf(deferred), None) self.assertEqual(request.getWrittenData(), json.dumps(self.userinfo).encode('ascii')) self.auth.decode_token.assert_called_once_with(mock.sentinel)
def get(self, uri): """ Issue a virtual GET request to the given path that is expected to succeed synchronously, and return the generated request object and written bytes. """ request = requestMock(uri) d = _render(self.kr, request) self.successResultOf(d) return request, request.getWrittenData()
def test_route_match_required_with_header(self): request = requestMock(b"/api/[email protected]", headers={b'Authorization': [str(mock.sentinel)]}) deferred = _render(self.kr, request) self.assertEqual(self.successResultOf(deferred), None) self.assertEqual(request.getWrittenData(), json.dumps(self.userinfo).encode('ascii')) self.auth.decode_header_value.assert_called_once_with( str(mock.sentinel))
def test_basic_injection(self): TEST_MSG = "Hello world from injector!" def configure(binder): binder.bind(str, to=TEST_MSG) inj = injector.Injector([configure]) app = klein.Klein() klein.ext.injector.KleinInjector(app, inj) @app.route("/") @injector.inject(injectedParam=str) def test_handler(request, injectedParam): return injectedParam request = requestMock('/') kr = KleinResource(app) yield _render(kr, request) self.assertEqual(request.getWrittenData(), TEST_MSG)
def test_route_match_required(self): app = klein.Klein() kr = KleinResource(app) @app.route("/api/<string:email>", endpoint="endpoint") @self.auth.match_required def endpoint(request, userinfo, email): logger.debug( "in endpoint: request={!r}, userinfo={!r}, email={!r}", request, userinfo, email) return json.dumps(userinfo) request = requestMock(b"/api/[email protected]") deferred = _render(kr, request) self.assertEqual(self.successResultOf(deferred), None) self.assertEqual(request.getWrittenData(), json.dumps(self.userinfo).encode('ascii'))