Closed chromy closed 6 days ago
Running the test lots of times in a row seems to repro. Here I extracted all the code into a single test I could loop because jest setup takes a long time: https://github.com/Makespace/members-app/compare/chromy/2024-06-21-flake. It's about 2% flaky for me (~20/1000).
Issue seems to be use of faker.string.alpha()
for the resource IDs. It generates single character alpha and causes sporadic collisions.
describe.each(Array(200).fill(null))('a resource', () => {
const arbitraryResourceOfSameType = () => ({
type: resource.type,
id: faker.string.alpha(),
});
const otherResourceOfSameTypeA = arbitraryResourceOfSameType();
const otherResourceOfSameTypeB = arbitraryResourceOfSameType();
beforeEach(async () => {
await commitEvent(dbClient, testLogger)(
otherResourceOfSameTypeA,
faker.number.int()
)(arbitraryMemberNumberLinkedToEmailEvent())();
await commitEvent(dbClient, testLogger)(
otherResourceOfSameTypeB,
faker.number.int()
)(arbitraryMemberNumberLinkedToEmailEvent())();
await commitEvent(dbClient, testLogger)(resource, initialVersion)(
event
)();
resourceEvents = await pipe(
resource,
getResourceEvents(dbClient),
T.map(getRightOrFail)
)();
});
it('has independant versions', () => {
expect(resourceEvents.version).toStrictEqual(initialVersion);
});
it('has independant events', async () => {
const events = await getTestEvents();
if (events.length !== 3) {
console.log('>>>> otherA', otherResourceOfSameTypeA);
console.log('>>>> otherA', otherResourceOfSameTypeB);
console.log('>>>> resource', resource);
}
expect(events).toHaveLength(3);
expect(resourceEvents.events).toStrictEqual([event]);
});
});
});