/**
  * @inheritdoc
  */
 public function process(UnitOfWork $uow)
 {
     $co = CommitOrderCalculator::getCommitOrderFromMetadata($this->metadataFactory);
     $set = self::prepareCommitOrderArray($co);
     $this->executeInserts($uow, $set);
     $this->executeUpdateDeletes($uow, $set);
 }
 /**
  * @test
  */
 public function verify_commit_ordering()
 {
     $class1 = new ClassMetadata(__NAMESPACE__ . '\\NodeClass1');
     $class2 = new ClassMetadata(__NAMESPACE__ . '\\NodeClass2');
     $class3 = new ClassMetadata(__NAMESPACE__ . '\\NodeClass3');
     $class4 = new ClassMetadata(__NAMESPACE__ . '\\NodeClass4');
     $class5 = new ClassMetadata(__NAMESPACE__ . '\\NodeClass5');
     $calc = new CommitOrderCalculator();
     $calc->addClass($class1);
     $calc->addClass($class2);
     $calc->addClass($class3);
     $calc->addClass($class4);
     $calc->addClass($class5);
     $calc->addDependency($class1, $class2);
     $calc->addDependency($class2, $class3);
     $calc->addDependency($class3, $class4);
     $calc->addDependency($class5, $class1);
     $sorted = $calc->getCommitOrder();
     // There is only 1 valid ordering for this constellation
     $expected = array_map(function (ClassMetadata $md) {
         return $md->name;
     }, [$class5, $class1, $class2, $class3, $class4]);
     $this->assertSame($expected, $sorted);
 }