/** @test */
 public function test_it()
 {
     $fooA = new \stdClass();
     $fooB = new \stdClass();
     $barA = new \stdClass();
     $dip = new DestinationIdentityMap();
     $this->assertFalse($dip->has('foo', 'a'));
     $this->assertFalse($dip->has('bar', 'a'));
     $dip->set('foo', 'a', $fooA);
     $this->assertTrue($dip->has('foo', 'a'));
     $this->assertFalse($dip->has('bar', 'a'));
     $this->assertSame($fooA, $dip->get('foo', 'a'));
     try {
         $dip->get('bar', 'a');
     } catch (\RuntimeException $e) {
         $this->assertInstanceOf('\\RuntimeException', $e);
     }
     $dip->set('bar', 'a', $barA);
     $this->assertTrue($dip->has('foo', 'a'));
     $this->assertTrue($dip->has('bar', 'a'));
     $this->assertSame($fooA, $dip->get('foo', 'a'));
     $this->assertSame($barA, $dip->get('bar', 'a'));
     $dip->set('foo', 'b', $fooB);
     $this->assertSame($fooB, $dip->get('foo', 'b'));
     $this->assertSame($fooA, $dip->get('foo', 'a'));
 }
 /** @test */
 public function it_loads_one_type_several_relations_from_the_destination_identity_map()
 {
     $id1 = 'ups';
     $id2 = 'yep';
     $data1 = new \stdClass();
     $data2 = new \ArrayObject();
     $destinationIdentityMap = new DestinationIdentityMap();
     $destinationIdentityMap->set('foo1', $id1, $data1);
     $destinationIdentityMap->set('foo2', $id2, $data2);
     $relationTypeProcessorObtainer = new MockeryCallableMock();
     $relationLoader = new CallableRelationLoader();
     $loader = new RelationsToLoadLoader($relationTypeProcessorObtainer, $destinationIdentityMap, $relationLoader);
     $oneRelationTypeProcessor = new OneRelationTypeProcessor();
     $relationTypeProcessorObtainer->should()->with('one')->andReturn($oneRelationTypeProcessor);
     $loaderInfo1 = new MockeryCallableMock();
     $loaderInfo2 = new MockeryCallableMock();
     $destinationDef1 = new DestinationMetadata('foo1', $loaderInfo1);
     $destinationDef2 = new DestinationMetadata('foo2', $loaderInfo2);
     $relationDef1 = new RelationMetadata('bar', 'one', $destinationDef1);
     $relationDef2 = new RelationMetadata('bar', 'one', $destinationDef2);
     $relationsToLoad = [new RelationToLoad($relationDef1, new IdOneTypeNotLoadedRelation($id1)), new RelationToLoad($relationDef2, new IdOneTypeNotLoadedRelation($id2))];
     $result = $loader($relationsToLoad);
     $expected = [new LoadedRelation($relationsToLoad[0], $data1), new LoadedRelation($relationsToLoad[1], $data2)];
     $this->assertEquals($expected, $result);
 }