UNPKG

@x47base/ch-finance-engine

Version:

This package is an finance and accounting engine specificly made based on the swiss system.

99 lines (75 loc) 4.05 kB
import React from 'react'; import { render, fireEvent, screen } from '@testing-library/react'; import '@testing-library/jest-dom'; import Buchung from '../src/ui/buchung'; import Engine from '../src/models/engine'; jest.mock('../src/models/engine'); describe('Buchung Component', () => { let engine; let task; let correctSolution; beforeEach(() => { engine = new Engine(); engine.accounts = [ { code: 1000, name: 'Warenaufwand', aliases: [] }, { code: 2000, name: 'Verbindlichkeiten L+L', aliases: [] }, { code: 3000, name: 'Vorsteuer 1170', aliases: [] }, ]; Engine.mockImplementation(() => engine); task = { description: "Ein Lieferant stellt die Lieferung von verschiedenen Küchengeräten über CHF 3000 (inkl. 7,7 % Mehrwertsteuer) in Rechnung.", account1: "Warenaufwand", account2: "Verbindlichkeiten L+L", amount: 3000, currency: "CHF" }; correctSolution = [ { account1: "Warenaufwand", account2: "Verbindlichkeiten L+L", amount: 2785.71 }, { account1: "Vorsteuer 1170", account2: "Verbindlichkeiten L+L", amount: 214.29 } ]; }); test('renders task description', () => { render(<Buchung task={task} correctSolution={correctSolution} />); expect(screen.getByText(task.description)).toBeInTheDocument(); }); test('adds and verifies correct buchungen', () => { render(<Buchung task={task} correctSolution={correctSolution} />); // Select account1 fireEvent.change(screen.getAllByPlaceholderText('Enter account name or alias')[0], { target: { value: 'Warenaufwand' } }); fireEvent.click(screen.getByText('Warenaufwand')); // Select account2 fireEvent.change(screen.getAllByPlaceholderText('Enter account name or alias')[1], { target: { value: 'Verbindlichkeiten L+L' } }); fireEvent.click(screen.getByText('Verbindlichkeiten L+L')); // Enter amount fireEvent.change(screen.getByPlaceholderText('Betrag'), { target: { value: '2785.71' } }); // Add buchung fireEvent.click(screen.getByText('Buchung hinzufügen')); // Select account1 fireEvent.change(screen.getAllByPlaceholderText('Enter account name or alias')[0], { target: { value: 'Vorsteuer 1170' } }); fireEvent.click(screen.getByText('Vorsteuer 1170')); // Select account2 fireEvent.change(screen.getAllByPlaceholderText('Enter account name or alias')[1], { target: { value: 'Verbindlichkeiten L+L' } }); fireEvent.click(screen.getByText('Verbindlichkeiten L+L')); // Enter amount fireEvent.change(screen.getByPlaceholderText('Betrag'), { target: { value: '214.29' } }); // Add buchung fireEvent.click(screen.getByText('Buchung hinzufügen')); // Verify feedback expect(screen.getByText('Alle Buchungen sind korrekt.')).toBeInTheDocument(); }); test('detects incorrect buchungen', () => { render(<Buchung task={task} correctSolution={correctSolution} />); // Select account1 fireEvent.change(screen.getAllByPlaceholderText('Enter account name or alias')[0], { target: { value: 'Warenaufwand' } }); fireEvent.click(screen.getByText('Warenaufwand')); // Select account2 fireEvent.change(screen.getAllByPlaceholderText('Enter account name or alias')[1], { target: { value: 'Verbindlichkeiten L+L' } }); fireEvent.click(screen.getByText('Verbindlichkeiten L+L')); // Enter amount fireEvent.change(screen.getByPlaceholderText('Betrag'), { target: { value: '9999' } }); // Add buchung fireEvent.click(screen.getByText('Buchung hinzufügen')); // Verify feedback expect(screen.getByText(/Fehler in Buchung 1/)).toBeInTheDocument(); }); });