diff --git a/shopfloor_base/models/shopfloor_app.py b/shopfloor_base/models/shopfloor_app.py index 65bc40713f7..db4a52b301c 100644 --- a/shopfloor_base/models/shopfloor_app.py +++ b/shopfloor_base/models/shopfloor_app.py @@ -163,7 +163,8 @@ def _prepare_endpoint_rules(self, options=None): def _registered_endpoint_rule_keys(self): # `endpoint.route.sync.mixin` api - return [x[0] for x in self._registered_routes()] + # TODO: add tests + return [x.key for x in self._registered_routes()] def _register_hook(self): super()._register_hook() @@ -252,6 +253,12 @@ def _generate_endpoints_route(self, service, vals): method_name = vals.pop("_method_name") route_handler = self.env["endpoint.route.handler.tool"] new_route = route_handler.new(vals) + # SF endpoints must use the ``restapi`` dispatcher provided by base_rest. + # NOTE: this ``route_type`` value + # is not declared on `endpoint.route.handler.route_type` field selection, + # but is not relevant in this case + # because the value is set only on a in memory recordset. + new_route.route_type = "restapi" new_route._refresh_endpoint_data() options = { "handler": { diff --git a/shopfloor_base/tests/test_shopfloor_app.py b/shopfloor_base/tests/test_shopfloor_app.py index 690e76b76dd..1ca453c201e 100644 --- a/shopfloor_base/tests/test_shopfloor_app.py +++ b/shopfloor_base/tests/test_shopfloor_app.py @@ -55,6 +55,7 @@ def _test_registered_routes(self, rec): routes = rec._registered_routes() _check = {} for rule in routes: + self.assertEqual(rule.routing["type"], "restapi") self.assertEqual(rule.route_group, rec._route_group()) self.assertTrue(rule.endpoint_hash) service, endpoint = rule.route.split("/")[-2:] @@ -65,7 +66,12 @@ def _test_registered_routes(self, rec): ), "method_name": "_process_endpoint", } - self.assertEqual(rule.handler_options, expected_handler_opts) + for k, v in expected_handler_opts.items(): + self.assertEqual( + rule.handler_options[k], + v, + f"{k} differs: {rule.handler_options[k]} != {v}", + ) _check[rule.route] = set(rule.routing["methods"]) expected = { # TODO: review methods @@ -145,7 +151,10 @@ def test_make_app_info(self): ) def test_make_app_manifest(self): - param = "http://localhost:8069" + self.env["ir.config_parameter"].sudo().set_param( + "web.base.url", "http://foo.com" + ) + param = "http://foo.com" manifest = self.shopfloor_app._make_app_manifest() expected = { "name": self.shopfloor_app.name,