diff --git a/src/helpers/updateAvailable.test.ts b/src/helpers/updateAvailable.test.ts index ee9a335..1fc60dd 100644 --- a/src/helpers/updateAvailable.test.ts +++ b/src/helpers/updateAvailable.test.ts @@ -17,7 +17,11 @@ Deno.test("#updateAvailableItem", async (t) => { await t.step( "it handles when current version is 1.0.0 and latest 1.0.0", async () => { - const cacheRelease = stub(_internals, "cacheRelease"); + const cacheRelease = stub( + _internals, + "cacheRelease", + () => Promise.resolve(), + ); try { const config = { @@ -37,7 +41,11 @@ Deno.test("#updateAvailableItem", async (t) => { await t.step( "it handles when current version is 1.0.0 and latest 0.9.0", async () => { - const cacheRelease = stub(_internals, "cacheRelease"); + const cacheRelease = stub( + _internals, + "cacheRelease", + () => Promise.resolve(), + ); try { const config = { @@ -57,7 +65,11 @@ Deno.test("#updateAvailableItem", async (t) => { await t.step( "it handles when current version is 1.0.0 and latest 2.0.0", async () => { - const cacheRelease = stub(_internals, "cacheRelease"); + const cacheRelease = stub( + _internals, + "cacheRelease", + () => Promise.resolve(), + ); const builder = { addItem: () => Promise.resolve() }; const buildStub = stub(builder, "addItem"); @@ -89,11 +101,11 @@ Deno.test("#updateAvailableItem", async (t) => { ); await t.step("it does check weekly minus 1 second ago", async () => { - const { promise, resolve } = Promise.withResolvers(); - const fetchAndStore = stub(_internals, "fetchAndStore", () => { - resolve(); - return Promise.resolve(); - }); + const fetchAndStore = stub( + _internals, + "fetchAndStore", + () => Promise.resolve(), + ); const builder = { addItem: () => Promise.resolve() }; const timeEpoch = 1666000000; // in seconds const time = new FakeTime(timeEpoch * 1000); @@ -108,8 +120,6 @@ Deno.test("#updateAvailableItem", async (t) => { latestVersionLastChecked: lastChecked, } as Config; const update = await updateAvailableItem(builder, config); - // Wait for fire-and-forget to complete - await promise; assertSpyCall(fetchAndStore, 0, { args: [config, timeEpoch], }); diff --git a/src/helpers/updateAvailable.ts b/src/helpers/updateAvailable.ts index f351b8c..a034f7b 100644 --- a/src/helpers/updateAvailable.ts +++ b/src/helpers/updateAvailable.ts @@ -6,14 +6,14 @@ import { fetchData, GhRelease } from "./github.ts"; const workflowRepo = "whomwah/alfred-github-workflow"; -export function updateAvailableItem( +export async function updateAvailableItem( builder: BuilderType, config: Config, ) { if (!config.checkForUpdates) return null; const now = Math.floor(new Date().getTime() / 1000); // Convert to seconds - _internals.cacheRelease(now, config); + await _internals.cacheRelease(now, config); try { const isValid = lessOrEqual( @@ -49,13 +49,12 @@ async function fetchAndStore(config: Config, now: number) { storeConfig(config.db, "latestVersionLastChecked", String(now)); } -function cacheRelease(now: number, config: Config) { +async function cacheRelease(now: number, config: Config) { const invalidateCacheDate = now - TWENTY_FOUR_HOURS * updateFrequency(); const lastChecked = config.latestVersionLastChecked; if (lastChecked < invalidateCacheDate) { - // Fire-and-forget: don't block the workflow on update check - _internals.fetchAndStore(config, now).catch(console.error); + await _internals.fetchAndStore(config, now).catch(console.error); } }