Ejemplo n.º 1
0
 def register_routes(self):
     Route.set_controller_locations(self.application.make("controllers.location"))
     self.application.bind("routes.location", "routes/web")
     self.application.make("router").add(
         Route.group(
             load(self.application.make("routes.location"), "ROUTES"), middleware=["web"]
         )
     )
Ejemplo n.º 2
0
 def register(self):
     self.app.bind('WebRoutes', web.ROUTES)
     self.app.bind('Response', None)
     self.app.bind('Storage', storage)
     self.app.bind('Route', Route())
     self.app.bind('Request', Request())
     self.app.bind('Container', self.app)
Ejemplo n.º 3
0
    def setUp(self):
        self.app = App()
        self.app.bind('Environ', generate_wsgi())
        self.app.bind('Application', application)
        self.app.make('Environ')
        self.app.bind('StatusCode', None)
        self.app.bind('Request',
                      Request(self.app.make('Environ')).load_app(self.app))
        self.app.simple(Response(self.app))
        self.app.bind('Csrf', Csrf(self.app.make('Request')))
        self.app.bind('Route', Route(self.app.make('Environ')))

        self.app.bind('ViewClass', View(self.app))

        self.app.bind(
            'WebRoutes',
            [Get().route('/', 'TestController@show').middleware('test')])

        self.app.bind('HttpMiddleware', [MiddlewareHttpTest])

        self.app.bind('RouteMiddleware', {
            'test': MiddlewareTest,
            'throttle:1,2': MiddlewareValueTest
        })

        self.provider = RouteProvider()
        self.provider.app = self.app
Ejemplo n.º 4
0
    def register(self):
        self.app.bind('HookHandler', Hook(self.app))
        self.app.bind('WebRoutes', flatten_routes(web.ROUTES))
        self.app.bind('Response', None)
        self.app.bind('Storage', storage)
        self.app.bind('Route', Route())
        self.app.bind('Request', Request())
        self.app.bind('Container', self.app)
        self.app.bind('ExceptionHandler', ExceptionHandler(self.app))

        # Insert Commands
        self.app.bind('MasoniteAuthCommand', AuthCommand())
        self.app.bind('MasoniteCommandCommand', CommandCommand())
        self.app.bind('MasoniteControllerCommand', ControllerCommand())
        self.app.bind('MasoniteInstallCommand', InstallCommand())
        self.app.bind('MasoniteJobCommand', JobCommand())
        self.app.bind('MasoniteKeyCommand', KeyCommand())
        self.app.bind('MasoniteMakeMigrationCommand', MakeMigrationCommand())
        self.app.bind('MasoniteMigrateCommand', MigrateCommand())
        self.app.bind('MasoniteMigrateRefreshCommand', MigrateRefreshCommand())
        self.app.bind('MasoniteMigrateResetCommand', MigrateResetCommand())
        self.app.bind('MasoniteMigrateRollbackCommand',
                      MigrateRollbackCommand())
        self.app.bind('MasoniteModelCommand', ModelCommand())
        self.app.bind('MasoniteProviderCommand', ProviderCommand())
        self.app.bind('MasoniteViewCommand', ViewCommand())
        self.app.bind('MasoniteRoutesCommand', RoutesCommand())
        self.app.bind('MasoniteServeCommand', ServeCommand())
        self.app.bind('MasoniteSeedCommand', SeedCommand())
        self.app.bind('MasoniteSeedRunCommand', SeedRunCommand())
        self.app.bind('MasoniteTinkerCommand', TinkerCommand())

        self._autoload(application.AUTOLOAD)
Ejemplo n.º 5
0
 def test_correctly_parses_json_with_list(self):
     environ = generate_wsgi()
     environ['CONTENT_TYPE'] = 'application/json'
     environ['REQUEST_METHOD'] = 'POST'
     environ['wsgi.input'] = WsgiInputTestClass().load(
         b'{\n    "options": ["foo", "bar"]\n}')
     route = Route(environ)
     assert route.environ['QUERY_STRING'] == {"options": ["foo", "bar"]}
Ejemplo n.º 6
0
    def test_get_json_input(self):
        json_wsgi = wsgi_request
        json_wsgi['REQUEST_METHOD'] = 'POST'
        json_wsgi['CONTENT_TYPE'] = 'application/json'
        json_wsgi['QUERY_STRING'] = ''
        json_wsgi['wsgi.input'] = MockWsgiInput()
        Route(json_wsgi)
        request_obj = Request(json_wsgi)

        assert isinstance(request_obj.request_variables, dict)
        assert request_obj.input('id') == 1
        assert request_obj.input('test') == 'testing'
 def setup_method(self):
     self.app = App()
     self.app.bind('Environ', generate_wsgi())
     self.app.bind('WebRoutes', [])
     self.app.bind('Route', Route(self.app.make('Environ')))
     self.app.bind('Request', Request(self.app.make('Environ')).load_app(self.app))
     self.app.bind('Headers', [])
     self.app.bind('HttpMiddleware', [])
     view = View(self.app)
     self.app.bind('View', view.render)
     self.provider = RouteProvider()
     self.provider.app = self.app
Ejemplo n.º 8
0
def test_get_json_input():
    json_wsgi = wsgi_request
    json_wsgi['REQUEST_METHOD'] = 'POST'
    json_wsgi['CONTENT_TYPE'] = 'application/json'
    json_wsgi['QUERY_STRING'] = ''
    json_wsgi['wsgi.input'] = MockWsgiInput()

    Route(json_wsgi)
    request_obj = Request(json_wsgi)

    assert isinstance(request_obj.params, dict)
    assert request_obj.input('payload') == {'id': 1}
Ejemplo n.º 9
0
 def test_correctly_parses_json_with_dictionary(self):
     environ = generate_wsgi()
     environ['CONTENT_TYPE'] = 'application/json'
     environ['REQUEST_METHOD'] = 'POST'
     environ['wsgi.input'] = WsgiInputTestClass().load(b'{\n    "conta_corrente": {\n        "ocultar": false,\n        "visao_geral": true,\n        "extrato": true\n    }\n}')
     route = Route(environ)
     assert route.environ['QUERY_STRING'] == {
         "conta_corrente": {
             "ocultar": False,
             "visao_geral": True,
             "extrato": True
         }
     }
 def setUp(self):
     super().setUp()
     self.setRoutes(
         Route.get("home", "TestController@show").name("home"),
         Route.get("posts", "TestController@show").name("posts.index"),
         Route.get("posts/@post", "TestController@show").name("posts.show"),
         Route.get("posts/@post/comments", "TestController@show").name("postComments.index"),
         Route.get("posts/@post/comments/@comment:int", "TestController@show").name(
             "postComments.show"
         ),
         Route.post("posts", "TestController@show").name("posts.store"),
         Route.get("admin/users", "TestController@show").name("admin.users.index"),
     )
Ejemplo n.º 11
0
class TestRoutes:
    def setup_method(self):
        self.route = Route(generate_wsgi())
        self.request = Request(generate_wsgi())

    def test_route_is_callable(self):
        assert callable(Get)
        assert callable(Post)
        assert callable(Put)
        assert callable(Patch)
        assert callable(Delete)

    def test_route_get_returns_output(self):
        assert self.route.get('url', 'output') == 'output'

    def test_route_is_not_post(self):
        assert self.route.is_post() == False

    def test_route_is_post(self):
        self.route.environ['REQUEST_METHOD'] = 'POST'
        assert self.route.is_post() == True

    def test_compile_route_to_regex(self):
        assert self.route.compile_route_to_regex(Get().route(
            'test/route', None)) == '^test\\/route\\/$'
        assert self.route.compile_route_to_regex(Get().route(
            'test/@route', None)) == '^test\\/(\\w+)\\/$'

        assert self.route.compile_route_to_regex(Get().route(
            'test/@route:int', None)) == '^test\\/(\\d+)\\/$'

        assert self.route.compile_route_to_regex(Get().route(
            'test/@route:string', None)) == '^test\\/([a-zA-Z]+)\\/$'

    def test_route_gets_controllers(self):
        assert Get().route('test/url', 'TestController@show')
        assert Get().route('test/url',
                           '/app.http.test_controllers.TestController@show')

    def test_route_doesnt_break_on_incorrect_controller(self):
        assert Get().route('test/url', 'BreakController@show')

    def test_group_route(self):
        routes = group('/example', [
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ])

        assert routes[0].route_url == '/example/test/1'
        assert routes[1].route_url == '/example/test/2'
Ejemplo n.º 12
0
    def setup_method(self):
        self.app = App()
        wsgi = generate_wsgi()
        self.request = Request(wsgi)
        self.route = Route().load_environ(wsgi)
        self.view = View(self.app)
        self.app.bind('Request', self.request)

        self.request = self.app.make('Request')
        self.app.bind('WebRoutes', [
            Get().route('/test/@route', None),
            Get().route('/test/10', None),
        ])
        self.request.container = self.app

        self.middleware = CsrfMiddleware(self.request, Csrf(self.request),
                                         self.view)
Ejemplo n.º 13
0
    def register(self):
        self.app.bind('HookHandler', Hook(self.app))
        self.app.bind('WebRoutes', flatten_routes(web.ROUTES))
        self.app.bind('Storage', storage)
        self.app.bind('Route', Route())
        self.app.bind('Request', Request())
        self.app.simple(Response(self.app))
        self.app.bind('Container', self.app)
        self.app.bind('ExceptionHandler', ExceptionHandler(self.app))
        self.app.bind('ExceptionDumpExceptionHandler', DumpHandler)
        self.app.bind('RouteMiddleware', middleware.ROUTE_MIDDLEWARE)
        self.app.bind('HttpMiddleware', middleware.HTTP_MIDDLEWARE)

        # Insert Commands
        self._load_commands()

        self._autoload(application.AUTOLOAD)
Ejemplo n.º 14
0
 def setup_method(self):
     self.app = App()
     self.app.bind('Container', self.app)
     self.app.bind('Environ', generate_wsgi())
     self.app.bind('Application', application)
     self.app.bind('WebRoutes', [])
     self.app.bind('Route', Route(self.app.make('Environ')))
     self.app.bind('Request', Request(
         self.app.make('Environ')).load_app(self.app))
     self.app.simple(Response(self.app))
     self.app.bind('StatusCode', '404 Not Found')
     self.app.bind('HttpMiddleware', middleware.HTTP_MIDDLEWARE)
     view = View(self.app)
     self.app.bind('ViewClass', view)
     self.app.bind('View', view.render)
     self.provider = RouteProvider()
     self.provider.app = self.app
Ejemplo n.º 15
0
 def setUp(self):
     self.app = App()
     self.app.bind('Container', self.app)
     self.app.bind('Environ', generate_wsgi())
     self.app.bind('Application', application)
     self.app.bind('WebRoutes', [])
     self.app.bind('Route', Route(self.app.make('Environ')))
     self.app.bind('Request',
                   Request(self.app.make('Environ')).load_app(self.app))
     self.app.simple(Response(self.app))
     self.app.bind('StatusCode', None)
     self.app.bind('HttpMiddleware', middleware.HTTP_MIDDLEWARE)
     view = View(self.app)
     self.app.bind('ViewClass', view)
     self.app.bind('View', view.render)
     self.app.bind('Auth', Auth)
     self.app.bind('Csrf', Csrf(self.app.make('Request')))
     self.app.bind('AuthCookieDriver', AuthCookieDriver)
     self.app.bind('AuthManager', AuthManager(self.app).driver('cookie'))
     self.provider = RouteProvider()
     self.provider.app = self.app
Ejemplo n.º 16
0
    def register(self):
        from routes import web
        self.app.bind('HookHandler', Hook(self.app))
        self.app.bind('WebRoutes', flatten_routes(web.ROUTES))
        self.app.bind('Storage', config('storage'))
        self.app.bind('Route', Route())
        self.app.bind('Request', Request())
        self.app.simple(Response(self.app))
        self.app.bind('Container', self.app)
        self.app.bind('ExceptionHandler', ExceptionHandler(self.app))
        self.app.bind('ExceptionDumpExceptionHandler', DumpHandler)
        self.app.bind('AuthCookieDriver', AuthCookieDriver)
        self.app.bind('AuthJwtDriver', AuthJwtDriver)
        self.app.bind('AuthManager', AuthManager(self.app).driver('cookie'))
        self.app.bind('RouteMiddleware', config('middleware.route_middleware'))
        self.app.bind('HttpMiddleware', config('middleware.http_middleware'))
        self.app.bind('Auth', Auth)

        # Insert Commands
        self._load_commands()

        self._autoload(config('application.autoload'))
 def setUp(self):
     super().setUp()
     self.setRoutes(
         Route.get("home", "TestController@show").name("home"),
         Route.get("posts", "TestController@show").name("posts.index"),
         Route.get("posts/@post", "TestController@show").name("posts.show"),
         Route.get("posts/@post/comments",
                   "TestController@show").name("postComments.index"),
         Route.get("posts/@post/comments/@comment:int",
                   "TestController@show").name("postComments.show"),
         Route.post("posts", "TestController@show").name("posts.store"),
         Route.get("admin/users",
                   "TestController@show").name("admin.users.index"),
     )
     self.original_config = {
         "filters": {
             "only": [],
             "except": [],
             "groups": {}
         },
         "skip_route_function": False,
     }
Ejemplo n.º 18
0
 def boot(self, Environ, Request, Route):
     self.app.bind('Headers', [])
     Route.load_environ(Environ)
     Request.load_environ(Environ).load_app(self.app)
Ejemplo n.º 19
0
 def setup_method(self):
     self.route = Route(generate_wsgi())
     self.request = Request(generate_wsgi())
Ejemplo n.º 20
0
class TestRoutes:
    def setup_method(self):
        self.route = Route(generate_wsgi())
        self.request = Request(generate_wsgi())

    def test_route_is_callable(self):
        assert callable(Get)
        assert callable(Post)
        assert callable(Put)
        assert callable(Patch)
        assert callable(Delete)

    def test_route_get_returns_output(self):
        assert self.route.get('url', 'output') == 'output'

    def test_route_is_not_post(self):
        assert self.route.is_post() == False

    def test_route_is_post(self):
        self.route.environ['REQUEST_METHOD'] = 'POST'
        assert self.route.is_post() == True

    def test_compile_route_to_regex(self):
        get_route = Get().route('test/route', None)
        assert get_route.compile_route_to_regex(
            self.route) == r'^test\/route\/$'

        get_route = Get().route('test/@route', None)
        assert get_route.compile_route_to_regex(
            self.route) == r'^test\/([\w.-]+)\/$'

        get_route = Get().route('test/@route:int', None)
        assert get_route.compile_route_to_regex(
            self.route) == r'^test\/(\d+)\/$'

        get_route = Get().route('test/@route:string', None)
        assert get_route.compile_route_to_regex(
            self.route) == r'^test\/([a-zA-Z]+)\/$'

    def test_route_can_add_compilers(self):
        get_route = Get().route('test/@route:int', None)
        assert get_route.compile_route_to_regex(
            self.route) == r'^test\/(\d+)\/$'

        self.route.compile('year', r'[0-9]{4}')

        get_route = Get().route('test/@route:year', None)

        assert get_route.compile_route_to_regex(
            self.route) == r'^test\/[0-9]{4}\/$'

        get_route = Get().route('test/@route:slug', None)
        with pytest.raises(InvalidRouteCompileException):
            get_route.compile_route_to_regex(self.route)

    def test_route_gets_controllers(self):
        assert Get().route('test/url', 'TestController@show')
        assert Get().route('test/url',
                           '/app.http.test_controllers.TestController@show')

    def test_route_doesnt_break_on_incorrect_controller(self):
        assert Get().route('test/url', 'BreakController@show')

    def test_route_can_pass_route_values_in_constructor(self):
        route = Get('test/url', 'BreakController@show')
        assert route.route_url == 'test/url'
        route = Post('test/url', 'BreakController@show')
        assert route.route_url == 'test/url'
        route = Put('test/url', 'BreakController@show')
        assert route.route_url == 'test/url'
        route = Patch('test/url', 'BreakController@show')
        assert route.route_url == 'test/url'
        route = Delete('test/url', 'BreakController@show')
        assert route.route_url == 'test/url'

    def test_route_can_pass_route_values_in_constructor_and_use_middleware(
            self):
        route = Get('test/url', 'BreakController@show').middleware('auth')
        assert route.route_url == 'test/url'
        assert route.list_middleware == ['auth']

    def test_route_gets_deeper_module_controller(self):
        route = Get().route('test/url', 'subdirectory.SubController@show')
        assert route.controller
        assert isinstance(route.controller, SubController.__class__)

    def test_route_can_have_multiple_routes(self):
        assert Match(['GET', 'POST']).route(
            'test/url', 'TestController@show').method_type == ['GET', 'POST']

    def test_match_routes_convert_lowercase_to_uppercase(self):
        assert Match(['Get', 'Post']).route(
            'test/url', 'TestController@show').method_type == ['GET', 'POST']

    def test_match_routes_raises_exception_with_non_list_method_types(self):
        with pytest.raises(RouteException):
            assert Match('get').route(
                'test/url',
                'TestController@show').method_type == ['GET', 'POST']

    def test_group_route(self):
        routes = group('/example', [
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ])

        assert routes[0].route_url == '/example/test/1'
        assert routes[1].route_url == '/example/test/2'

    def test_group_route_sets_middleware(self):
        routes = RouteGroup([
            Get().route('/test/1',
                        'TestController@show').middleware('another'),
            Get().route('/test/2', 'TestController@show'),
            RouteGroup([
                Get().route('/test/3', 'TestController@show'),
                Get().route('/test/4', 'TestController@show')
            ],
                       middleware=('test', 'test2'))
        ],
                            middleware=('auth', 'user'))

        assert isinstance(routes, list)
        assert ['another', 'auth', 'user'] == routes[0].list_middleware
        assert ['auth', 'user'] == routes[1].list_middleware
        assert ['test', 'test2', 'auth', 'user'] == routes[2].list_middleware

    def test_group_route_sets_domain(self):
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ],
                            domain=['www'])

        assert routes[0].required_domain == ['www']

    def test_group_adds_methods(self):
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ],
                            add_methods=['OPTIONS'])

        assert routes[0].method_type == ['GET', 'OPTIONS']

    def test_group_route_sets_prefix(self):
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ],
                            prefix='/dashboard')

        assert routes[0].route_url == '/dashboard/test/1'

    def test_group_route_sets_name(self):
        RouteGroup([
            Get().route('/test/1', 'TestController@show').name('create'),
            Get().route('/test/2', 'TestController@show').name('edit')
        ],
                   name='post.')

    def test_group_route_sets_name_for_none_route(self):
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show').name('create'),
            Get().route('/test/2', 'TestController@show')
        ],
                            name='post.')

        assert routes[0].named_route == 'post.create'
        assert routes[1].named_route == None

    def test_flatten_flattens_multiple_lists(self):
        routes = [
            Get().route('/test/1', 'TestController@show').name('create'),
            RouteGroup([
                Get().route('/test/1', 'TestController@show').name('create'),
                Get().route('/test/2', 'TestController@show').name('edit'),
                RouteGroup([
                    Get().route('/test/1',
                                'TestController@show').name('update'),
                    Get().route('/test/2',
                                'TestController@show').name('delete'),
                    RouteGroup([
                        Get().route('/test/3',
                                    'TestController@show').name('update'),
                        Get().route('/test/4',
                                    'TestController@show').name('delete'),
                    ],
                               middleware=('auth')),
                ],
                           name='post.')
            ],
                       prefix='/dashboard')
        ]

        routes = flatten_routes(routes)

        assert routes[3].route_url == '/dashboard/test/1'
        assert routes[3].named_route == 'post.update'

    def test_correctly_parses_json_with_dictionary(self):
        environ = generate_wsgi()
        environ['CONTENT_TYPE'] = 'application/json'
        environ['REQUEST_METHOD'] = 'POST'
        environ['wsgi.input'] = WsgiInputTestClass().load(
            b'{\n    "conta_corrente": {\n        "ocultar": false,\n        "visao_geral": true,\n        "extrato": true\n    }\n}'
        )
        route = Route(environ)
        assert route.environ['QUERY_STRING'] == {
            "conta_corrente": {
                "ocultar": False,
                "visao_geral": True,
                "extrato": True
            }
        }

    def test_correctly_parses_json_with_list(self):
        environ = generate_wsgi()
        environ['CONTENT_TYPE'] = 'application/json'
        environ['REQUEST_METHOD'] = 'POST'
        environ['wsgi.input'] = WsgiInputTestClass().load(
            b'{\n    "options": ["foo", "bar"]\n}')
        route = Route(environ)
        assert route.environ['QUERY_STRING'] == {"options": ["foo", "bar"]}

    def test_redirect_route(self):
        route = Redirect('/test1', '/test2')
        request = Request(generate_wsgi())
        route.load_request(request)
        request.load_app(App())

        route.get_response()
        assert request.is_status(302)
        assert request.redirect_url == '/test2'

    def test_redirect_can_use_301(self):
        request = Request(generate_wsgi())
        route = Redirect('/test1', '/test3', status=301)

        route.load_request(request)
        request.load_app(App())
        route.get_response()
        assert request.is_status(301)
        assert request.redirect_url == '/test3'

    def test_redirect_can_change_method_type(self):
        request = Request(generate_wsgi())
        route = Redirect('/test1', '/test3', methods=['POST', 'PUT'])
        assert route.method_type == ['POST', 'PUT']
Ejemplo n.º 21
0
class TestRoutes:
    def setup_method(self):
        self.route = Route(generate_wsgi())
        self.request = Request(generate_wsgi())

    def test_route_is_callable(self):
        assert callable(Get)
        assert callable(Post)
        assert callable(Put)
        assert callable(Patch)
        assert callable(Delete)

    def test_route_get_returns_output(self):
        assert self.route.get('url', 'output') == 'output'

    def test_route_is_not_post(self):
        assert self.route.is_post() == False

    def test_route_is_post(self):
        self.route.environ['REQUEST_METHOD'] = 'POST'
        assert self.route.is_post() == True

    def test_compile_route_to_regex(self):
        assert self.route.compile_route_to_regex(Get().route(
            'test/route', None)) == '^test\\/route\\/$'
        assert self.route.compile_route_to_regex(Get().route(
            'test/@route', None)) == '^test\\/([\\w.-]+)\\/$'

        assert self.route.compile_route_to_regex(Get().route(
            'test/@route:int', None)) == '^test\\/(\\d+)\\/$'

        assert self.route.compile_route_to_regex(Get().route(
            'test/@route:string', None)) == '^test\\/([a-zA-Z]+)\\/$'

    def test_route_gets_controllers(self):
        assert Get().route('test/url', 'TestController@show')
        assert Get().route('test/url',
                           '/app.http.test_controllers.TestController@show')

    def test_route_doesnt_break_on_incorrect_controller(self):
        assert Get().route('test/url', 'BreakController@show')

    def test_group_route(self):
        routes = group('/example', [
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ])

        assert routes[0].route_url == '/example/test/1'
        assert routes[1].route_url == '/example/test/2'

    def test_group_route_sets_middleware(self):
        routes = group('/example', [
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ])

        assert routes[0].route_url == '/example/test/1'

        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ],
                            middleware=['auth', 'user'])

        assert isinstance(routes, list)

        assert routes[0].list_middleware == ('auth', 'user')

    def test_group_route_sets_domain(self):
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ],
                            domain=['www'])

        assert routes[0].required_domain == ['www']

    def test_group_route_sets_prefix(self):
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ],
                            prefix='/dashboard')

        assert routes[0].route_url == '/dashboard/test/1'

    def test_group_route_sets_name(self):
        look_for = []
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show').name('create'),
            Get().route('/test/2', 'TestController@show').name('edit')
        ],
                            name='post.')

    def test_group_route_sets_name_for_none_route(self):
        look_for = []
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show').name('create'),
            Get().route('/test/2', 'TestController@show')
        ],
                            name='post.')

        assert routes[0].named_route == 'post.create'
        assert routes[1].named_route == None

    def test_flatten_flattens_multiple_lists(self):
        routes = [
            Get().route('/test/1', 'TestController@show').name('create'),
            RouteGroup([
                Get().route('/test/1', 'TestController@show').name('create'),
                Get().route('/test/2', 'TestController@show').name('edit'),
                RouteGroup([
                    Get().route('/test/1',
                                'TestController@show').name('update'),
                    Get().route('/test/2',
                                'TestController@show').name('delete'),
                    RouteGroup([
                        Get().route('/test/3',
                                    'TestController@show').name('update'),
                        Get().route('/test/4',
                                    'TestController@show').name('delete'),
                    ],
                               middleware=('auth')),
                ],
                           name='post.')
            ],
                       prefix='/dashboard')
        ]

        routes = flatten_routes(routes)

        assert routes[3].route_url == '/dashboard/test/1'
        assert routes[3].named_route == 'post.update'
Ejemplo n.º 22
0
    def register_routes(self):
        Route.set_controller_module_location('app.controllers')

        self.application.make('router').add(
            Route.group(load_routes("routes.web"), middleware=["web"]))
Ejemplo n.º 23
0
 def setUp(self):
     self.route = Route(generate_wsgi())
     self.request = Request(generate_wsgi())
Ejemplo n.º 24
0
class TestRoutes(unittest.TestCase):
    def setUp(self):
        self.route = Route(generate_wsgi())
        self.request = Request(generate_wsgi())

    def test_route_is_callable(self):
        self.assertTrue(callable(Get))
        self.assertTrue(callable(Head))
        self.assertTrue(callable(Post))
        self.assertTrue(callable(Match))
        self.assertTrue(callable(Put))
        self.assertTrue(callable(Patch))
        self.assertTrue(callable(Delete))
        self.assertTrue(callable(Connect))
        self.assertTrue(callable(Options))
        self.assertTrue(callable(Trace))

    def test_route_prefixes_forward_slash(self):
        self.assertEqual(
            Get().route('some/url', 'TestController@show').route_url,
            '/some/url')

    def test_route_is_not_post(self):
        self.assertEqual(self.route.is_post(), False)

    def test_route_is_post(self):
        self.route.environ['REQUEST_METHOD'] = 'POST'
        self.assertEqual(self.route.is_post(), True)

    def test_compile_route_to_regex(self):
        get_route = Get().route('test/route', None)
        self.assertEqual(get_route.compile_route_to_regex(),
                         r'^\/test\/route\/$')

        get_route = Get().route('test/@route', None)
        self.assertEqual(get_route.compile_route_to_regex(),
                         r'^\/test\/([\w.-]+)\/$')

        get_route = Get().route('test/@route:int', None)
        self.assertEqual(get_route.compile_route_to_regex(),
                         r'^\/test\/(\d+)\/$')

        get_route = Get().route('test/@route:string', None)
        self.assertEqual(get_route.compile_route_to_regex(),
                         r'^\/test\/([a-zA-Z]+)\/$')

    def test_route_can_add_compilers(self):
        get_route = Get().route('test/@route:int', None)
        self.assertEqual(get_route.compile_route_to_regex(),
                         r'^\/test\/(\d+)\/$')

        self.route.compile('year', r'[0-9]{4}')

        get_route = Get().route('test/@route:year', None)

        self.assertEqual(get_route.compile_route_to_regex(),
                         r'^\/test\/[0-9]{4}\/$')

        with self.assertRaises(InvalidRouteCompileException):
            get_route = Get().route('test/@route:none', None)
            create_matchurl('/test/1', get_route)

    def test_route_gets_controllers(self):
        self.assertTrue(Get().route('test/url', 'TestController@show'))
        self.assertTrue(Get().route(
            'test/url', '/app.http.test_controllers.TestController@show'))

    def test_route_doesnt_break_on_incorrect_controller(self):
        self.assertTrue(Get().route('test/url', 'BreakController@show'))

    def test_route_can_pass_route_values_in_constructor(self):
        route = Get('test/url', 'BreakController@show')
        self.assertEqual(route.route_url, '/test/url')
        route = Head('test/url', 'BreakController@show')
        self.assertEqual(route.route_url, '/test/url')
        route = Post('test/url', 'BreakController@show')
        self.assertEqual(route.route_url, '/test/url')
        route = Put('test/url', 'BreakController@show')
        self.assertEqual(route.route_url, '/test/url')
        route = Patch('test/url', 'BreakController@show')
        self.assertEqual(route.route_url, '/test/url')
        route = Delete('test/url', 'BreakController@show')
        self.assertEqual(route.route_url, '/test/url')
        route = Connect('test/url', 'BreakController@show')
        self.assertEqual(route.route_url, '/test/url')
        route = Options('test/url', 'BreakController@show')
        self.assertEqual(route.route_url, '/test/url')
        route = Trace('test/url', 'BreakController@show')
        self.assertEqual(route.route_url, '/test/url')

    def test_route_can_pass_route_values_in_constructor_and_use_middleware(
            self):
        route = Get('test/url', 'BreakController@show').middleware('auth')
        self.assertEqual(route.route_url, '/test/url')
        self.assertEqual(route.list_middleware, ['auth'])

    def test_route_gets_deeper_module_controller(self):
        route = Get().route('test/url', 'subdirectory.SubController@show')
        self.assertTrue(route.controller)
        self.assertIsInstance(route.controller, SubController.__class__)

    def test_route_can_have_multiple_routes(self):
        self.assertEqual(
            Match(['GET', 'POST']).route('test/url',
                                         'TestController@show').method_type,
            ['GET', 'POST'])

    def test_match_routes_convert_lowercase_to_uppercase(self):
        self.assertEqual(
            Match(['Get', 'Post']).route('test/url',
                                         'TestController@show').method_type,
            ['GET', 'POST'])

    def test_match_routes_raises_exception_with_non_list_method_types(self):
        with self.assertRaises(RouteException):
            self.assertEqual(
                Match('get').route('test/url',
                                   'TestController@show').method_type,
                ['GET', 'POST'])

    def test_group_route(self):
        routes = group('/example', [
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ])

        self.assertEqual(routes[0].route_url, '/example/test/1')
        self.assertEqual(routes[1].route_url, '/example/test/2')

    def test_group_route_sets_middleware(self):
        routes = RouteGroup([
            Get().route('/test/1',
                        'TestController@show').middleware('another'),
            Get().route('/test/2', 'TestController@show'),
            RouteGroup([
                Get().route('/test/3', 'TestController@show'),
                Get().route('/test/4', 'TestController@show')
            ],
                       middleware=('test', 'test2'))
        ],
                            middleware=('auth', 'user'))

        self.assertIsInstance(routes, list)
        self.assertEqual(['another', 'auth', 'user'],
                         routes[0].list_middleware)
        self.assertEqual(['auth', 'user'], routes[1].list_middleware)
        self.assertEqual(['test', 'test2', 'auth', 'user'],
                         routes[2].list_middleware)

    def test_group_route_sets_domain(self):
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ],
                            domain=['www'])

        self.assertEqual(routes[0].required_domain, ['www'])

    def test_group_adds_methods(self):
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ],
                            add_methods=['OPTIONS'])

        self.assertEqual(routes[0].method_type, ['GET', 'OPTIONS'])

    def test_group_route_sets_prefix(self):
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show'),
            Get().route('/test/2', 'TestController@show')
        ],
                            prefix='/dashboard')

        self.assertEqual(routes[0].route_url, '/dashboard/test/1')

    def test_group_route_sets_prefix_no_route(self):
        routes = RouteGroup([
            Get('', 'TestController@show'),
        ],
                            prefix='/dashboard')

        self.assertEqual(routes[0].route_url, '/dashboard')

    def test_group_route_sets_name(self):
        RouteGroup([
            Get().route('/test/1', 'TestController@show').name('create'),
            Get().route('/test/2', 'TestController@show').name('edit')
        ],
                   name='post.')

    def test_group_route_sets_name_for_none_route(self):
        routes = RouteGroup([
            Get().route('/test/1', 'TestController@show').name('create'),
            Get().route('/test/2', 'TestController@show')
        ],
                            name='post.')

        self.assertEqual(routes[0].named_route, 'post.create')
        self.assertEqual(routes[1].named_route, None)

    def test_flatten_flattens_multiple_lists(self):
        routes = [
            Get().route('/test/1', 'TestController@show').name('create'),
            RouteGroup([
                Get().route('/test/1', 'TestController@show').name('create'),
                Get().route('/test/2', 'TestController@show').name('edit'),
                RouteGroup([
                    Get().route('/test/1',
                                'TestController@show').name('update'),
                    Get().route('/test/2',
                                'TestController@show').name('delete'),
                    RouteGroup([
                        Get().route('/test/3',
                                    'TestController@show').name('update'),
                        Get().route('/test/4',
                                    'TestController@show').name('delete'),
                    ],
                               middleware=('auth')),
                ],
                           name='post.')
            ],
                       prefix='/dashboard')
        ]

        routes = flatten_routes(routes)

        self.assertEqual(routes[3].route_url, '/dashboard/test/1')
        self.assertEqual(routes[3].named_route, 'post.update')

    def test_correctly_parses_json_with_dictionary(self):
        environ = generate_wsgi()
        environ['CONTENT_TYPE'] = 'application/json'
        environ['REQUEST_METHOD'] = 'POST'
        environ['wsgi.input'] = WsgiInputTestClass().load(
            b'{\n    "conta_corrente": {\n        "ocultar": false,\n        "visao_geral": true,\n        "extrato": true\n    }\n}'
        )
        route = Route(environ)
        self.assertEqual(
            route.environ['QUERY_STRING'], {
                "conta_corrente": {
                    "ocultar": False,
                    "visao_geral": True,
                    "extrato": True
                }
            })

    def test_correctly_parses_json_with_list(self):
        environ = generate_wsgi()
        environ['CONTENT_TYPE'] = 'application/json'
        environ['REQUEST_METHOD'] = 'POST'
        environ['wsgi.input'] = WsgiInputTestClass().load(
            b'{\n    "options": ["foo", "bar"]\n}')
        route = Route(environ)
        self.assertEqual(route.environ['QUERY_STRING'],
                         {"options": ["foo", "bar"]})

    def test_redirect_route(self):
        route = Redirect('/test1', '/test2')
        request = Request(generate_wsgi())
        route.load_request(request)
        request.load_app(App())

        route.get_response()
        self.assertTrue(request.is_status(302))
        self.assertEqual(request.redirect_url, '/test2')

    def test_redirect_can_use_301(self):
        request = Request(generate_wsgi())
        route = Redirect('/test1', '/test3', status=301)

        route.load_request(request)
        request.load_app(App())
        route.get_response()
        self.assertTrue(request.is_status(301))
        self.assertEqual(request.redirect_url, '/test3')

    def test_redirect_can_change_method_type(self):
        route = Redirect('/test1', '/test3', methods=['POST', 'PUT'])
        self.assertEqual(route.method_type, ['POST', 'PUT'])
Ejemplo n.º 25
0
    'wsgi.run_once': False,
    'SERVER_SOFTWARE': 'gunicorn/19.7.1',
    'REQUEST_METHOD': 'GET',
    'QUERY_STRING': 'application=Masonite',
    'RAW_URI': '/',
    'SERVER_PROTOCOL': 'HTTP/1.1',
    'HTTP_HOST': '127.0.0.1:8000',
    'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'HTTP_UPGRADE_INSECURE_REQUESTS': '1',
    'HTTP_COOKIE': 'setcookie=value',
    'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7',
    'HTTP_ACCEPT_LANGUAGE': 'en-us',
    'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
    'HTTP_CONNECTION': 'keep-alive',
    'wsgi.url_scheme': 'http',
    'REMOTE_ADDR': '127.0.0.1',
    'REMOTE_PORT': '62241',
    'SERVER_NAME': '127.0.0.1',
    'SERVER_PORT': '8000',
    'PATH_INFO': '/',
    'SCRIPT_NAME': ''
}

ROUTE = Route(wsgi_request)

def test_route_is_callable():
    if callable(ROUTE):
        assert True

def test_route_get_returns_output():
    assert ROUTE.get('url', 'output') == 'output'
Ejemplo n.º 26
0
from masonite.routes import Route

ROUTES = [
    Route.get("/", "UserController@index"),
    Route.get("/user/@id:int", "UserController@show"),
    Route.post("/user", "UserController@create"),
]
Ejemplo n.º 27
0
 def boot(self, request: Request, route: Route):
     self.app.bind('StatusCode', None)
     route.load_environ(self.app.make('Environ'))
     request.load_environ(self.app.make('Environ')).load_app(self.app)
Ejemplo n.º 28
0
    def boot(self, router: Route, request: Request, response: Response):
        # All routes joined
        for route in self.app.make('WebRoutes'):
            """Make a better match for trailing slashes
            Sometimes a user will end with a trailing slash. Because the user might
            create routes like `/url/route` and `/url/route/` and how the regex
            is compiled down, we may need to adjust for urls that end or dont
            end with a trailing slash.
            """

            matchurl = create_matchurl(router, route)
            """Houston, we've got a match
                Check to see if a route matches the corresponding router url. If a match
                is found, execute that route and break out of the loop. We only need
                one match. Routes are executed on a first come, first serve basis
            """

            if matchurl.match(router.url) and request.get_request_method(
            ) in route.method_type:
                route.load_request(request)
                """Check if subdomains are active and if the route matches on the subdomain
                    It needs to match to.
                """

                if request.has_subdomain():
                    # Check if the subdomain matches the correct routes domain
                    if not route.has_required_domain():
                        response.view('Route not found. Error 404')
                        continue
                """Get URL Parameters
                    This will create a dictionary of parameters given. This is sort of a short
                    but complex way to retrieve the url parameters.
                    This is the code used to convert /url/@firstname/@lastname
                    to {'firstmane': 'joseph', 'lastname': 'mancuso'}.
                """

                try:
                    parameter_dict = {}
                    for index, value in enumerate(
                            matchurl.match(router.url).groups()):
                        parameter_dict[router.generated_url_list()
                                       [index]] = value
                    request.set_params(parameter_dict)
                except AttributeError:
                    pass
                """Excute HTTP before middleware
                    Only those middleware that have a "before" method are ran.
                """

                for http_middleware in self.app.make('HttpMiddleware'):
                    located_middleware = self.app.resolve(http_middleware)
                    if hasattr(located_middleware, 'before'):
                        located_middleware.before()
                """Execute Route Before Middleware
                    This is middleware that contains a before method.
                """

                route.run_middleware('before')

                # Show a helper in the terminal of which route has been visited
                if application.DEBUG:
                    print(request.get_request_method() + ' Route: ' +
                          router.url)

                # If no routes have been found and no middleware has changed the status code
                if not request.get_status():
                    """Get the response from the route and set it on the 'Response' key.
                        This data is typically the output of the controller method depending
                        on the type of route.
                    """

                    response.view(route.get_response(), status=200)
                """Execute Route After Route Middleware
                    This is middleware that contains an after method.
                """

                route.run_middleware('after')
                """Excute HTTP after middleware
                    Only those middleware that have an "after" method are ran.
                    Check here if the middleware even has the required method.
                """

                for http_middleware in self.app.make('HttpMiddleware'):
                    located_middleware = self.app.resolve(http_middleware)

                    if hasattr(located_middleware, 'after'):
                        located_middleware.after()
                """Return breaks the loop because the incoming route is found and executed.
                    There is no need to continue searching the route list. First come
                    first serve around these parts of the woods.
                """
                return
        """No Response was found in the for loop so let's set an arbitrary response now.
        """
        response.view('Route not found. Error 404', status=404)
        # If the route exists but not the method is incorrect
        if request.is_status(404) and request.route_exists(request.path):
            response.view('Method not allowed', status=405)
Ejemplo n.º 29
0
 def boot(self, Environ, Request, Route):
     self.app.bind('Headers', [])
     self.app.bind('StatusCode', '404 Not Found')
     Route.load_environ(Environ)
     Request.load_environ(Environ).load_app(self.app)
Ejemplo n.º 30
0
"""Web Routes."""

from masonite.routes import Route

ROUTES = [
    Route.get('/', 'WelcomeController@show').name('welcome'),
]