From 5fde146360014b726f4608e583803d376a0022fa Mon Sep 17 00:00:00 2001 From: Michael Jones Date: Mon, 24 Jun 2024 17:35:31 +0100 Subject: Add failing tests for optional field behaviour optional_field currently treats the key as being optional but incorrectly treats the value as being nullable. We want the key to be optional but the value to be normal. --- test/gleam/dynamic_test.gleam | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/gleam/dynamic_test.gleam b/test/gleam/dynamic_test.gleam index 4b6c797..42018e9 100644 --- a/test/gleam/dynamic_test.gleam +++ b/test/gleam/dynamic_test.gleam @@ -408,13 +408,30 @@ pub fn optional_field_test() { |> dict.insert("ok", None) |> dynamic.from |> dynamic.optional_field("ok", dynamic.int) - |> should.equal(Ok(None)) + |> should.equal( + Error([DecodeError(expected: "Int", found: "Atom", path: ["ok"])]), + ) dict.new() |> dict.insert("ok", Nil) |> dynamic.from |> dynamic.optional_field("ok", dynamic.int) - |> should.equal(Ok(None)) + |> should.equal( + Error([DecodeError(expected: "Int", found: "Nil", path: ["ok"])]), + ) + + // optional_field and optional should combine together to give nested Options + dict.new() + |> dict.insert("ok", Nil) + |> dynamic.from + |> dynamic.optional_field("ok", dynamic.optional(dynamic.int)) + |> should.equal(Ok(Some(None))) + + dict.new() + |> dict.insert("ok", 4) + |> dynamic.from + |> dynamic.optional_field("ok", dynamic.optional(dynamic.int)) + |> should.equal(Ok(Some(Some(4)))) dict.new() |> dynamic.from -- cgit v1.2.3