/**
  * @test
  * @dataProvider providePersistence
  * @param Persistence $persistence
  */
 public function it_should_commit_and_fetch_events(Persistence $persistence)
 {
     $commitId = CommitId::generate();
     $streamContract = Contract::with('My.Contract');
     $streamId = OrderId::generate();
     $eventContract = Contract::with("My.SomethingHasHappened");
     $eventEnvelope1 = EventEnvelope::wrap(EventId::generate(), $eventContract, "My payload1");
     $eventEnvelope2 = EventEnvelope::wrap(EventId::generate(), $eventContract, "My payload2");
     $persistence->commit($commitId, $streamContract, $streamId, $expectedStreamVersion = 0, [$eventEnvelope1, $eventEnvelope2]);
     $persistedEventEnvelopes = $persistence->fetch($streamContract, $streamId);
     $this->assertCount(2, $persistedEventEnvelopes);
     $this->assertTrue($persistedEventEnvelopes[0]->equals($eventEnvelope1));
     $this->assertTrue($persistedEventEnvelopes[1]->equals($eventEnvelope2));
 }
 /**
  * @param Persistence $persistence
  * @param Contract $streamContract
  * @param Identifier $streamId
  * @return EventStream
  */
 public static function open(Persistence $persistence, Contract $streamContract, Identifier $streamId)
 {
     $eventStream = new EventStream($persistence, $streamContract, $streamId);
     $eventStream->committedEventEnvelopes = $persistence->fetch($streamContract, $streamId);
     return $eventStream;
 }