feat: add tests for normalizeName and RecipesService methods, including unit conversion and alias normalization

This commit is contained in:
Nils-Johan Gynther
2026-04-16 19:22:14 +02:00
parent 1b9df4d20d
commit 9292e30abc
6 changed files with 305 additions and 9 deletions
@@ -0,0 +1,95 @@
import { RecipesService } from './recipes.service';
// Vi instansierar utan Prisma eftersom vi bara testar privata hjälpmetoder
const service = new (RecipesService as any)(null);
const convert = (q: number, from: string, to: string) =>
(service as any).convertUnit(q, from, to, 'testprodukt');
const normalize = (u: string) => (service as any).normalizeUnit(u);
describe('RecipesService.normalizeUnit', () => {
it('normaliserar aliaser', () => {
expect(normalize('tesked')).toBe('tsk');
expect(normalize('matsked')).toBe('msk');
expect(normalize('gram')).toBe('g');
expect(normalize('kilogram')).toBe('kg');
expect(normalize('deciliter')).toBe('dl');
expect(normalize('milliliter')).toBe('ml');
});
it('hanterar gemener och blanksteg', () => {
expect(normalize(' MSK ')).toBe('msk');
expect(normalize('G')).toBe('g');
});
it('returnerar okänd enhet oförändrad', () => {
expect(normalize('kopp')).toBe('kopp');
});
});
describe('RecipesService.convertUnit', () => {
describe('viktkonvertering', () => {
it('konverterar g → kg', () => {
expect(convert(500, 'g', 'kg')).toBeCloseTo(0.5);
});
it('konverterar kg → g', () => {
expect(convert(1.5, 'kg', 'g')).toBeCloseTo(1500);
});
it('returnerar samma värde för identiska enheter', () => {
expect(convert(200, 'g', 'g')).toBe(200);
});
});
describe('volymkonvertering', () => {
it('konverterar dl → ml', () => {
expect(convert(2, 'dl', 'ml')).toBeCloseTo(200);
});
it('konverterar ml → dl', () => {
expect(convert(150, 'ml', 'dl')).toBeCloseTo(1.5);
});
});
describe('portionskonvertering', () => {
it('konverterar msk → tsk (1 msk ≈ 3 tsk)', () => {
expect(convert(2, 'msk', 'tsk')).toBeCloseTo(6);
});
it('konverterar tsk → msk', () => {
expect(convert(3, 'tsk', 'msk')).toBeCloseTo(1);
});
});
describe('normaliserar aliaser vid konvertering', () => {
it('konverterar "gram" → "kg"', () => {
expect(convert(1000, 'gram', 'kg')).toBeCloseTo(1);
});
it('konverterar "matsked" → "tsk"', () => {
expect(convert(1, 'matsked', 'tsk')).toBeCloseTo(3);
});
});
describe('felhantering', () => {
it('kastar fel för inkompatibla enhetstyper', () => {
expect(() => convert(100, 'g', 'dl')).toThrow();
});
it('kastar fel för noll-kvantitet', () => {
expect(() => convert(0, 'g', 'kg')).toThrow();
});
it('kastar fel för negativ kvantitet', () => {
expect(() => convert(-1, 'g', 'kg')).toThrow();
});
it('kastar fel för tom from-enhet', () => {
expect(() => convert(100, '', 'kg')).toThrow();
});
it('kastar fel för okänd enhet', () => {
expect(() => convert(100, 'kopp', 'dl')).toThrow();
});
});
});