<?php declare(strict_types=1);

namespace App\Tests\Entity;

use App\Entity\FoodOrder;
use App\Entity\FoodVendor;
use App\Entity\MenuItem;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Uid\Ulid;

final class FoodVendorTest extends TestCase
{
    public function testFoodVendor(): void
    {
        $vendor = new FoodVendor;
        $vendor->setName('Test');
        $this->assertEquals('Test', $vendor->getName());
        $this->assertInstanceOf(Ulid::class, $vendor->getId());
        $this->assertEmpty($vendor->getPhone());
        $vendor->setPhone('1234567890');
        $this->assertEquals('1234567890', $vendor->getPhone());

        $this->assertCount(0, $vendor->getFoodOrders());
        $order1 = new FoodOrder;
        $vendor->addFoodOrder($order1);
        $vendor->addFoodOrder($order1);
        $this->assertCount(1, $vendor->getFoodOrders());
        $this->assertSame($vendor, $order1->getFoodVendor());
        $vendor->removeFoodOrder($order1);
        $this->assertCount(0, $vendor->getFoodOrders());
        $this->assertNull($order1->getFoodVendor());

    }

    public function testMenuItem(): void
    {
        $vendor = new FoodVendor;
        $menuItem1 = new MenuItem;
        $menuItem2 = new MenuItem;
        $this->assertCount(0, $vendor->getMenuItems());
        $vendor->addMenuItem($menuItem1);
        $vendor->addMenuItem($menuItem1);
        $this->assertCount(1, $vendor->getMenuItems());
        $vendor->removeMenuItem($menuItem1);
        $this->assertCount(0, $vendor->getMenuItems());
        $this->assertNull($menuItem1->getFoodVendor());
        $vendor->addMenuItem($menuItem1);
        $menuItem2->delete();
        $vendor->addMenuItem($menuItem2);
        $this->assertCount(1, $vendor->getMenuItems());
        $this->assertCount(2, $vendor->getMenuItems(true));
    }

    public function testRemoveForeignMenuItem(): void
    {
        $vendor1 = new FoodVendor;
        $vendor2 = new FoodVendor;
        $item1 = new MenuItem;

        $vendor1->addMenuItem($item1);
        $this->assertCount(1, $vendor1->getMenuItems());
        $vendor2->removeMenuItem($item1);
        $this->assertCount(1, $vendor1->getMenuItems());
        $this->assertSame($vendor1, $item1->getFoodVendor());
    }
}