syncDateHelper = $this->getMockBuilder(SyncDateHelper::class) ->disableOriginalConstructor() ->onlyMethods(['getLastSyncDateForObject']) ->getMock(); } public function testSpecifiedFromDateTimeIsReturned(): void { $syncFromDateTime = new \DateTimeImmutable('2018-10-08 00:00:00'); $this->syncDateHelper->setSyncDateTimes($syncFromDateTime); Assert::assertEquals($syncFromDateTime, $this->syncDateHelper->getSyncFromDateTime('Test', 'Object')); } public function testLastSyncDateForIntegrationSyncObjectIsReturned(): void { $objectLastSyncDate = new \DateTimeImmutable('2018-10-08 00:00:00'); $this->syncDateHelper->method('getLastSyncDateForObject') ->willReturn($objectLastSyncDate); Assert::assertEquals($objectLastSyncDate, $this->syncDateHelper->getSyncFromDateTime('Test', 'Object')); } public function testSyncToDateTimeIsReturnedIfSpecified(): void { $syncToDateTime = new \DateTimeImmutable('2018-10-08 00:00:00'); $this->syncDateHelper->setSyncDateTimes(null, $syncToDateTime); Assert::assertEquals($syncToDateTime, $this->syncDateHelper->getSyncToDateTime()); } public function testSyncDateTimeIsReturnedForSyncToDateTimeIfNotSpecified(): void { $this->syncDateHelper->setSyncDateTimes(); Assert::assertInstanceOf(\DateTimeImmutable::class, $this->syncDateHelper->getSyncToDateTime()); } public function testThatSetInternalSyncStartDateTimeMethodUsesSyncToDateValueIfItIsEarlier(): void { // Although $fiveSecondsBefore value is expected to be in UTC timezone let's use another timezone // to check how the method handles such cases. $fiveSecondsBefore = new \DateTime('-5 seconds', new \DateTimeZone('Etc/GMT-5')); $this->syncDateHelper->setSyncDateTimes(null, $fiveSecondsBefore); $this->syncDateHelper->setInternalSyncStartDateTime(); $internalSyncStartDateTime = $this->syncDateHelper->getInternalSyncStartDateTime(); Assert::assertSame($fiveSecondsBefore->getTimestamp(), $internalSyncStartDateTime->getTimestamp()); } public function testThatSetInternalSyncStartDateTimeMethodUsesNowIfItIsEarlier(): void { // Although $fiveSecondsAfter value is expected to be in UTC timezone let's use another timezone // to check how the method handles such cases. $fiveSecondsAfter = new \DateTime('+5 seconds', new \DateTimeZone('Etc/GMT+5')); $this->syncDateHelper->setSyncDateTimes(null, $fiveSecondsAfter); $this->syncDateHelper->setInternalSyncStartDateTime(); $now = new \DateTime('now', new \DateTimeZone('UTC')); $internalSyncStartDateTime = $this->syncDateHelper->getInternalSyncStartDateTime(); $difference = $internalSyncStartDateTime->getTimestamp() - $now->getTimestamp(); // Add a 1 second buffer in case there is some delay Assert::assertTrue((1 >= $difference) && (-1 < $difference)); } }