// @ts-check const { test, expect } = require('@playwright/test') /* * Fix #129: In „Depotbuchung erfassen“ hängen bei Kauf und Verkauf Stück, Kurs * und Betrag zusammen – Betrag = Stück × Kurs. Sobald zwei Felder eingetragen * sind, rechnet die Maske das dritte aus. */ const BENUTZER = process.env.E2E_USER || 'e2e' const PASSWORT = process.env.E2E_PASSWORD || 'e2e-testpasswort' async function anmelden(page) { await page.goto('/login') if (page.url().includes('/einrichtung')) { throw new Error( 'Instanz ist noch nicht eingerichtet: ' + 'docker compose exec -u www-data php php scripts/e2e-benutzer.php' ) } await page.fill('#benutzername', BENUTZER) await page.fill('#passwort', PASSWORT) await page.click('button[type="submit"]') await expect(page).toHaveURL(/\/$/) } test.describe('Depotbuchung erfassen: Stück, Kurs und Betrag', () => { test.beforeEach(async ({ page }) => { await anmelden(page) await page.goto('/wertpapiere/buchungen/neu') }) test('Aus Stück und Kurs ergibt sich der Betrag', async ({ page }) => { await page.selectOption('#vorgang', 'kauf') await page.fill('#stueck', '12') await page.fill('#kurs', '45,67') await expect(page.locator('#betrag')).toHaveValue('548,04') await expect(page.locator('#betrag')).toHaveClass(/berechnet/) // Der ausgerechnete Betrag zieht nach, wenn sich ein Feld ändert. await page.fill('#stueck', '10') await expect(page.locator('#betrag')).toHaveValue('456,70') // Wird ein Feld geleert, steht hinter dem Betrag nichts mehr. await page.fill('#kurs', '') await expect(page.locator('#betrag')).toHaveValue('') }) test('Aus Betrag und Stück ergibt sich der Kurs', async ({ page }) => { await page.selectOption('#vorgang', 'verkauf') await page.fill('#betrag', '1.000,00') await page.fill('#stueck', '8') await expect(page.locator('#kurs')).toHaveValue('125') }) test('Aus Betrag und Kurs ergibt sich die Stückzahl', async ({ page }) => { await page.selectOption('#vorgang', 'kauf') await page.fill('#kurs', '3') await page.fill('#betrag', '100') await expect(page.locator('#stueck')).toHaveValue('33,333333') // Selbst eingetragen gilt der Wert als fest und wird nicht mehr überschrieben. await page.fill('#stueck', '30') await page.fill('#kurs', '4') await expect(page.locator('#stueck')).toHaveValue('30') await expect(page.locator('#betrag')).toHaveValue('100') }) test('Bei einer Dividende wird nichts gerechnet', async ({ page }) => { await page.selectOption('#vorgang', 'dividende') await page.fill('#stueck', '12') await page.fill('#kurs', '2') await expect(page.locator('#betrag')).toHaveValue('') // Wechselt der Vorgang auf Kauf, rechnet die Maske nach. await page.selectOption('#vorgang', 'kauf') await expect(page.locator('#betrag')).toHaveValue('24,00') }) })