/** * {@inheritdoc} */ public function detect(TokenPoolInterface $tokenPool) { $fingerprint = $this->fingerprintGenerator->generate($tokenPool); $device = $this->deviceCache->get($fingerprint); if (false !== $device) { return $device; } $device = new CacheDevice(parent::detect($tokenPool), $fingerprint); $this->deviceCache->add($device); return $device; }
function it_detect_device_from_cache(VisitorManagerInterface $visitorManager, TokenPoolInterface $tokenPool, FingerprintGeneratorInterface $fingerprintGenerator, CollatorInterface $collator, DeviceCacheInterface $deviceCache) { $this->beConstructedWith($visitorManager, $collator); $visitorManager->visit(Argument::exact($tokenPool->getWrappedObject()), Argument::exact($collator->getWrappedObject()))->shouldNotBeCalled(1); $fingerprint = sha1(time()); $fingerprintGenerator->generate(Argument::exact($tokenPool->getWrappedObject()))->shouldBeCalledTimes(1)->willReturn($fingerprint); $this->setFingerprintGenerator($fingerprintGenerator); $deviceCache->get(Argument::exact($fingerprint))->shouldBeCalledTimes(1)->willReturn(new CacheDevice(new Device(array()), $fingerprint)); $deviceCache->add(Argument::any())->shouldNotBeCalled(); $this->setDeviceCache($deviceCache); $collator->removeAll()->shouldNotBeCalled(0); $collator->getAll()->shouldNotBeCalled(0); $this->detect($tokenPool)->shouldReturnAnInstanceOf('DeviceDetectorIO\\DeviceDetector\\Device\\CacheDevice'); }