<?php

namespace App\Tests\Entity;

use App\Entity\Billet;
use App\Entity\BilletBuyer;
use App\Entity\BilletBuyerItem;
use PHPUnit\Framework\TestCase;

class BilletBuyerItemTest extends TestCase
{
    public function testDefaults(): void
    {
        $item = new BilletBuyerItem();

        self::assertNull($item->getId());
        self::assertNull($item->getBilletBuyer());
        self::assertNull($item->getBillet());
        self::assertNull($item->getBilletName());
        self::assertSame(1, $item->getQuantity());
        self::assertSame(0, $item->getUnitPriceHT());
        self::assertSame(0.0, $item->getUnitPriceHTDecimal());
        self::assertSame(0, $item->getLineTotalHT());
        self::assertSame(0.0, $item->getLineTotalHTDecimal());
    }

    public function testSetAndGetBilletBuyer(): void
    {
        $item = new BilletBuyerItem();
        $buyer = new BilletBuyer();
        $result = $item->setBilletBuyer($buyer);

        self::assertSame($buyer, $item->getBilletBuyer());
        self::assertSame($item, $result);
    }

    public function testSetAndGetBillet(): void
    {
        $item = new BilletBuyerItem();
        $billet = new Billet();
        $result = $item->setBillet($billet);

        self::assertSame($billet, $item->getBillet());
        self::assertSame($item, $result);
    }

    public function testSetAndGetQuantity(): void
    {
        $item = new BilletBuyerItem();
        $result = $item->setQuantity(3);

        self::assertSame(3, $item->getQuantity());
        self::assertSame($item, $result);
    }

    public function testSetAndGetUnitPriceHT(): void
    {
        $item = new BilletBuyerItem();
        $result = $item->setUnitPriceHT(1500);

        self::assertSame(1500, $item->getUnitPriceHT());
        self::assertSame(15.0, $item->getUnitPriceHTDecimal());
        self::assertSame($item, $result);
    }

    public function testSetAndGetBilletName(): void
    {
        $item = new BilletBuyerItem();
        $result = $item->setBilletName('Entree VIP');

        self::assertSame('Entree VIP', $item->getBilletName());
        self::assertSame($item, $result);
    }

    public function testLineTotalHT(): void
    {
        $item = new BilletBuyerItem();
        $item->setUnitPriceHT(1500);
        $item->setQuantity(3);

        self::assertSame(4500, $item->getLineTotalHT());
        self::assertSame(45.0, $item->getLineTotalHTDecimal());
    }
}
