diff --git a/exercises/practice/rest-api/.meta/template.j2 b/exercises/practice/rest-api/.meta/template.j2 index 01d25286..a445f181 100644 --- a/exercises/practice/rest-api/.meta/template.j2 +++ b/exercises/practice/rest-api/.meta/template.j2 @@ -47,20 +47,21 @@ expect { {% endfor %} {% endfor %} +is_equivalent_to : Str, Str -> Try(Bool, _) is_equivalent_to = |result_json, expected_json| { - if expected_json.contains("\"users\"") { - expected : RestApi.Database - expected = Json.parse(expected_json)? - result : RestApi.Database - result = Json.parse(result_json)? - Ok(result == expected) - } else { - expected : RestApi.User - expected = Json.parse(expected_json)? - result : RestApi.User - result = Json.parse(result_json)? - Ok(result == expected) - } + if expected_json.contains("\"users\"") { + expected : RestApi.Database + expected = Json.parse(expected_json)? + result : RestApi.Database + result = Json.parse(result_json)? + Ok(result == expected) + } else { + expected : RestApi.User + expected = Json.parse(expected_json)? + result : RestApi.User + result = Json.parse(result_json)? + Ok(result == expected) + } } {{ macros.footer() }} diff --git a/exercises/practice/rest-api/rest-api-test.roc b/exercises/practice/rest-api/rest-api-test.roc index 4c53e32d..7053fdd2 100644 --- a/exercises/practice/rest-api/rest-api-test.roc +++ b/exercises/practice/rest-api/rest-api-test.roc @@ -1,6 +1,6 @@ # These tests are auto-generated with test data from: # https://github.com/exercism/problem-specifications/tree/main/exercises/rest-api/canonical-data.json -# File last updated on 2026-08-01 +# File last updated on 2026-08-15 import RestApi exposing [get, post] @@ -12,18 +12,18 @@ import RestApi exposing [get, post] expect { database = { users: [] } result_json = database - -> get({ url: "/users", payload: "" })? + |> get({ url: "/users", payload: "" })? expected_json = "{\"users\": []}" - result_json -> is_equivalent_to(expected_json)? + result_json |> is_equivalent_to(expected_json)? } # add user expect { database = { users: [] } result_json = database - -> post({ url: "/add", payload: "{\"user\": \"Adam\"}" })? + |> post({ url: "/add", payload: "{\"user\": \"Adam\"}" })? expected_json = "{\"balance\": 0.0, \"name\": \"Adam\", \"owed_by\": {}, \"owes\": {}}" - result_json -> is_equivalent_to(expected_json)? + result_json |> is_equivalent_to(expected_json)? } # get single user @@ -45,9 +45,9 @@ expect { ], } result_json = database - -> get({ url: "/users", payload: "{\"users\": [\"Bob\"]}" })? + |> get({ url: "/users", payload: "{\"users\": [\"Bob\"]}" })? expected_json = "{\"users\": [{\"balance\": 0.0, \"name\": \"Bob\", \"owed_by\": {}, \"owes\": {}}]}" - result_json -> is_equivalent_to(expected_json)? + result_json |> is_equivalent_to(expected_json)? } ## @@ -73,9 +73,9 @@ expect { ], } result_json = database - -> post({ url: "/iou", payload: "{\"amount\": 3.0, \"borrower\": \"Bob\", \"lender\": \"Adam\"}" })? + |> post({ url: "/iou", payload: "{\"amount\": 3.0, \"borrower\": \"Bob\", \"lender\": \"Adam\"}" })? expected_json = "{\"users\": [{\"balance\": 3.0, \"name\": \"Adam\", \"owed_by\": {\"Bob\": 3.0}, \"owes\": {}}, {\"balance\": -3.0, \"name\": \"Bob\", \"owed_by\": {}, \"owes\": {\"Adam\": 3.0}}]}" - result_json -> is_equivalent_to(expected_json)? + result_json |> is_equivalent_to(expected_json)? } # borrower has negative balance @@ -107,9 +107,9 @@ expect { ], } result_json = database - -> post({ url: "/iou", payload: "{\"amount\": 3.0, \"borrower\": \"Bob\", \"lender\": \"Adam\"}" })? + |> post({ url: "/iou", payload: "{\"amount\": 3.0, \"borrower\": \"Bob\", \"lender\": \"Adam\"}" })? expected_json = "{\"users\": [{\"balance\": 3.0, \"name\": \"Adam\", \"owed_by\": {\"Bob\": 3.0}, \"owes\": {}}, {\"balance\": -6.0, \"name\": \"Bob\", \"owed_by\": {}, \"owes\": {\"Adam\": 3.0, \"Chuck\": 3.0}}]}" - result_json -> is_equivalent_to(expected_json)? + result_json |> is_equivalent_to(expected_json)? } # lender has negative balance @@ -141,9 +141,9 @@ expect { ], } result_json = database - -> post({ url: "/iou", payload: "{\"amount\": 3.0, \"borrower\": \"Adam\", \"lender\": \"Bob\"}" })? + |> post({ url: "/iou", payload: "{\"amount\": 3.0, \"borrower\": \"Adam\", \"lender\": \"Bob\"}" })? expected_json = "{\"users\": [{\"balance\": -3.0, \"name\": \"Adam\", \"owed_by\": {}, \"owes\": {\"Bob\": 3.0}}, {\"balance\": 0.0, \"name\": \"Bob\", \"owed_by\": {\"Adam\": 3.0}, \"owes\": {\"Chuck\": 3.0}}]}" - result_json -> is_equivalent_to(expected_json)? + result_json |> is_equivalent_to(expected_json)? } # lender owes borrower @@ -169,9 +169,9 @@ expect { ], } result_json = database - -> post({ url: "/iou", payload: "{\"amount\": 2.0, \"borrower\": \"Bob\", \"lender\": \"Adam\"}" })? + |> post({ url: "/iou", payload: "{\"amount\": 2.0, \"borrower\": \"Bob\", \"lender\": \"Adam\"}" })? expected_json = "{\"users\": [{\"balance\": -1.0, \"name\": \"Adam\", \"owed_by\": {}, \"owes\": {\"Bob\": 1.0}}, {\"balance\": 1.0, \"name\": \"Bob\", \"owed_by\": {\"Adam\": 1.0}, \"owes\": {}}]}" - result_json -> is_equivalent_to(expected_json)? + result_json |> is_equivalent_to(expected_json)? } # lender owes borrower less than new loan @@ -197,9 +197,9 @@ expect { ], } result_json = database - -> post({ url: "/iou", payload: "{\"amount\": 4.0, \"borrower\": \"Bob\", \"lender\": \"Adam\"}" })? + |> post({ url: "/iou", payload: "{\"amount\": 4.0, \"borrower\": \"Bob\", \"lender\": \"Adam\"}" })? expected_json = "{\"users\": [{\"balance\": 1.0, \"name\": \"Adam\", \"owed_by\": {\"Bob\": 1.0}, \"owes\": {}}, {\"balance\": -1.0, \"name\": \"Bob\", \"owed_by\": {}, \"owes\": {\"Adam\": 1.0}}]}" - result_json -> is_equivalent_to(expected_json)? + result_json |> is_equivalent_to(expected_json)? } # lender owes borrower same as new loan @@ -225,11 +225,12 @@ expect { ], } result_json = database - -> post({ url: "/iou", payload: "{\"amount\": 3.0, \"borrower\": \"Bob\", \"lender\": \"Adam\"}" })? + |> post({ url: "/iou", payload: "{\"amount\": 3.0, \"borrower\": \"Bob\", \"lender\": \"Adam\"}" })? expected_json = "{\"users\": [{\"balance\": 0.0, \"name\": \"Adam\", \"owed_by\": {}, \"owes\": {}}, {\"balance\": 0.0, \"name\": \"Bob\", \"owed_by\": {}, \"owes\": {}}]}" - result_json -> is_equivalent_to(expected_json)? + result_json |> is_equivalent_to(expected_json)? } +is_equivalent_to : Str, Str -> Try(Bool, _) is_equivalent_to = |result_json, expected_json| { if expected_json.contains("\"users\"") { expected : RestApi.Database