From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/xpcshell/test_AddonRepository_paging.js | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_paging.js (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_paging.js') diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_paging.js b/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_paging.js new file mode 100644 index 0000000000..0773917d84 --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_paging.js @@ -0,0 +1,91 @@ +// Test that AMO api results that are returned in muliple pages are +// properly handled. +add_task(async function test_paged_api() { + const MAX_ADDON = 3; + + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "2"); + + let testserver = createHttpServer(); + const PORT = testserver.identity.primaryPort; + + const EMPTY_RESPONSE = { + next: null, + results: [], + }; + + function name(n) { + return `Addon ${n}`; + } + function id(n) { + return `test${n}@tests.mozilla.org`; + } + function summary(n) { + return `Summary for addon ${n}`; + } + function description(n) { + return `Description for addon ${n}`; + } + + testserver.registerPathHandler("/empty", (request, response) => { + response.setHeader("content-type", "application/json"); + response.write(JSON.stringify(EMPTY_RESPONSE)); + }); + + testserver.registerPrefixHandler("/addons/", (request, response) => { + let [page] = /\d+/.exec(request.path); + page = page ? parseInt(page, 10) : 0; + page = Math.min(page, MAX_ADDON); + + let result = { + next: + page == MAX_ADDON + ? null + : `http://localhost:${PORT}/addons/${page + 1}`, + results: [ + { + name: name(page), + type: "extension", + guid: id(page), + summary: summary(page), + description: description(page), + }, + ], + }; + + response.setHeader("content-type", "application/json"); + response.write(JSON.stringify(result)); + }); + + Services.prefs.setCharPref( + PREF_GETADDONS_BYIDS, + `http://localhost:${PORT}/addons/0` + ); + + await promiseStartupManager(); + + for (let i = 0; i <= MAX_ADDON; i++) { + await promiseInstallWebExtension({ + manifest: { + browser_specific_settings: { gecko: { id: id(i) } }, + }, + }); + } + + await AddonManagerPrivate.backgroundUpdateCheck(); + + let ids = []; + for (let i = 0; i <= MAX_ADDON; i++) { + ids.push(id(i)); + } + let addons = await AddonRepository.getAddonsByIDs(ids); + + equal(addons.length, MAX_ADDON + 1); + for (let i = 0; i <= MAX_ADDON; i++) { + equal(addons[i].name, name(i)); + equal(addons[i].id, id(i)); + equal(addons[i].description, summary(i)); + equal(addons[i].fullDescription, description(i)); + } + + await promiseShutdownManager(); +}); -- cgit v1.2.3