mirror: add internal method `_createUpdate` (#868)
Summary: It’s useful to add this simple function now because the rest of the commits required to implement #622 will want to use it extensively in test code. Actual clients of the API will not need to use it, because the concept of “updates” is an implementation detail: clients will always provide simple timestamps. Test Plan: Unit tests included, with full coverage; run `yarn unit`. wchargin-branch: mirror-createupdate
This commit is contained in:
parent
cdceedef8d
commit
e572551cd8
|
@ -247,6 +247,16 @@ export class Mirror {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a new update, representing one communication with the
|
||||||
|
* remote server. A unique ID will be created and returned.
|
||||||
|
*/
|
||||||
|
_createUpdate(updateTimestamp: Date): UpdateId {
|
||||||
|
return this._db
|
||||||
|
.prepare("INSERT INTO updates (time_epoch_millis) VALUES (?)")
|
||||||
|
.run(+updateTimestamp).lastInsertROWID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -341,6 +351,8 @@ export function _buildSchemaInfo(schema: Schema.Schema): SchemaInfo {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UpdateId = number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute a function inside a database transaction.
|
* Execute a function inside a database transaction.
|
||||||
*
|
*
|
||||||
|
|
|
@ -173,6 +173,46 @@ describe("graphql/mirror", () => {
|
||||||
expect(() => new Mirror(db, buildGithubSchema())).not.toThrow();
|
expect(() => new Mirror(db, buildGithubSchema())).not.toThrow();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("_createUpdate", () => {
|
||||||
|
it("creates an update with the proper timestamp", () => {
|
||||||
|
const db = new Database(":memory:");
|
||||||
|
const mirror = new Mirror(db, buildGithubSchema());
|
||||||
|
|
||||||
|
const date = new Date(0);
|
||||||
|
// This is equivalent to `new Date(12345)`, just more explicit
|
||||||
|
// about the units---we should be explicit at least once in
|
||||||
|
// update-related test code.
|
||||||
|
date.setUTCMilliseconds(12345);
|
||||||
|
|
||||||
|
mirror._createUpdate(date);
|
||||||
|
expect(+date).toBe(12345); // please don't mutate the date...
|
||||||
|
expect(
|
||||||
|
db
|
||||||
|
.prepare("SELECT time_epoch_millis FROM updates")
|
||||||
|
.pluck()
|
||||||
|
.all()
|
||||||
|
).toEqual([12345]);
|
||||||
|
});
|
||||||
|
it("returns distinct results regardless of timestamps", () => {
|
||||||
|
const db = new Database(":memory:");
|
||||||
|
const mirror = new Mirror(db, buildGithubSchema());
|
||||||
|
const date0 = new Date(0);
|
||||||
|
const date1 = new Date(1);
|
||||||
|
const uid1 = mirror._createUpdate(date0);
|
||||||
|
const uid2 = mirror._createUpdate(date0);
|
||||||
|
const uid3 = mirror._createUpdate(date1);
|
||||||
|
expect(uid1).not.toEqual(uid2);
|
||||||
|
expect(uid2).not.toEqual(uid3);
|
||||||
|
expect(uid3).not.toEqual(uid1);
|
||||||
|
expect(
|
||||||
|
db
|
||||||
|
.prepare("SELECT COUNT(1) FROM updates")
|
||||||
|
.pluck()
|
||||||
|
.get()
|
||||||
|
).toEqual(3);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("_buildSchemaInfo", () => {
|
describe("_buildSchemaInfo", () => {
|
||||||
|
|
Loading…
Reference in New Issue