Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions pkgs/contract/test/HatsTimeFrameModule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,18 @@ describe("HatsTimeFrameModule", () => {
roleHatId,
]);

expect(elapsedTime - 1n).to.equal(expectedElapsedTime);
/**
Copy link

Copilot AI Jul 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The comment explains the timing behavior well, but it should be moved to the top of the test function or extracted as a module-level comment since this timing issue affects all assertions in the test, not just this specific one.

Copilot uses AI. Check for mistakes.

* Using increaseTo, it sets the next block’s timestamp,
* but if you immediately query the time or run a transaction,
* the block may not be mined at exactly that timestamp,
* or the contract may use the previous block’s timestamp.
*/

expect(elapsedTime).to.oneOf([
expectedElapsedTime,
expectedElapsedTime + 1n,
expectedElapsedTime - 1n,
]);
Comment on lines +194 to +198
Copy link

Copilot AI Jul 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The timing tolerance logic is duplicated across multiple test assertions. Consider extracting this into a helper function like expectTimeWithTolerance(actualTime, expectedTime, tolerance = 1n) to reduce code duplication and improve maintainability.

Suggested change
expect(elapsedTime).to.oneOf([
expectedElapsedTime,
expectedElapsedTime + 1n,
expectedElapsedTime - 1n,
]);
expectTimeWithTolerance(elapsedTime, expectedElapsedTime);

Copilot uses AI. Check for mistakes.


await time.increaseTo(initialTime + 200n);

Expand All @@ -197,7 +208,11 @@ describe("HatsTimeFrameModule", () => {
roleHatId,
]);

expect(elapsedTime - 1n).to.equal(expectedElapsedTime);
expect(elapsedTime).to.oneOf([
expectedElapsedTime,
expectedElapsedTime + 1n,
expectedElapsedTime - 1n,
]);

await HatsTimeFrameModule.write.deactivate([roleHatId, address1Validated]);

Expand All @@ -216,7 +231,11 @@ describe("HatsTimeFrameModule", () => {
roleHatId,
]);

expect(elapsedTime).to.equal(expectedElapsedTime);
expect(elapsedTime).to.oneOf([
expectedElapsedTime,
expectedElapsedTime + 1n,
expectedElapsedTime - 1n,
]);

// Reactivate the hat
await HatsTimeFrameModule.write.reactivate([roleHatId, address1Validated]);
Expand All @@ -236,7 +255,11 @@ describe("HatsTimeFrameModule", () => {
roleHatId,
]);

expect(elapsedTime - 1n).to.equal(expectedElapsedTime);
expect(elapsedTime).to.oneOf([
expectedElapsedTime,
expectedElapsedTime + 1n,
expectedElapsedTime - 1n,
]);
});

it("mint hat previous time", async () => {
Expand Down