. */ namespace SP\Tests; use DG\BypassFinals; use Faker\Factory; use Faker\Generator; use PHPUnit\Framework\TestCase; use SP\Core\Application; use SP\Core\Context\StatelessContext; use SP\Core\Events\EventDispatcher; use SP\Domain\Config\Services\ConfigBackupService; use SP\Domain\Config\Services\ConfigFileService; use SP\Domain\User\Services\UserLoginResponse; use SP\Infrastructure\File\FileCache; use SP\Infrastructure\File\XmlHandler; /** * A class to test using a mocked Dependency Injection Container */ abstract class UnitaryTestCase extends TestCase { protected static Generator $faker; protected ConfigFileService $config; protected Application $application; public static function setUpBeforeClass(): void { BypassFinals::enable(); BypassFinals::setWhitelist([APP_ROOT.DIRECTORY_SEPARATOR.'lib'.DIRECTORY_SEPARATOR.'*']); self::$faker = Factory::create(); parent::setUpBeforeClass(); } /** * @throws \SP\Core\Exceptions\ConfigException * @throws \SP\Core\Context\ContextException */ protected function setUp(): void { $this->application = $this->mockApplication(); $this->config = $this->application->getConfig(); parent::setUp(); } /** * @throws \SP\Core\Exceptions\ConfigException * @throws \SP\Core\Context\ContextException */ private function mockApplication(): Application { $userLogin = new UserLoginResponse(); $userLogin->setLogin(self::$faker->userName); $context = new StatelessContext(); $context->initialize(); $context->setUserData($userLogin); $config = new ConfigFileService( $this->createStub(XmlHandler::class), $this->createStub(FileCache::class), $context, $this->createStub(ConfigBackupService::class) ); return new Application($config, $this->createStub(EventDispatcher::class), $context); } }