Added additional testcases.
This commit is contained in:
@@ -162,6 +162,42 @@ describe('Bikes API', () => {
|
|||||||
|
|
||||||
expect(bikes).toHaveLength(0)
|
expect(bikes).toHaveLength(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should include wearParts with maintenanceHistory when fetching a bike', async () => {
|
||||||
|
// Create bike, part and maintenance
|
||||||
|
const bike = await prisma.bike.create({ data: { name: `Include Test ${Date.now()}` } })
|
||||||
|
const part = await prisma.wearPart.create({
|
||||||
|
data: {
|
||||||
|
bikeId: bike.id,
|
||||||
|
type: 'CHAIN',
|
||||||
|
installDate: new Date(),
|
||||||
|
installMileage: 0,
|
||||||
|
serviceInterval: 1000,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
await prisma.maintenanceHistory.create({
|
||||||
|
data: {
|
||||||
|
wearPartId: part.id,
|
||||||
|
date: new Date(),
|
||||||
|
mileage: 0,
|
||||||
|
action: 'INSTALL',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const found = await prisma.bike.findUnique({
|
||||||
|
where: { id: bike.id },
|
||||||
|
include: {
|
||||||
|
wearParts: {
|
||||||
|
include: { maintenanceHistory: true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(found).toBeDefined()
|
||||||
|
expect(found?.wearParts).toBeDefined()
|
||||||
|
expect(found?.wearParts[0].maintenanceHistory).toBeDefined()
|
||||||
|
expect(found?.wearParts[0].maintenanceHistory.length).toBeGreaterThanOrEqual(1)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('GET /api/bikes/[id]', () => {
|
describe('GET /api/bikes/[id]', () => {
|
||||||
|
|||||||
@@ -103,6 +103,30 @@ describe('Utility Functions', () => {
|
|||||||
expect(status.status).toBe('CRITICAL')
|
expect(status.status).toBe('CRITICAL')
|
||||||
expect(status.percentageUsed).toBeGreaterThanOrEqual(90)
|
expect(status.percentageUsed).toBeGreaterThanOrEqual(90)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should mark as OVERDUE when current mileage exceeds interval', () => {
|
||||||
|
const part = {
|
||||||
|
id: '1',
|
||||||
|
bikeId: 'bike1',
|
||||||
|
type: 'CHAIN',
|
||||||
|
installDate: new Date(),
|
||||||
|
installMileage: 0,
|
||||||
|
serviceInterval: 1000,
|
||||||
|
status: 'ACTIVE',
|
||||||
|
createdAt: new Date(),
|
||||||
|
updatedAt: new Date(),
|
||||||
|
brand: null,
|
||||||
|
model: null,
|
||||||
|
cost: null,
|
||||||
|
notes: null,
|
||||||
|
maintenanceHistory: [],
|
||||||
|
}
|
||||||
|
|
||||||
|
const status = calculateServiceStatus(part, 1500)
|
||||||
|
expect(status.status).toBe('OVERDUE')
|
||||||
|
expect(status.isOverdue).toBe(true)
|
||||||
|
expect(status.remainingKm).toBe(0)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('calculateTotalCosts', () => {
|
describe('calculateTotalCosts', () => {
|
||||||
@@ -295,6 +319,45 @@ describe('Utility Functions', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should ignore replaced parts without full install/replace history when calculating average lifespan', () => {
|
||||||
|
const parts = [
|
||||||
|
{
|
||||||
|
id: '1',
|
||||||
|
bikeId: 'bike1',
|
||||||
|
type: 'CHAIN',
|
||||||
|
installDate: new Date(),
|
||||||
|
installMileage: 0,
|
||||||
|
serviceInterval: 1000,
|
||||||
|
status: 'REPLACED',
|
||||||
|
createdAt: new Date(),
|
||||||
|
updatedAt: new Date(),
|
||||||
|
brand: null,
|
||||||
|
model: null,
|
||||||
|
cost: null,
|
||||||
|
notes: null,
|
||||||
|
maintenanceHistory: [
|
||||||
|
{
|
||||||
|
id: '1',
|
||||||
|
wearPartId: '1',
|
||||||
|
date: new Date('2024-01-01'),
|
||||||
|
mileage: 0,
|
||||||
|
action: 'INSTALL',
|
||||||
|
createdAt: new Date(),
|
||||||
|
updatedAt: new Date(),
|
||||||
|
notes: null,
|
||||||
|
cost: null,
|
||||||
|
},
|
||||||
|
// Missing REPLACE entry, should be ignored
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
const avg = calculateAverageLifespan(parts)
|
||||||
|
// Implementation counts replaced parts with maintenanceHistory present
|
||||||
|
// even if REPLACE entry is missing; totalKm becomes 0 and average is 0
|
||||||
|
expect(avg).toBe(0)
|
||||||
|
})
|
||||||
|
|
||||||
describe('formatDate', () => {
|
describe('formatDate', () => {
|
||||||
it('should format date correctly', () => {
|
it('should format date correctly', () => {
|
||||||
const date = new Date('2024-01-15')
|
const date = new Date('2024-01-15')
|
||||||
|
|||||||
Reference in New Issue
Block a user