. */ namespace SP\Tests; use Faker\Factory; use Faker\Generator; use PHPUnit\Framework\TestCase; use SP\Core\Application; use SP\Core\Context\ContextInterface; use SP\Core\Context\StatelessContext; use SP\Core\Events\EventDispatcherInterface; use SP\DataModel\ProfileData; use SP\Domain\Config\Ports\ConfigInterface; use SP\Domain\User\Services\UserLoginResponse; use SP\Tests\Generators\ConfigDataGenerator; /** * A class to test using a mocked Dependency Injection Container */ abstract class UnitaryTestCase extends TestCase { use PHPUnitHelper; protected static Generator $faker; protected ConfigInterface $config; protected Application $application; protected ContextInterface $context; public static function setUpBeforeClass(): void { self::$faker = Factory::create(); parent::setUpBeforeClass(); } public static function getRandomNumbers(int $count): array { return array_map(static fn() => self::$faker->randomNumber(), range(0, $count - 1)); } /** * @throws \SP\Core\Context\ContextException * @throws \PHPUnit\Framework\MockObject\Exception */ protected function setUp(): void { $this->application = $this->mockApplication(); $this->config = $this->application->getConfig(); parent::setUp(); } /** * @return \SP\Core\Application * @throws \SP\Core\Context\ContextException|\PHPUnit\Framework\MockObject\Exception */ private function mockApplication(): Application { $userLogin = new UserLoginResponse(); $userLogin ->setLogin(self::$faker->userName) ->setName(self::$faker->userName) ->setId(self::$faker->randomNumber(2)) ->setUserGroupId(self::$faker->randomNumber(2)); $this->context = new StatelessContext(); $this->context->initialize(); $this->context->setUserData($userLogin); $this->context->setUserProfile(new ProfileData()); $configData = ConfigDataGenerator::factory()->buildConfigData(); $config = $this->createStub(ConfigInterface::class); $config->method('getConfigData')->willReturn($configData); return new Application( $config, $this->createStub(EventDispatcherInterface::class), $this->context ); } }