diff --git a/src/core/Conference.ts b/src/core/Conference.ts index d2f8199..9c0601d 100644 --- a/src/core/Conference.ts +++ b/src/core/Conference.ts @@ -33,10 +33,10 @@ export default class Conference { * Expire the conference */ async expire() { - await this.updateStatus("expired"); await Promise.all( (await this.repositories()).map(async (conf) => await conf.expire()) ); + await this.updateStatus("expired"); } /** diff --git a/src/server/routes/conference.ts b/src/server/routes/conference.ts index 716b50f..21c7f78 100644 --- a/src/server/routes/conference.ts +++ b/src/server/routes/conference.ts @@ -56,7 +56,7 @@ router.get("/", async (req: express.Request, res: express.Response) => { ).map(async (data) => { const conf = new Conference(data); if (data.endDate < new Date() && data.status == "ready") { - await conf.updateStatus("expired"); + await conf.expire(); } return conf; }) diff --git a/test/production-regressions.test.js b/test/production-regressions.test.js index e23f5c3..f7d9800 100644 --- a/test/production-regressions.test.js +++ b/test/production-regressions.test.js @@ -232,6 +232,15 @@ describe("production regressions", function () { expect(res.headers["Content-Security-Policy"]).to.include("sandbox"); expect(res.headers["Content-Security-Policy"]).not.to.include("allow-same-origin"); }); + it("keeps a conference eligible for retry when repository expiration fails", async function () { + const Conference = require("../src/core/Conference").default; + const model = { status: "ready", save: async () => {} }; + const conference = new Conference(model); + conference.repositories = async () => [{ expire: async () => { throw new Error("storage failed"); } }]; + try { await conference.expire(); throw new Error("expected rejection"); } + catch (error) { expect(error.message).to.equal("storage failed"); } + expect(model.status).to.equal("ready"); + }); it("omits an upstream length when later text is rewritten", async function () { const File = require("../src/core/AnonymizedFile").default; stub(config, "STREAMER_ENTRYPOINT", "");