refector:@ refrence 架构重构
This commit is contained in:
99
src/tests/core/resource/discovery/BaseDiscovery.unit.test.js
Normal file
99
src/tests/core/resource/discovery/BaseDiscovery.unit.test.js
Normal file
@ -0,0 +1,99 @@
|
||||
const BaseDiscovery = require('../../../../lib/core/resource/discovery/BaseDiscovery')
|
||||
|
||||
describe('BaseDiscovery', () => {
|
||||
let discovery
|
||||
|
||||
beforeEach(() => {
|
||||
discovery = new BaseDiscovery('test', 1)
|
||||
})
|
||||
|
||||
describe('constructor', () => {
|
||||
test('should initialize with source and priority', () => {
|
||||
expect(discovery.source).toBe('test')
|
||||
expect(discovery.priority).toBe(1)
|
||||
})
|
||||
|
||||
test('should throw error if source is not provided', () => {
|
||||
expect(() => new BaseDiscovery()).toThrow('Discovery source is required')
|
||||
})
|
||||
|
||||
test('should use default priority if not provided', () => {
|
||||
const defaultDiscovery = new BaseDiscovery('test')
|
||||
expect(defaultDiscovery.priority).toBe(0)
|
||||
})
|
||||
})
|
||||
|
||||
describe('discover method', () => {
|
||||
test('should throw error for abstract method', async () => {
|
||||
await expect(discovery.discover()).rejects.toThrow('discover method must be implemented by subclass')
|
||||
})
|
||||
})
|
||||
|
||||
describe('getDiscoveryInfo', () => {
|
||||
test('should return discovery metadata', () => {
|
||||
const info = discovery.getDiscoveryInfo()
|
||||
expect(info).toEqual({
|
||||
source: 'test',
|
||||
priority: 1,
|
||||
description: expect.any(String)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('validateResource', () => {
|
||||
test('should validate resource structure', () => {
|
||||
const validResource = {
|
||||
id: 'role:test',
|
||||
reference: '@package://test.md',
|
||||
metadata: {
|
||||
source: 'test',
|
||||
priority: 1
|
||||
}
|
||||
}
|
||||
|
||||
expect(() => discovery.validateResource(validResource)).not.toThrow()
|
||||
})
|
||||
|
||||
test('should throw error for invalid resource', () => {
|
||||
const invalidResource = { id: 'test' } // missing reference
|
||||
|
||||
expect(() => discovery.validateResource(invalidResource)).toThrow('Resource must have id and reference')
|
||||
})
|
||||
})
|
||||
|
||||
describe('normalizeResource', () => {
|
||||
test('should add metadata to resource', () => {
|
||||
const resource = {
|
||||
id: 'role:test',
|
||||
reference: '@package://test.md'
|
||||
}
|
||||
|
||||
const normalized = discovery.normalizeResource(resource)
|
||||
|
||||
expect(normalized).toEqual({
|
||||
id: 'role:test',
|
||||
reference: '@package://test.md',
|
||||
metadata: {
|
||||
source: 'test',
|
||||
priority: 1,
|
||||
timestamp: expect.any(Date)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
test('should preserve existing metadata', () => {
|
||||
const resource = {
|
||||
id: 'role:test',
|
||||
reference: '@package://test.md',
|
||||
metadata: {
|
||||
customField: 'value'
|
||||
}
|
||||
}
|
||||
|
||||
const normalized = discovery.normalizeResource(resource)
|
||||
|
||||
expect(normalized.metadata.customField).toBe('value')
|
||||
expect(normalized.metadata.source).toBe('test')
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user