import * as Calculators from '../calculators' import { BusinessExceptionError } from '../../../errors/business_exception.error' import { CompetitionCategories } from '../../../models/ranking/competition/enums/categories.enum' import { CalculatorFactory } from './calculator.factory' describe('CalculatorFactory', () => { describe('#build', () => { describe.each` category | calculator ${CompetitionCategories.DECREASE_BODY_FAT} | ${Calculators.DecreaseBodyFatCalculator} ${CompetitionCategories.DECREASE_VISCERAL_FAT} | ${Calculators.DecreaseVisceralFatCalculator} ${CompetitionCategories.INCREASE_LEAN_MASS} | ${Calculators.IncreaseLeanMassCalculator} ${CompetitionCategories.DECREASE_ACTUAL_WEIGHT} | ${Calculators.DecreaseActualWeightCalculator} `('when category is "$category"', ({ category, calculator }) => { it(`returns ${calculator.name} class`, () => { expect(CalculatorFactory.build(category)).toEqual(calculator) }) }) describe('when the category is unknown', () => { it('throws an error', () => { expect(() => CalculatorFactory.build('asd' as CompetitionCategories)).toThrowError(BusinessExceptionError) }) }) describe('when the category is empty', () => { it('throws an error', () => { expect(() => CalculatorFactory.build('' as CompetitionCategories)).toThrowError(BusinessExceptionError) }) }) }) })