Add unit tests for DeviceModel.distinctCriteriaValues (4 tests). Fix missing comma in package.json. Build status: Success
This commit is contained in:
1 parent
23b5e33a6b
commit
5a4b884b09
1 file changed
+85
@@ -0,0 +1,85 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
|
||||
// Mock the MongoDB connection
|
||||
const mockDistinct = vi.fn()
|
||||
const mockCollection = {
|
||||
distinct: mockDistinct,
|
||||
}
|
||||
|
||||
vi.mock('@adonisjs/core/services/logger', () => ({
|
||||
default: { info: vi.fn(), debug: vi.fn(), warn: vi.fn(), error: vi.fn() },
|
||||
}))
|
||||
|
||||
// Mock BaseModel's getDb to return our mock collection
|
||||
vi.mock('../../../database/base_model.js', () => ({
|
||||
BaseModel: class {
|
||||
static collectionName = 'devices'
|
||||
static getCollection() { return mockCollection }
|
||||
static getDb() { return { collection: () => mockCollection } }
|
||||
},
|
||||
}))
|
||||
|
||||
import DeviceModel from '../../../app/models/device.js'
|
||||
|
||||
describe('DeviceModel.distinctCriteriaValues', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
})
|
||||
|
||||
it('returns distinct manufacturers, ouis and productClasses', async () => {
|
||||
mockDistinct
|
||||
.mockResolvedValueOnce(['Sagemcom', 'Huawei'])
|
||||
.mockResolvedValueOnce(['F8B7FF', '202BC1'])
|
||||
.mockResolvedValueOnce(['Livebox 4', 'BM632w'])
|
||||
|
||||
const result = await DeviceModel.distinctCriteriaValues()
|
||||
|
||||
expect(mockDistinct).toHaveBeenCalledTimes(3)
|
||||
expect(mockDistinct).toHaveBeenCalledWith('deviceId.manufacturer')
|
||||
expect(mockDistinct).toHaveBeenCalledWith('deviceId.oui')
|
||||
expect(mockDistinct).toHaveBeenCalledWith('deviceId.productClass')
|
||||
|
||||
expect(result.manufacturers).toEqual(['Huawei', 'Sagemcom'])
|
||||
expect(result.ouis).toEqual(['202BC1', 'F8B7FF'])
|
||||
expect(result.productClasses).toEqual(['BM632w', 'Livebox 4'])
|
||||
})
|
||||
|
||||
it('filters out null and non-string values', async () => {
|
||||
mockDistinct
|
||||
.mockResolvedValueOnce(['Sagemcom', null, undefined, '', 123])
|
||||
.mockResolvedValueOnce([null, 'F8B7FF'])
|
||||
.mockResolvedValueOnce(['Livebox 4', null])
|
||||
|
||||
const result = await DeviceModel.distinctCriteriaValues()
|
||||
|
||||
expect(result.manufacturers).toEqual(['Sagemcom'])
|
||||
expect(result.ouis).toEqual(['F8B7FF'])
|
||||
expect(result.productClasses).toEqual(['Livebox 4'])
|
||||
})
|
||||
|
||||
it('returns empty arrays when no devices exist', async () => {
|
||||
mockDistinct
|
||||
.mockResolvedValueOnce([])
|
||||
.mockResolvedValueOnce([])
|
||||
.mockResolvedValueOnce([])
|
||||
|
||||
const result = await DeviceModel.distinctCriteriaValues()
|
||||
|
||||
expect(result.manufacturers).toEqual([])
|
||||
expect(result.ouis).toEqual([])
|
||||
expect(result.productClasses).toEqual([])
|
||||
})
|
||||
|
||||
it('sorts results alphabetically', async () => {
|
||||
mockDistinct
|
||||
.mockResolvedValueOnce(['Zyxel', 'Arcadyan', 'Sagemcom'])
|
||||
.mockResolvedValueOnce(['FFFFFF', 'AAAAAA', 'CCCCCC'])
|
||||
.mockResolvedValueOnce(['Router Z', 'Box A', 'Modem C'])
|
||||
|
||||
const result = await DeviceModel.distinctCriteriaValues()
|
||||
|
||||
expect(result.manufacturers).toEqual(['Arcadyan', 'Sagemcom', 'Zyxel'])
|
||||
expect(result.ouis).toEqual(['AAAAAA', 'CCCCCC', 'FFFFFF'])
|
||||
expect(result.productClasses).toEqual(['Box A', 'Modem C', 'Router Z'])
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user