Diff

spec/core_storagemanager_spec.lua @ 13847:cbd234461c41 13.0

mod_storage_internal: Fix queries with only start returning extra items Queries with start > last item would return one item, because there's some boundary condition in binary_search(). This is here fixed by always applying filters that omit items outside the requested range. See also 2374c7665d0b
author Kim Alvefur <zash@zash.se>
date Mon, 14 Apr 2025 15:10:29 +0200
parent 13781:97bbe60336bc
line wrap: on
line diff
--- a/spec/core_storagemanager_spec.lua	Fri Apr 11 09:45:04 2025 +0200
+++ b/spec/core_storagemanager_spec.lua	Mon Apr 14 15:10:29 2025 +0200
@@ -436,6 +436,44 @@
 						assert.equal(#test_data - 3, count);
 					end);
 
+					it("by time (start before first item)", function ()
+						-- luacheck: ignore 211/err
+						local data, err = archive:find("user", {
+							["start"] = test_time-5;
+						});
+						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-5, ("%d >= %d"):format(when, test_time-5));
+						end
+						assert.equal(#test_data, count);
+					end);
+
+					it("by time (start after last item)", function ()
+						-- luacheck: ignore 211/err
+						local data, err = archive:find("user", {
+							["start"] = test_time+5;
+						});
+						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+5, ("%d >= %d"):format(when, test_time+5));
+						end
+						assert.equal(0, count);
+					end);
+
 					it("by time (start+end)", function ()
 						-- luacheck: ignore 211/err
 						local data, err = archive:find("user", {