/** * @param ThemeInterface[] $themes */ private function checkForCircularDependencies(array $themes) { try { foreach ($themes as $theme) { $this->circularDependencyChecker->check($theme); } } catch (CircularDependencyFoundException $exception) { throw new ThemeLoadingFailedException('Circular dependency found.', 0, $exception); } }
function it_throws_an_exception_if_there_is_a_circular_dependency_found(ConfigurationProviderInterface $configurationProvider, ThemeFactoryInterface $themeFactory, HydrationInterface $themeHydrator, CircularDependencyCheckerInterface $circularDependencyChecker, ThemeInterface $firstTheme, ThemeInterface $secondTheme) { $configurationProvider->getConfigurations()->willReturn([['name' => 'first/theme', 'path' => '/first/theme/path', 'parents' => ['second/theme'], 'authors' => [], 'screenshots' => []], ['name' => 'second/theme', 'path' => '/second/theme/path', 'parents' => ['first/theme'], 'authors' => [], 'screenshots' => []]]); $themeFactory->create('first/theme', '/first/theme/path')->willReturn($firstTheme); $themeFactory->create('second/theme', '/second/theme/path')->willReturn($secondTheme); $themeHydrator->hydrate(['name' => 'first/theme', 'path' => '/first/theme/path', 'parents' => [$secondTheme], 'authors' => [], 'screenshots' => []], $firstTheme)->willReturn($firstTheme); $themeHydrator->hydrate(['name' => 'second/theme', 'path' => '/second/theme/path', 'parents' => [$firstTheme], 'authors' => [], 'screenshots' => []], $secondTheme)->willReturn($secondTheme); $circularDependencyChecker->check(Argument::cetera())->willThrow(CircularDependencyFoundException::class); $this->shouldThrow(new ThemeLoadingFailedException('Circular dependency found.'))->during('load'); }