/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
add_task(async
function testEnrollments() {
const { sandbox, manager, cleanup } = await NimbusTestUtils.setupTest();
const db = manager.store._db;
sandbox.spy(db,
"updateEnrollment");
Assert.equal(db.pendingWrites,
0,
"No pending writes");
const recipe = NimbusTestUtils.factories.recipe(
"test");
await manager.enroll(recipe,
"test");
const enrollment = manager.store.get(recipe.slug);
Assert.equal(db.pendingWrites,
1,
"1 pending write");
Assert.ok(db.updateEnrollment.calledOnceWithExactly(recipe.slug, recipe));
Assert.equal(
await NimbusTestUtils.queryEnrollment(recipe.slug),
null,
"Enrollment does not exist in database yet"
);
await NimbusTestUtils.flushStore();
Assert.equal(db.pendingWrites,
0,
"No remaining pending writes");
{
const dbEnrollment = await NimbusTestUtils.queryEnrollment(recipe.slug);
Assert.notEqual(dbEnrollment,
null,
"Enrollment exists in database");
Assert.equal(
dbEnrollment.branchSlug,
enrollment.branch.slug,
"Has the correct branch slug"
);
Assert.deepEqual(dbEnrollment.recipe, recipe,
"Has the recipe attached");
}
db.updateEnrollment.resetHistory();
manager.unenroll(
"test", { reason:
"reason123" });
Assert.equal(db.pendingWrites,
1,
"1 pending write");
Assert.ok(db.updateEnrollment.calledOnceWithExactly(recipe.slug));
{
const dbEnrollment = await NimbusTestUtils.queryEnrollment(recipe.slug);
Assert.notEqual(
dbEnrollment,
null,
"Enrollment still exists in the database"
);
Assert.ok(dbEnrollment.active,
"database change has not been flushed yet");
Assert.equal(dbEnrollment.unenrollReason,
null,
"Unenroll reason");
}
await NimbusTestUtils.flushStore();
{
const dbEnrollment = await NimbusTestUtils.queryEnrollment(recipe.slug);
Assert.notEqual(
dbEnrollment,
null,
"Enrollment still exists in the database"
);
Assert.ok(!dbEnrollment.active,
"Enrollment no longer active");
Assert.equal(dbEnrollment.unenrollReason,
"reason123",
"Unenroll reason");
}
manager.store._removeEntriesByKeys([recipe.slug]);
// This will trigger a DELETE query.
db.updateEnrollment(recipe.slug);
Assert.equal(db.pendingWrites,
1,
"1 pending write");
Assert.notEqual(
await NimbusTestUtils.queryEnrollment(recipe.slug),
null,
"Enrollment still exists"
);
await NimbusTestUtils.flushStore();
Assert.equal(
await NimbusTestUtils.queryEnrollment(recipe.slug),
null,
"Enrollment deleted from database"
);
await cleanup();
});
add_task(async
function testCollapseWrites() {
const { manager, cleanup } = await NimbusTestUtils.setupTest();
const db = manager.store._db;
const recipe = NimbusTestUtils.factories.recipe(
"unenroll-immediately");
await manager.enroll(recipe,
"test");
manager.unenroll(recipe.slug, { reason:
"some reason" });
Assert.equal(db.pendingWrites,
1,
"1 pending write");
await NimbusTestUtils.flushStore();
Assert.equal(db.pendingWrites,
0,
"No pending writes");
const dbEnrollment = await NimbusTestUtils.queryEnrollment(recipe.slug);
Assert.notEqual(dbEnrollment,
null,
"Enrollment exists in database");
Assert.ok(!dbEnrollment.active,
"Enrollment is not active");
Assert.equal(dbEnrollment.unenrollReason,
"some reason");
await cleanup();
});