/** * DataUseCase Unit Tests * 데이터 평가 로직 단위 테스트 */ // 단위 테스트에서는 dist 파일에서 직접 import하여 패키지 의존성 우회 import { DataUseCase } from '../../dist-server/controllers/data-use-case' // 테스트용 타입 정의 (실제 타입과 호환) interface DataItem { name: string tag?: string active: boolean type: string spec?: Record } interface DataSet { useCase: string | null } describe('DataUseCase', () => { describe('evaluate', () => { it('useCase가 없으면 ooc/oos 모두 false를 반환해야 한다', () => { // Given const dataSet = { useCase: null } as DataSet const dataItems: DataItem[] = [] const data = {} // When const result = DataUseCase.evaluate(dataSet, dataItems, data) // Then expect(result.ooc).toBe(false) expect(result.oos).toBe(false) }) it('active가 false인 dataItem은 평가하지 않아야 한다', () => { // Given const dataSet = { useCase: 'QA' } as DataSet const dataItems: DataItem[] = [ { name: 'Temperature', tag: 'temperature', active: false, type: 'number' as any, spec: { QA: { ucl: 80, lcl: 20 } } } ] const data = { temperature: 100 } // UCL 초과하지만 inactive // When const result = DataUseCase.evaluate(dataSet, dataItems, data) // Then expect(result.ooc).toBe(false) expect(result.judgment).toEqual({}) }) it('tag가 없는 dataItem은 평가하지 않아야 한다', () => { // Given const dataSet = { useCase: 'QA' } as DataSet const dataItems: DataItem[] = [ { name: 'Temperature', tag: undefined, active: true, type: 'number' as any, spec: { QA: { ucl: 80, lcl: 20 } } } ] const data = { temperature: 100 } // When const result = DataUseCase.evaluate(dataSet, dataItems, data) // Then expect(result.ooc).toBe(false) }) it('값이 null이면 해당 항목을 건너뛰어야 한다', () => { // Given const dataSet = { useCase: 'QA' } as DataSet const dataItems: DataItem[] = [ { name: 'Temperature', tag: 'temperature', active: true, type: 'number' as any, spec: { QA: { ucl: 80, lcl: 20 } } } ] const data = { temperature: null } // When const result = DataUseCase.evaluate(dataSet, dataItems, data) // Then expect(result.ooc).toBe(false) expect(result.judgment).toEqual({}) }) it('배열 형태의 값도 처리할 수 있어야 한다', () => { // Given const dataSet = { useCase: 'QA' } as DataSet const dataItems: DataItem[] = [ { name: 'Temperature', tag: 'temperature', active: true, type: 'number' as any, spec: { QA: { ucl: 80, lcl: 20 } } } ] const data = { temperature: [50, 60, 70] } // 배열 형태 // When const result = DataUseCase.evaluate(dataSet, dataItems, data) // Then: 에러 없이 처리되어야 함 expect(result).toBeDefined() }) }) describe('registry', () => { it('등록된 useCase 이름 목록을 반환해야 한다', () => { // When const names = DataUseCase.getUseCaseNames() // Then expect(Array.isArray(names)).toBe(true) }) it('존재하지 않는 useCase는 undefined를 반환해야 한다', () => { // When const useCase = DataUseCase.getUseCase('non-existent-use-case') // Then expect(useCase).toBeUndefined() }) }) })