mod_pep: Wipe pubsub service on user deletion
Data is already wiped from storage, but this ensures everything is
properly unsubscribed, possibly with notifications etc.
Clears recipient cache as well, since it is no longer relevant.
local serialization = require "util.serialization";
describe("util.serialization", function ()
describe("serialize", function ()
it("makes a string", function ()
assert.is_string(serialization.serialize({}));
assert.is_string(serialization.serialize(nil));
assert.is_string(serialization.serialize(1));
assert.is_string(serialization.serialize(true));
end);
it("rejects function by default", function ()
assert.has_error(function ()
serialization.serialize(function () end)
end);
end);
it("makes a string in debug mode", function ()
assert.is_string(serialization.serialize(function () end, "debug"));
end);
it("rejects cycles", function ()
assert.has_error(function ()
local t = {}
t[t] = { t };
serialization.serialize(t)
end);
-- also with multirefs allowed
assert.has_error(function ()
local t = {}
t[t] = { t };
serialization.serialize(t, { multirefs = true })
end);
end);
it("rejects multiple references to same table", function ()
assert.has_error(function ()
local t1 = {};
local t2 = { t1, t1 };
serialization.serialize(t2, { multirefs = false });
end);
end);
it("optionally allows multiple references to same table", function ()
assert.has_error(function ()
local t1 = {};
local t2 = { t1, t1 };
serialization.serialize(t2, { multirefs = true });
end);
end);
it("roundtrips", function ()
local function test(data)
local serialized = serialization.serialize(data);
assert.is_string(serialized);
local deserialized, err = serialization.deserialize(serialized);
assert.same(data, deserialized, err);
end
test({});
test({hello="world"});
test("foobar")
test("\0\1\2\3");
test("nödåtgärd");
test({1,2,3,4});
test({foo={[100]={{"bar"},{baz=1}}}});
test({["goto"] = {["function"]={["do"]="keywords"}}});
end);
it("can serialize with metatables", function ()
local s = serialization.new({ freeze = true });
local t = setmetatable({ a = "hi" }, { __freeze = function (t) return { t.a } end });
local rt = serialization.deserialize(s(t));
assert.same({"hi"}, rt);
end);
end);
end);