diff --git a/web/test/crate_test.gleam b/web/test/crate_test.gleam index f2aec25..49394b5 100644 --- a/web/test/crate_test.gleam +++ b/web/test/crate_test.gleam @@ -125,8 +125,6 @@ pub fn set_display_back_to_grid_persists_without_a_shelf_reload_test() { let rows_view = Model(..logged_in(), display: Rows) let #(model, effect) = update(rows_view, SetDisplay(Grid)) assert model.display == Grid - // Switching display persists the choice (see prefs_test.gleam) but never - // reloads the shelf. assert effect != empty_effect() } diff --git a/web/test/prefs_test.gleam b/web/test/prefs_test.gleam index 2f826b1..6d38b44 100644 --- a/web/test/prefs_test.gleam +++ b/web/test/prefs_test.gleam @@ -1,9 +1,5 @@ -//// Interface-level tests for the generic prefs module's pure helpers (JSON -//// codecs, capping, dedup) and for the `update`/init integration points -//// that read/write them. The FFI boundary itself (`prefs.get`/`prefs.set`, -//// backed by localStorage) is a thin, side-effecting passthrough exercised -//// in the browser, not here - `update` never runs its own effects, so these -//// tests never touch real localStorage. +//// Tests for the prefs module's pure helpers and the `update` integration +//// that persists/loads them. import at_record_web/model.{ type EditProposal, EditProposal, Grid, InboxCard, InboxLoaded, Model, @@ -45,19 +41,21 @@ fn a_proposal(uri: String, cid: String) -> EditProposal { // --- display --- -pub fn display_to_string_round_trips_test() { - assert model.display_from_string(model.display_to_string(Grid)) == Grid - assert model.display_from_string(model.display_to_string(Rows)) == Rows +pub fn display_string_codec_test() { + [#(Grid, "grid"), #(Rows, "rows")] + |> list.each(fn(pair) { + let #(display, str) = pair + assert model.display_to_string(display) == str + assert model.display_from_string(str) == display + }) + ["", "garbage"] + |> list.each(fn(value) { + assert model.display_from_string(value) == Grid + }) } -pub fn display_from_string_falls_back_to_grid_for_unknown_values_test() { - assert model.display_from_string("") == Grid - assert model.display_from_string("garbage") == Grid -} - -pub fn set_display_persists_and_updates_the_model_test() { - let #(model_after, effect) = update(logged_in(), SetDisplay(Rows)) - assert model_after.display == Rows +pub fn set_display_fires_a_persist_effect_test() { + let #(_, effect) = update(logged_in(), SetDisplay(Rows)) assert effect != empty_effect() } @@ -71,8 +69,10 @@ pub fn ignored_proposals_round_trip_through_json_test() { } pub fn ignored_proposals_decode_falls_back_to_empty_on_garbage_test() { - assert prefs.decode_ignored_proposals("not json") == [] - assert prefs.decode_ignored_proposals("{}") == [] + ["not json", "{}"] + |> list.each(fn(raw) { + assert prefs.decode_ignored_proposals(raw) == [] + }) } pub fn add_ignored_proposal_dedupes_on_uri_test() {