Software /
code /
prosody
Comparison
spec/util_pubsub_spec.lua @ 11120:b2331f3dfeea
Merge 0.11->trunk
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 30 Sep 2020 09:50:33 +0100 |
parent | 10573:3b8431eed785 |
child | 11721:7a77f0c05382 |
comparison
equal
deleted
inserted
replaced
11119:68df52bf08d5 | 11120:b2331f3dfeea |
---|---|
99 | 99 |
100 it("automatically creates node with requested config", function () | 100 it("automatically creates node with requested config", function () |
101 assert(service:publish("node", true, "1", "item 1", { myoption = true })); | 101 assert(service:publish("node", true, "1", "item 1", { myoption = true })); |
102 | 102 |
103 local ok, config = assert(service:get_node_config("node", true)); | 103 local ok, config = assert(service:get_node_config("node", true)); |
104 assert.truthy(ok); | |
104 assert.equals(true, config.myoption); | 105 assert.equals(true, config.myoption); |
105 end); | 106 end); |
106 | 107 |
107 it("fails to publish to a node with differing config", function () | 108 it("fails to publish to a node with differing config", function () |
108 local ok, err = service:publish("node", true, "1", "item 2", { myoption = false }); | 109 local ok, err = service:publish("node", true, "1", "item 2", { myoption = false }); |
109 assert.falsy(ok); | 110 assert.falsy(ok); |
110 assert.equals("precondition-not-met", err); | 111 assert.equals("precondition-not-met", err.pubsub_condition); |
111 end); | 112 end); |
112 | 113 |
113 it("allows to publish to a node with differing config when only defaults are suggested", function () | 114 it("allows to publish to a node with differing config when only defaults are suggested", function () |
114 assert(service:publish("node", true, "1", "item 2", { _defaults_only = true, myoption = false })); | 115 assert(service:publish("node", true, "1", "item 2", { _defaults_only = true, myoption = false })); |
115 end); | 116 end); |
227 -- Do not supply any config, 'open' should be default | 228 -- Do not supply any config, 'open' should be default |
228 service:create("test", true); | 229 service:create("test", true); |
229 end); | 230 end); |
230 it("should be the default", function () | 231 it("should be the default", function () |
231 local ok, config = service:get_node_config("test", true); | 232 local ok, config = service:get_node_config("test", true); |
233 assert.truthy(ok); | |
232 assert.equal("open", config.access_model); | 234 assert.equal("open", config.access_model); |
233 end); | 235 end); |
234 it("should allow anyone to subscribe", function () | 236 it("should allow anyone to subscribe", function () |
235 local ok = service:add_subscription("test", "stranger", "stranger"); | 237 local ok = service:add_subscription("test", "stranger", "stranger"); |
236 assert.is_true(ok); | 238 assert.is_true(ok); |
248 service = assert(pubsub.new()); | 250 service = assert(pubsub.new()); |
249 assert.is_true(service:create("test", true, { access_model = "whitelist" })); | 251 assert.is_true(service:create("test", true, { access_model = "whitelist" })); |
250 end); | 252 end); |
251 it("should be present in the configuration", function () | 253 it("should be present in the configuration", function () |
252 local ok, config = service:get_node_config("test", true); | 254 local ok, config = service:get_node_config("test", true); |
255 assert.truthy(ok); | |
253 assert.equal("whitelist", config.access_model); | 256 assert.equal("whitelist", config.access_model); |
254 end); | 257 end); |
255 it("should not allow anyone to subscribe", function () | 258 it("should not allow anyone to subscribe", function () |
256 local ok, err = service:add_subscription("test", "stranger", "stranger"); | 259 local ok, err = service:add_subscription("test", "stranger", "stranger"); |
257 assert.is_false(ok); | 260 assert.is_false(ok); |
292 -- Do not supply any config, 'publishers' should be default | 295 -- Do not supply any config, 'publishers' should be default |
293 service:create("test", true); | 296 service:create("test", true); |
294 end); | 297 end); |
295 it("should be the default", function () | 298 it("should be the default", function () |
296 local ok, config = service:get_node_config("test", true); | 299 local ok, config = service:get_node_config("test", true); |
300 assert.truthy(ok); | |
297 assert.equal("publishers", config.publish_model); | 301 assert.equal("publishers", config.publish_model); |
298 end); | 302 end); |
299 it("should not allow anyone to publish", function () | 303 it("should not allow anyone to publish", function () |
300 assert.is_true(service:add_subscription("test", "stranger", "stranger")); | 304 assert.is_true(service:add_subscription("test", "stranger", "stranger")); |
301 local ok, err = service:publish("test", "stranger", "item1", "foo"); | 305 local ok, err = service:publish("test", "stranger", "item1", "foo"); |
302 assert.is_falsy(ok); | 306 assert.is_falsy(ok); |
303 assert.equals("forbidden", err); | 307 assert.equals("forbidden", err); |
304 end); | 308 end); |
305 it("should allow publishers to publish", function () | 309 it("should allow publishers to publish", function () |
306 assert(service:set_affiliation("test", true, "mypublisher", "publisher")); | 310 assert(service:set_affiliation("test", true, "mypublisher", "publisher")); |
311 -- luacheck: ignore 211/err | |
307 local ok, err = service:publish("test", "mypublisher", "item1", "foo"); | 312 local ok, err = service:publish("test", "mypublisher", "item1", "foo"); |
308 assert.is_true(ok); | 313 assert.is_true(ok); |
309 end); | 314 end); |
310 it("should allow owners to publish", function () | 315 it("should allow owners to publish", function () |
311 assert(service:set_affiliation("test", true, "myowner", "owner")); | 316 assert(service:set_affiliation("test", true, "myowner", "owner")); |
340 local ok = service:publish("test", "stranger", "item1", "foo"); | 345 local ok = service:publish("test", "stranger", "item1", "foo"); |
341 assert.is_true(ok); | 346 assert.is_true(ok); |
342 end); | 347 end); |
343 it("should allow publishers to publish without a subscription", function () | 348 it("should allow publishers to publish without a subscription", function () |
344 assert(service:set_affiliation("test", true, "mypublisher", "publisher")); | 349 assert(service:set_affiliation("test", true, "mypublisher", "publisher")); |
350 -- luacheck: ignore 211/err | |
345 local ok, err = service:publish("test", "mypublisher", "item1", "foo"); | 351 local ok, err = service:publish("test", "mypublisher", "item1", "foo"); |
346 assert.is_true(ok); | 352 assert.is_true(ok); |
347 end); | 353 end); |
348 it("should allow owners to publish without a subscription", function () | 354 it("should allow owners to publish without a subscription", function () |
349 assert(service:set_affiliation("test", true, "myowner", "owner")); | 355 assert(service:set_affiliation("test", true, "myowner", "owner")); |
475 end); | 481 end); |
476 | 482 |
477 | 483 |
478 end); | 484 end); |
479 | 485 |
486 describe("subscriber filter", function () | |
487 it("works", function () | |
488 local filter = spy.new(function (subs) -- luacheck: ignore 212/subs | |
489 return {["modified"] = true}; | |
490 end); | |
491 local broadcaster = spy.new(function (notif_type, node_name, subscribers, item) -- luacheck: ignore 212 | |
492 end); | |
493 local service = pubsub.new({ | |
494 subscriber_filter = filter; | |
495 broadcaster = broadcaster; | |
496 }); | |
497 | |
498 local ok = service:create("node", true); | |
499 assert.truthy(ok); | |
500 | |
501 local ok = service:add_subscription("node", true, "someone"); | |
502 assert.truthy(ok); | |
503 | |
504 local ok = service:publish("node", true, "1", "item"); | |
505 assert.truthy(ok); | |
506 -- TODO how to match table arguments? | |
507 assert.spy(filter).was_called(); | |
508 assert.spy(broadcaster).was_called(); | |
509 end); | |
510 end); | |
511 | |
480 end); | 512 end); |