public function testInitializeFromAggregateSnapshot()
 {
     $aggregate = new StubAggregate("stubId");
     $aggregate->doSomething();
     $aggregate->commitEvents();
     $snapshotMessage = new GenericDomainEventMessage($aggregate->getIdentifier(), $aggregate->getVersion(), $aggregate);
     $factory = new GenericAggregateFactory(get_class($aggregate));
     $this->assertEquals("StubAggregate", $factory->getTypeIdentifier());
     $this->assertSame($aggregate, $factory->createAggregate($aggregate->getIdentifier(), $snapshotMessage));
 }
 public function testLockFailsOnConcurrentModification()
 {
     $identifier = Uuid::uuid1()->toString();
     $aggregate1 = new StubAggregate($identifier);
     $aggregate2 = new StubAggregate($identifier);
     $manager = new OptimisticLockManager();
     $manager->obtainLock($aggregate1->getIdentifier());
     $manager->obtainLock($aggregate2->getIdentifier());
     $aggregate1->doSomething();
     $aggregate2->doSomething();
     $this->assertTrue($manager->validateLock($aggregate1));
     $this->assertFalse($manager->validateLock($aggregate2));
 }