test(db): add PhaseRepository findByNumber and getNextNumber tests
- Test findByNumber with matching/non-matching initiative and number - Test getNextNumber returns 1 for empty initiative - Test getNextNumber returns max + 1 with existing phases - Test getNextNumber handles gaps in numbering
This commit is contained in:
@@ -168,4 +168,93 @@ describe('DrizzlePhaseRepository', () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('findByNumber', () => {
|
||||
it('should find phase by initiative and number', async () => {
|
||||
await phaseRepo.create({
|
||||
initiativeId: testInitiativeId,
|
||||
number: 1,
|
||||
name: 'Phase 1',
|
||||
});
|
||||
await phaseRepo.create({
|
||||
initiativeId: testInitiativeId,
|
||||
number: 2,
|
||||
name: 'Phase 2',
|
||||
});
|
||||
|
||||
const found = await phaseRepo.findByNumber(testInitiativeId, 1);
|
||||
expect(found).not.toBeNull();
|
||||
expect(found?.name).toBe('Phase 1');
|
||||
|
||||
const foundTwo = await phaseRepo.findByNumber(testInitiativeId, 2);
|
||||
expect(foundTwo).not.toBeNull();
|
||||
expect(foundTwo?.name).toBe('Phase 2');
|
||||
});
|
||||
|
||||
it('should return null for non-existent number', async () => {
|
||||
await phaseRepo.create({
|
||||
initiativeId: testInitiativeId,
|
||||
number: 1,
|
||||
name: 'Phase 1',
|
||||
});
|
||||
|
||||
const found = await phaseRepo.findByNumber(testInitiativeId, 99);
|
||||
expect(found).toBeNull();
|
||||
});
|
||||
|
||||
it('should return null for wrong initiative', async () => {
|
||||
await phaseRepo.create({
|
||||
initiativeId: testInitiativeId,
|
||||
number: 1,
|
||||
name: 'Phase 1',
|
||||
});
|
||||
|
||||
// Create another initiative
|
||||
const otherInitiative = await initiativeRepo.create({
|
||||
name: 'Other Initiative',
|
||||
});
|
||||
|
||||
const found = await phaseRepo.findByNumber(otherInitiative.id, 1);
|
||||
expect(found).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('getNextNumber', () => {
|
||||
it('should return 1 for empty initiative', async () => {
|
||||
const next = await phaseRepo.getNextNumber(testInitiativeId);
|
||||
expect(next).toBe(1);
|
||||
});
|
||||
|
||||
it('should return max + 1', async () => {
|
||||
await phaseRepo.create({
|
||||
initiativeId: testInitiativeId,
|
||||
number: 1,
|
||||
name: 'P1',
|
||||
});
|
||||
await phaseRepo.create({
|
||||
initiativeId: testInitiativeId,
|
||||
number: 2,
|
||||
name: 'P2',
|
||||
});
|
||||
|
||||
const next = await phaseRepo.getNextNumber(testInitiativeId);
|
||||
expect(next).toBe(3);
|
||||
});
|
||||
|
||||
it('should handle gaps in numbering', async () => {
|
||||
await phaseRepo.create({
|
||||
initiativeId: testInitiativeId,
|
||||
number: 1,
|
||||
name: 'P1',
|
||||
});
|
||||
await phaseRepo.create({
|
||||
initiativeId: testInitiativeId,
|
||||
number: 5,
|
||||
name: 'P5',
|
||||
});
|
||||
|
||||
const next = await phaseRepo.getNextNumber(testInitiativeId);
|
||||
expect(next).toBe(6);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user