# HG changeset patch # User Kim Alvefur # Date 1744638665 -7200 # Node ID 45c508a1286557b73211f947eba010ea37925330 # Parent 14a4c0d774f2022e5ffcd99c9877532f3c2ffc99# Parent cbd234461c41766dab920af0022937412f14f7ac Merge 13.0->trunk diff -r 14a4c0d774f2 -r 45c508a12865 plugins/mod_storage_internal.lua --- a/plugins/mod_storage_internal.lua Fri Apr 11 09:47:23 2025 +0200 +++ b/plugins/mod_storage_internal.lua Mon Apr 14 15:51:05 2025 +0200 @@ -205,12 +205,11 @@ return query.start - when; end); i = wi - 1; - else - iter = it.filter(function(item) - local when = item.when or datetime.parse(item.attr.stamp); - return when >= query.start; - end, iter); end + iter = it.filter(function(item) + local when = item.when or datetime.parse(item.attr.stamp); + return when >= query.start; + end, iter); end if query["end"] then if query.reverse then @@ -221,12 +220,11 @@ if wi then i = wi + 1; end - else - iter = it.filter(function(item) - local when = item.when or datetime.parse(item.attr.stamp); - return when <= query["end"]; - end, iter); end + iter = it.filter(function(item) + local when = item.when or datetime.parse(item.attr.stamp); + return when <= query["end"]; + end, iter); end if query.after then local found = false; diff -r 14a4c0d774f2 -r 45c508a12865 spec/core_storagemanager_spec.lua --- a/spec/core_storagemanager_spec.lua Fri Apr 11 09:47:23 2025 +0200 +++ b/spec/core_storagemanager_spec.lua Mon Apr 14 15:51:05 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", {