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)
示例#2
0
  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())
示例#3
0
  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")))
示例#4
0
  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-&lt;anything&gt;'" in request.getWrittenData())
示例#5
0
  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())
示例#6
0
  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)
示例#9
0
    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)
示例#10
0
 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()
示例#11
0
 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()
示例#12
0
    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)
示例#14
0
    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'))