import pytest
from pydantic import ValidationError

from setra_client.models import Batch, Voucher, Transaction


def test_batch(batch_fixture):
    assert Batch(**batch_fixture)


def test_voucher(voucher_fixture):
    assert Voucher(**voucher_fixture)


def test_voucher_has_transactions(voucher_fixture):
    voucher = Voucher(**voucher_fixture)
    assert len(voucher.transactions) == 2
    assert voucher.transactions.__getitem__(0).amount == 1
    assert voucher.transactions.__getitem__(1).amount == 2


def test_transaction(trans_fixture):
    assert Transaction(**trans_fixture)


def test_transaction_fail(trans_fail_fixture):
    # Check missing required field fails
    with pytest.raises(ValidationError):
        Transaction(**trans_fail_fixture)


def test_batch_with_voucher(batch_with_voucher_fixture):
    assert Batch(**batch_with_voucher_fixture)


def test_batch_fail(batch_fail_fixture):
    # Using wrong data format, should fail:
    with pytest.raises(ValidationError):
        Batch(**batch_fail_fixture)