import { SFItem, derive, add, BaseComponents, get } from './deconstruct'; test('base returns 1', () => { const item: SFItem = { name: 'Iron Ingot', id: 'iron_ingot', type: 'base' }; const expected = new Map([[item.id, 30]]); expect(derive(item)).toMatchObject(expected); }); test('add', () => { const curr: BaseComponents = [['iron_ingot', 30]]; const val = add(['iron_ingot', 10], curr); const expected = [['iron_ingot', 40]]; expect(val).toMatchObject(expected); }); test('add2', () => { const curr: BaseComponents = [['copper_ore', 10], ['iron_ingot', 30]]; const val = add(['iron_ingot', 10], curr); const expected = [['copper_ore', 10], ['iron_ingot', 40]]; expect(val).toMatchObject(expected); }); test('get undefined', () => { const ITEMS: Array = [ { name: 'Iron Ingot', id: 'iron_ingot', type: 'base' }, ]; const val = get('iron_plate', ITEMS); const expected = undefined; expect(val).toBe(expected); }); test('get existing', () => { const ITEMS: Array = [ { name: 'Iron Ingot', id: 'iron_ingot', type: 'base' }, ]; const val = get('iron_ingot', ITEMS); const expected = ITEMS[0]; expect(val).toMatchObject(expected); }); test('level 1', () => { const item: SFItem = { name: 'Iron Plate', id: 'iron_plate', type: 'derived', recipe: { in: [['iron_ingot', 30]], out: 20 } }; const expected = [['iron_ingot', 30]]; expect(derive(item)).toMatchObject(expected); }); test('level 2', () => { const item: SFItem = { name: 'Screw', id: 'screw', type: 'derived', recipe: { in: [['iron_rod', 10]], out: 40 } }; const expected = [['iron_ingot', 40]]; expect(derive(item)).toMatchObject(expected); });