diff options
author | Kim Alvefur <zash@zash.se> | 2021-10-26 15:15:57 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2021-10-26 15:15:57 +0200 |
commit | fc677f515fd0fe5c45d54e51f5646f37e204929a (patch) | |
tree | c02eafc57e427c68964ea99d0ac24736a0c490a7 | |
parent | 533ab7a4ce6c55acd164cdcea6d8a6abe3db4bca (diff) | |
download | prosody-fc677f515fd0fe5c45d54e51f5646f37e204929a.tar.gz prosody-fc677f515fd0fe5c45d54e51f5646f37e204929a.zip |
util.dataforms: Coerce number values for boolean fields
Makes more sense than coercing to a string, which would always be
truthy.
-rw-r--r-- | spec/util_dataforms_spec.lua | 10 | ||||
-rw-r--r-- | util/dataforms.lua | 7 |
2 files changed, 15 insertions, 2 deletions
diff --git a/spec/util_dataforms_spec.lua b/spec/util_dataforms_spec.lua index f796b30d..a76a9565 100644 --- a/spec/util_dataforms_spec.lua +++ b/spec/util_dataforms_spec.lua @@ -417,6 +417,16 @@ describe("util.dataforms", function () end); end); + describe("number handling", function() + it("handles numbers as booleans", function() + local f = dataforms.new { { name = "boolean"; type = "boolean" } }; + local x = f:form({ boolean = 0 }); + assert.equal("0", x:find "field/value#"); + x = f:form({ boolean = 1 }); + assert.equal("1", x:find "field/value#"); + end); + end) + describe("datatype validation", function () local f = dataforms.new { { diff --git a/util/dataforms.lua b/util/dataforms.lua index 79559b22..7bb3cff9 100644 --- a/util/dataforms.lua +++ b/util/dataforms.lua @@ -103,8 +103,11 @@ function form_t.form(layout, data, formtype) if value ~= nil then if type(value) == "number" then - -- TODO validate that this is ok somehow, eg check field.datatype - value = ("%g"):format(value); + if field_type == "boolean" then + value = value ~= 0; + else + value = ("%g"):format(value); + end end -- Add value, depending on type if field_type == "hidden" then |