<?php

declare(strict_types=1);

namespace Engelsystem\Test\Unit;

use Engelsystem\Application;
use Engelsystem\Config\Config;
use PHPUnit\Framework\MockObject\MockObject;

abstract class ServiceProviderTest extends TestCase
{
    protected function getApp(array $methods = ['make', 'instance']): Application|MockObject
    {
        return $this->getMockBuilder(Application::class)
            ->onlyMethods($methods)
            ->getMock();
    }

    /**
     * Creates an Application instance with a Config set as 'config'.
     * Also sets up the instance as global Application instance.
     *
     * @param string[] $methods Names of the methods to mock
     */
    protected function createAndSetUpAppWithConfig(array $methods = ['make', 'instance']): Application|MockObject
    {
        $app = $this->getApp($methods);
        $app->instance('config', new Config([]));
        Application::setInstance($app);
        return $app;
    }
}