onNewVisit($this->makeMockRequest(), $this->makeMockVisitor($isKnown = false), null); $this->assertEquals(0, $value); } public function test_onNewVisit_returnsZeroIfPreviousVisitorLastActionTimeIsZero() { $dim = new VisitorSecondsSinceLast(); $value = $dim->onNewVisit($this->makeMockRequest(), $this->makeMockVisitor($isKnown = true), null); $this->assertEquals(0, $value); } public function test_onNewVisit_returnsTimeInBetweenIfKnownVisit() { $dim = new VisitorSecondsSinceLast(); $currentTime = time(); $lastTime = $currentTime - 100; $value = $dim->onNewVisit($this->makeMockRequest($currentTime), $this->makeMockVisitor($isKnown = true, [], ['visit_first_action_time' => $lastTime]), null); $this->assertEquals(100, $value); } /** * @return Request */ private function makeMockRequest($currentTime = null) { $mockBuilder = $this->getMockBuilder(Request::class)->disableOriginalConstructor(); if ($currentTime) { $mockBuilder->onlyMethods(['getCurrentTimestamp']); } $mock = $mockBuilder->getMock(); if ($currentTime) { $mock->method('getCurrentTimestamp')->willReturn($currentTime); } /** @var Request $mock */ $result = $mock; return $result; } private function makeMockVisitor($isKnown, $visitProps = [], $previousVisitProps = []) { $visitor = new Visitor(new VisitProperties($visitProps), $isKnown, new VisitProperties($previousVisitProps)); return $visitor; } }