aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Jones <m.pricejones@gmail.com>2024-06-24 17:35:31 +0100
committerLouis Pilfold <louis@lpil.uk>2024-07-17 14:17:16 +0100
commit5fde146360014b726f4608e583803d376a0022fa (patch)
treede17c4c01ed36570ae29ba014b0455a2a225f737
parent232d49aadf65da91e281c3235d4bd1af3c9425a6 (diff)
downloadgleam_stdlib-5fde146360014b726f4608e583803d376a0022fa.tar.gz
gleam_stdlib-5fde146360014b726f4608e583803d376a0022fa.zip
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.
-rw-r--r--test/gleam/dynamic_test.gleam21
1 files changed, 19 insertions, 2 deletions
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