durabull
Version:
A durable workflow engine built on top of BullMQ and Redis
89 lines (72 loc) • 2.58 kB
text/typescript
import { generateWorkflowId, generateActivityId, generateTimerId, generateSideEffectId } from '../../src/runtime/ids';
describe('ID Generators', () => {
describe('generateWorkflowId', () => {
it('should generate unique workflow IDs', () => {
const id1 = generateWorkflowId();
const id2 = generateWorkflowId();
expect(id1).toBeDefined();
expect(id2).toBeDefined();
expect(id1).not.toBe(id2);
expect(typeof id1).toBe('string');
expect(id1.length).toBeGreaterThan(0);
});
it('should generate IDs with wf prefix', () => {
const id = generateWorkflowId();
expect(id).toMatch(/^wf-/);
});
it('should generate multiple unique IDs', () => {
const ids = new Set();
for (let i = 0; i < 100; i++) {
ids.add(generateWorkflowId());
}
expect(ids.size).toBe(100);
});
});
describe('generateActivityId', () => {
it('should generate unique activity IDs', () => {
const id1 = generateActivityId();
const id2 = generateActivityId();
expect(id1).not.toBe(id2);
expect(typeof id1).toBe('string');
});
it('should generate IDs with act prefix', () => {
const id = generateActivityId();
expect(id).toMatch(/^act-/);
});
});
describe('generateTimerId', () => {
it('should generate unique timer IDs', () => {
const id1 = generateTimerId();
const id2 = generateTimerId();
expect(id1).not.toBe(id2);
expect(typeof id1).toBe('string');
});
it('should generate IDs with timer prefix', () => {
const id = generateTimerId();
expect(id).toMatch(/^timer-/);
});
});
describe('generateSideEffectId', () => {
it('should generate unique side effect IDs', () => {
const id1 = generateSideEffectId();
const id2 = generateSideEffectId();
expect(id1).not.toBe(id2);
expect(typeof id1).toBe('string');
});
it('should generate IDs with se prefix', () => {
const id = generateSideEffectId();
expect(id).toMatch(/^se-/);
});
});
describe('ID uniqueness across types', () => {
it('should generate different IDs for different types', () => {
const workflowId = generateWorkflowId();
const activityId = generateActivityId();
const timerId = generateTimerId();
const sideEffectId = generateSideEffectId();
const ids = [workflowId, activityId, timerId, sideEffectId];
const uniqueIds = new Set(ids);
expect(uniqueIds.size).toBe(4);
});
});
});