import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

import java.util.List;
import org.junit.jupiter.api.Test;

class PayableTest {

    @Test
    void employeeOwesItsMonthlyPay() {
        Payable p = new HourlyEmployee("bob", 1_250, 80);
        assertEquals(100_000, p.amountDue());
    }

    @Test
    void defaultMethodFormatsAnyPayable() {
        assertEquals("S/ 450.05", new Invoice("F1", 45_005).formattedAmount());
        assertEquals("S/ 3200.00", new SalariedEmployee("alice", 320_000).formattedAmount());
    }

    @Test
    void totalAddsUnrelatedClasses() {
        List<Payable> bills = List.of(new Invoice("F1", 45_000), new SalariedEmployee("alice", 320_000));
        assertEquals(365_000, Payable.total(bills));
    }

    @Test
    void invoiceRejectsNonPositiveAmount() {
        assertThrows(IllegalArgumentException.class, () -> new Invoice("F1", 0));
    }
}
