diff options
-rw-r--r-- | spec/util_stanza_spec.lua | 17 | ||||
-rw-r--r-- | util/stanza.lua | 13 |
2 files changed, 18 insertions, 12 deletions
diff --git a/spec/util_stanza_spec.lua b/spec/util_stanza_spec.lua index 4263923d..dcbd6cf8 100644 --- a/spec/util_stanza_spec.lua +++ b/spec/util_stanza_spec.lua @@ -84,9 +84,20 @@ describe("util.stanza", function() end); describe("#iq()", function() - it("should work", function() - local i = st.iq(); - assert.are.equal(i.name, "iq"); + it("should create an iq stanza", function() + local i = st.iq({ id = "foo" }); + assert.are.equal("iq", i.name); + assert.are.equal("foo", i.attr.id); + end); + + it("should reject stanzas with no id", function () + assert.has.error_match(function () + local i = st.iq(); + end, "id attribute"); + + assert.has.error_match(function () + local i = st.iq({ foo = "bar" }); + end, "id attribute"); end); end); diff --git a/util/stanza.lua b/util/stanza.lua index f08baef7..79522ed5 100644 --- a/util/stanza.lua +++ b/util/stanza.lua @@ -347,12 +347,6 @@ function stanza_mt.get_error(stanza) return error_type, condition or "undefined-condition", text; end -local id = 0; -local function new_id() - id = id + 1; - return "lx"..id; -end - local function preserialize(stanza) local s = { name = stanza.name, attr = stanza.attr }; for _, child in ipairs(stanza) do @@ -430,8 +424,10 @@ local function message(attr, body) end end local function iq(attr) - if attr and not attr.id then attr.id = new_id(); end - return new_stanza("iq", attr or { id = new_id() }); + if not (attr and attr.id) then + error("iq stanzas require an id attribute"); + end + return new_stanza("iq", attr); end local function reply(orig) @@ -502,7 +498,6 @@ return { stanza_mt = stanza_mt; stanza = new_stanza; is_stanza = is_stanza; - new_id = new_id; preserialize = preserialize; deserialize = deserialize; clone = clone; |