Diff

spec/core_storagemanager_spec.lua @ 9470:0d491bc98b9f

storagemanager tests: Add additional archive query tests
author Matthew Wild <mwild1@gmail.com>
date Thu, 11 Oct 2018 13:29:14 +0100
parent 9467:2098794ac866
child 9471:6798fcd25e9c
line wrap: on
line diff
--- a/spec/core_storagemanager_spec.lua	Thu Oct 11 10:39:11 2018 +0100
+++ b/spec/core_storagemanager_spec.lua	Thu Oct 11 13:29:14 2018 +0100
@@ -98,28 +98,113 @@
 					:tag("foo"):up()
 					:tag("foo"):up();
 				local test_time = 1539204123;
+
+				local test_data = {
+					{ nil, test_stanza, test_time, "contact@example.com" };
+					{ nil, test_stanza, test_time+1, "contact2@example.com" };
+					{ nil, test_stanza, test_time+2, "contact2@example.com" };
+					{ nil, test_stanza, test_time-1, "contact2@example.com" };
+				};
+
 				it("can be added to", function ()
-					local ok = archive:append("user", nil, test_stanza, 1539204123, "contact@example.com");
-					assert.truthy(ok);
+					for _, data_item in ipairs(test_data) do
+						local ok = archive:append("user", unpack(data_item, 1, 4));
+						assert.truthy(ok);
+					end
 				end);
 
-				it("can be queried", function ()
-					local data, err = archive:find("user", {
-						with = "contact@example.com";
-					});
-					assert.truthy(data);
-					local count = 0;
-					for id, item, when in data do
-						count = count + 1;
-						assert.truthy(id);
-						assert(st.is_stanza(item));
-						assert.equal("test", item.name);
-						assert.equal("urn:example:foo", item.attr.xmlns);
-						assert.equal(2, #item.tags);
-						assert.equal(test_time, when);
-					end
-					assert.equal(1, count);
+				describe("can be queried", function ()
+					it("for all items", function ()
+						local data, err = archive:find("user", {});
+						assert.truthy(data);
+						local count = 0;
+						for id, item, when in data do
+							count = count + 1;
+							assert.truthy(id);
+							assert(st.is_stanza(item));
+							assert.equal("test", item.name);
+							assert.equal("urn:example:foo", item.attr.xmlns);
+							assert.equal(2, #item.tags);
+							assert.equal(test_data[count][3], when);
+						end
+						assert.equal(#test_data, count);
+					end);
+
+					it("by JID", function ()
+						local data, err = archive:find("user", {
+							with = "contact@example.com";
+						});
+						assert.truthy(data);
+						local count = 0;
+						for id, item, when in data do
+							count = count + 1;
+							assert.truthy(id);
+							assert(st.is_stanza(item));
+							assert.equal("test", item.name);
+							assert.equal("urn:example:foo", item.attr.xmlns);
+							assert.equal(2, #item.tags);
+							assert.equal(test_time, when);
+						end
+						assert.equal(1, count);
+					end);
+
+					it("by time (end)", function ()
+						local data, err = archive:find("user", {
+							["end"] = test_time;
+						});
+						assert.truthy(data);
+						local count = 0;
+						for id, item, when in data do
+							count = count + 1;
+							assert.truthy(id);
+							assert(st.is_stanza(item));
+							assert.equal("test", item.name);
+							assert.equal("urn:example:foo", item.attr.xmlns);
+							assert.equal(2, #item.tags);
+							assert(test_time >= when);
+						end
+						assert.equal(2, count);
+					end);
+
+					it("by time (start)", function ()
+						local data, err = archive:find("user", {
+							["start"] = test_time;
+						});
+						assert.truthy(data);
+						local count = 0;
+						for id, item, when in data do
+							count = count + 1;
+							assert.truthy(id);
+							assert(st.is_stanza(item));
+							assert.equal("test", item.name);
+							assert.equal("urn:example:foo", item.attr.xmlns);
+							assert.equal(2, #item.tags);
+							assert(test_time <= when);
+						end
+						assert.equal(#test_data -1, count);
+					end);
+
+					it("by time (start+end)", function ()
+						local data, err = archive:find("user", {
+							["start"] = test_time;
+							["end"] = test_time+1;
+						});
+						assert.truthy(data);
+						local count = 0;
+						for id, item, when in data do
+							count = count + 1;
+							assert.truthy(id);
+							assert(st.is_stanza(item));
+							assert.equal("test", item.name);
+							assert.equal("urn:example:foo", item.attr.xmlns);
+							assert.equal(2, #item.tags);
+							assert(when >= test_time, ("%d >= %d"):format(when, test_time));
+							assert(when <= test_time+1, ("%d <= %d"):format(when, test_time+1));
+						end
+						assert.equal(2, count);
+					end);
 				end);
+
 				it("can be purged", function ()
 					local ok, err = archive:delete("user");
 					assert.truthy(ok);