Skip to content

Commit

Permalink
fix: correct chai argument ordering, and manually include meta field in
Browse files Browse the repository at this point in the history
stubs
  • Loading branch information
mjmaurer committed May 13, 2020
1 parent 6aa2213 commit 470e49b
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 44 deletions.
2 changes: 1 addition & 1 deletion src/ChangeDetector.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ class ChangeDetector {

/**
* Calls `pollOnce` on a schedule.
*
*
* Will wait for both interval and work to complete.
*/
pollWithInterval(taskName, interval, f) {
Expand Down
93 changes: 50 additions & 43 deletions src/ChangeDetector.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,56 +20,43 @@ describe("Airtable Changes", () => {
const table = base.table("tableName");
const updateSpy = sinon.fake();
sinon.replace(table, "update", updateSpy);
sinon
.stub(table, "select")
.returns({
all: () => Promise.resolve([])
})
.onSecondCall()
.returns({
all: () =>
Promise.resolve([
{
id: "someRecord",
fields: { "Last Modified": modifiedTime, Name: "test" },
get(field) {
return this.fields[field];
}
}
])
})
.onThirdCall()
.returns({
all: () =>
Promise.resolve([
{
id: "someRecord",
fields: { Name: "New Name" },
get(field) {
return this.fields[field];
}
}
])
});
// Default report no changes
const stub = sinon.stub(table, "select").returns({
all: () => Promise.resolve([])
});

const changes = new ChangeDetector(table);

let changed = await changes.pollOnce();
assert.equal(0, changed.length);
assert.isEmpty(changed);

stub.onSecondCall().returns({
all: () =>
Promise.resolve([
{
id: "someRecord",
fields: { "Last Modified": modifiedTime, Name: "Old Name" },
get(field) {
return this.fields[field];
}
}
])
});

changed = await changes.pollOnce();
assert.equal(1, changed.length);
const newRecord = changed[0];
assert.equal("test", newRecord.get("Name"));
assert.equal(undefined, newRecord.get("Notes"));
assert.isOk(newRecord.didChange("Name"));
assert.isOk(newRecord.didChange("Notes"));
assert.equal(undefined, newRecord.getPrior("Name"));
assert.equal(undefined, newRecord.getPrior("Notes"));
assert.lengthOf(changed, 1);
let [newRecord] = changed;
assert.equal(newRecord.get("Name"), "Old Name");
assert.isUndefined(newRecord.get("Notes"));
assert.isTrue(newRecord.didChange("Name"));
assert.isTrue(newRecord.didChange("Notes"));
assert.isUndefined(newRecord.getPrior("Name"));
assert.isUndefined(newRecord.getPrior("Notes"));
const update = updateSpy.firstCall.args[0];
const meta = {
lastValues: {
"Last Modified": modifiedTime,
Name: "test"
Name: "Old Name"
}
};
expect(update).to.deep.include({
Expand All @@ -79,11 +66,31 @@ describe("Airtable Changes", () => {
}
});

stub.onThirdCall().returns({
all: () =>
Promise.resolve([
{
id: "someRecord",
fields: {
Meta: JSON.stringify(meta),
Name: "New Name"
},
get(field) {
return this.fields[field];
}
}
])
});

changed = await changes.pollOnce();
assert.equal(1, changed.length);
assert.equal(changed.length, 1);
[newRecord] = changed;
assert.isTrue(newRecord.didChange("Name"));
assert.equal(newRecord.getPrior("Name"), "Old Name");
assert.equal(newRecord.get("Name"), "New Name");

changed = await changes.pollOnce();
assert.equal(0, changed.length);
assert.equal(changed.length, 0);
});
}).timeout(10000);
});

0 comments on commit 470e49b

Please sign in to comment.