public function testCanResolveAFixtureSet()
{
$unresolvedFixtureProphecy = $this->prophesize(FixtureInterface::class);
$unresolvedFixtureProphecy->getId()->willReturn('Nelmio\\Entity\\User#user1');
/** @var FixtureInterface $unresolvedFixture */
$unresolvedFixture = $unresolvedFixtureProphecy->reveal();
$resolvedFixtureProphecy = $this->prophesize(FixtureInterface::class);
$resolvedFixtureProphecy->getId()->willReturn('Nelmio\\Entity\\User#user1');
/** @var FixtureInterface $resolvedFixture */
$resolvedFixture = $resolvedFixtureProphecy->reveal();
$loadedParameters = new ParameterBag(['foo' => 'bar']);
$injectedParameters = new ParameterBag(['fou' => 'baz']);
$unresolvedFixtures = (new FixtureBag())->with($unresolvedFixture);
$injectedObjects = new ObjectBag(['std' => new \stdClass()]);
$set = new FixtureSet($loadedParameters, $injectedParameters, $unresolvedFixtures, $injectedObjects);
$resolvedParameters = new ParameterBag(['foo' => 'bar', 'fou' => 'baz']);
$parametersResolverProphecy = $this->prophesize(ParameterBagResolverInterface::class);
$parametersResolverProphecy->resolve($loadedParameters, $injectedParameters)->willReturn($resolvedParameters);
/** @var ParameterBagResolverInterface $parametersResolver */
$parametersResolver = $parametersResolverProphecy->reveal();
$resolvedFixtures = (new FixtureBag())->with($resolvedFixture);
$fixtureResolverProphecy = $this->prophesize(FixtureBagResolverInterface::class);
$fixtureResolverProphecy->resolve($unresolvedFixtures)->willReturn($resolvedFixtures);
/** @var FixtureBagResolverInterface $fixtureResolver */
$fixtureResolver = $fixtureResolverProphecy->reveal();
$expected = new ResolvedFixtureSet($resolvedParameters, $resolvedFixtures, $injectedObjects);
$resolver = new SimpleFixtureSetResolver($parametersResolver, $fixtureResolver);
$actual = $resolver->resolve($set);
$this->assertEquals($expected, $actual);
$parametersResolverProphecy->resolve(Argument::cetera())->shouldHaveBeenCalledTimes(1);
$fixtureResolverProphecy->resolve(Argument::any())->shouldHaveBeenCalledTimes(1);
}