From d82522baaa12cd36ed227222a7ab487edb0a0777 Mon Sep 17 00:00:00 2001 From: Niclas Axelsson Date: Wed, 15 May 2024 11:07:26 +0200 Subject: [PATCH 1/2] Add tests for dynamic routes and bindings declared in multiple rows --- .../nova_request_app_main_controller.erl | 6 +++- src/nova_request_app_router.erl | 4 ++- test/nova_request_app_SUITE.erl | 28 +++++++++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/controllers/nova_request_app_main_controller.erl b/src/controllers/nova_request_app_main_controller.erl index ffe286c..abd2bc6 100644 --- a/src/controllers/nova_request_app_main_controller.erl +++ b/src/controllers/nova_request_app_main_controller.erl @@ -13,7 +13,8 @@ delete_user/1, fallback/1, return_view_with_ok/1, - return_view_with_view/1 + return_view_with_view/1, + return_bindings/1 ]). -fallback_controller(nova_request_app_fallback_controller). @@ -68,3 +69,6 @@ return_view_with_ok(_) -> return_view_with_view(_) -> {view, #{message => <<"Hello">>}}. + +return_bindings(#{method := Method, bindings := Bindings}) -> + {json, Bindings#{<<"method">> => Method}}. diff --git a/src/nova_request_app_router.erl b/src/nova_request_app_router.erl index ca2410f..c2e0fc4 100644 --- a/src/nova_request_app_router.erl +++ b/src/nova_request_app_router.erl @@ -17,7 +17,9 @@ routes(_) -> {"/internalerror", { nova_request_app_main_controller, internal_server_error}, #{methods => [get]}}, {"/fallback", { nova_request_app_main_controller, fallback}, #{methods => [get]}}, {"/viewok", { nova_request_app_main_controller, return_view_with_ok}, #{methods => [get]}}, - {"/viewview", { nova_request_app_main_controller, return_view_with_view}, #{methods => [get]}} + {"/viewview", { nova_request_app_main_controller, return_view_with_view}, #{methods => [get]}}, + {"/bindings/:binding", { nova_request_app_main_controller, return_bindings }, #{methods => [get]}}, + {"/bindings/:binding", { nova_request_app_main_controller, return_bindings }, #{methods => [delete]}} ] }, #{prefix => "/json_binding", diff --git a/test/nova_request_app_SUITE.erl b/test/nova_request_app_SUITE.erl index 027f048..5ae964d 100644 --- a/test/nova_request_app_SUITE.erl +++ b/test/nova_request_app_SUITE.erl @@ -124,7 +124,11 @@ all() -> trailingslash, fallback, view_with_ok, - view_with_view]. + view_with_view, + get_bindings, + delete_bindings, + add_dynamic_routes + ]. %%-------------------------------------------------------------------- %% @spec TestCase(Config0) -> %% ok | exit() | {skip,Reason} | {comment,Comment} | @@ -234,6 +238,26 @@ view_with_view(_) -> Path = [?BASEPATH, <<"viewview">>], #{status := {200, _}} = shttpc:get(Path, opts(json_get)). +get_bindings(_) -> + Path = [?BASEPATH, <<"bindings/test">>], + #{status := {200, _}, body := RespBody} = shttpc:get(Path, opts(json_get)), + #{<<"binding">> := <<"test">>, <<"method">> := <<"GET">>} = json:decode(RespBody, [maps]). + +delete_bindings(_) -> + Path = [?BASEPATH, <<"bindings/test">>], + #{status := {200, _}, body := RespBody} = shttpc:delete(Path, opts(json_get)), + #{<<"binding">> := <<"test">>, <<"method">> := <<"DELETE">>} = json:decode(RespBody, [maps]). + +add_dynamic_routes(_) -> + nova_router:add_routes(nova_request_app, #{routes => [{"/dynamic/:binding", { nova_request_app_main_controller, return_bindings }, #{methods => [get]}}]}), + nova_router:add_routes(nova_request_app, #{routes => [{"/dynamic/:binding", { nova_request_app_main_controller, return_bindings }, #{methods => [delete]}}]}), + Path = [?BASEPATH, <<"dynamic/test">>], + #{status := {200, _}, body := RespBody} = shttpc:delete(Path, opts(json_get)), + #{<<"binding">> := <<"test">>, <<"method">> := <<"DELETE">>} = json:decode(RespBody, [maps]), + #{status := {200, _}, body := RespBody0} = shttpc:get(Path, opts(json_get)), + #{<<"binding">> := <<"test">>, <<"method">> := <<"GET">>} = json:decode(RespBody0, [maps]). + + ws(_) -> Wohoo = <<"wohoo">>, websocket([<<"/ws/">>, Wohoo], <<>>), @@ -294,4 +318,4 @@ websocket(Path, _Token) -> end. encode(Json) -> - json:encode(Json, [maps, binary]). \ No newline at end of file + json:encode(Json, [maps, binary]). From f36cabd6089708ab7587a76a352731c6286c8c2a Mon Sep 17 00:00:00 2001 From: Niclas Axelsson Date: Wed, 15 May 2024 11:42:26 +0200 Subject: [PATCH 2/2] Update rebar.lock --- rebar.lock | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 rebar.lock diff --git a/rebar.lock b/rebar.lock deleted file mode 100644 index 2f8c411..0000000 --- a/rebar.lock +++ /dev/null @@ -1,39 +0,0 @@ -{"1.2.0", -[{<<"cowboy">>,{pkg,<<"cowboy">>,<<"2.10.0">>},1}, - {<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.12.1">>},2}, - {<<"erlydtl">>,{pkg,<<"erlydtl">>,<<"0.14.0">>},1}, - {<<"jhn_stdlib">>,{pkg,<<"jhn_stdlib">>,<<"3.6.2">>},1}, - {<<"nova">>, - {git,"https://github.com/novaframework/nova.git", - {ref,"c9bd1df086af8ba035c0fbfa7331ddb9a50123fb"}}, - 0}, - {<<"pmod_transform">>,{pkg,<<"pmod_transform">>,<<"1.1.0">>},1}, - {<<"quickrand">>,{pkg,<<"quickrand">>,<<"2.0.7">>},2}, - {<<"ranch">>,{pkg,<<"ranch">>,<<"1.8.0">>},2}, - {<<"routing_tree">>,{pkg,<<"routing_tree">>,<<"1.0.6">>},1}, - {<<"thoas">>,{pkg,<<"thoas">>,<<"1.2.0">>},1}, - {<<"uuid">>,{pkg,<<"uuid_erl">>,<<"2.0.7">>},1}]}. -[ -{pkg_hash,[ - {<<"cowboy">>, <<"FF9FFEFF91DAE4AE270DD975642997AFE2A1179D94B1887863E43F681A203E26">>}, - {<<"cowlib">>, <<"A9FA9A625F1D2025FE6B462CB865881329B5CAFF8F1854D1CBC9F9533F00E1E1">>}, - {<<"erlydtl">>, <<"964B2DC84F8C17ACFAA69C59BA129EF26AC45D2BA898C3C6AD9B5BDC8BA13CED">>}, - {<<"jhn_stdlib">>, <<"DBF19025FB1CCD7BEDCD19DC655A29618AA5943505DFE707C562E25F69C56BAA">>}, - {<<"pmod_transform">>, <<"A3A4FA607B947C90410BC459DCA27F6B60D25D1588D568280F7276AC8767E106">>}, - {<<"quickrand">>, <<"D2BD76676A446E6A058D678444B7FDA1387B813710D1AF6D6E29BB92186C8820">>}, - {<<"ranch">>, <<"8C7A100A139FD57F17327B6413E4167AC559FBC04CA7448E9BE9057311597A1D">>}, - {<<"routing_tree">>, <<"D565314CC3170DE52D534ECC77E7EB9146E8B6D6B3FDC17E01F24B8A360B4364">>}, - {<<"thoas">>, <<"73B0546BAFF5008E6ED209558FD7B0606B035D96F9F3DE24EF42879100E094D4">>}, - {<<"uuid">>, <<"B2078D2CC814F53AFA52D36C91E08962C7E7373585C623F4C0EA6DFB04B2AF94">>}]}, -{pkg_hash_ext,[ - {<<"cowboy">>, <<"3AFDCCB7183CC6F143CB14D3CF51FA00E53DB9EC80CDCD525482F5E99BC41D6B">>}, - {<<"cowlib">>, <<"163B73F6367A7341B33C794C4E88E7DBFE6498AC42DCD69EF44C5BC5507C8DB0">>}, - {<<"erlydtl">>, <<"D80EC044CD8F58809C19D29AC5605BE09E955040911B644505E31E9DD8143431">>}, - {<<"jhn_stdlib">>, <<"C6F6AE9BC636B0011ABA7B4DACAFF549C0B5CFB58229EBD09959B77391F6ED47">>}, - {<<"pmod_transform">>, <<"68C7FF7354C0D837681990D093D367FCC617C32570A1009B8E7ACFF6445499AA">>}, - {<<"quickrand">>, <<"B8ACBF89A224BC217C3070CA8BEBC6EB236DBE7F9767993B274084EA044D35F0">>}, - {<<"ranch">>, <<"49FBCFD3682FAB1F5D109351B61257676DA1A2FDBE295904176D5E521A2DDFE5">>}, - {<<"routing_tree">>, <<"49EADC682FCD8F1061272A77306E334716EAEA24E5F36AF118CB3A21A802BFAE">>}, - {<<"thoas">>, <<"540C8CB7D9257F2AD0A14145DC23560F91ACDCA995F0CCBA779EB33AF5D859D1">>}, - {<<"uuid">>, <<"4E4C5CA3461DC47C5E157ED42AA3981A053B7A186792AF972A27B14A9489324E">>}]} -].