BrowscapPHP\BrowscapUpdater::update PHP Method

update() public method

if the local stored information are in the same version as the remote data no actions are taken
public update ( string $remoteFile = IniLoader::PHP_INI )
$remoteFile string The code for the remote file to load
    public function update($remoteFile = IniLoader::PHP_INI)
    {
        $this->getLogger()->debug('started fetching remote file');
        if (null === ($cachedVersion = $this->checkUpdate())) {
            // no newer version available
            return;
        }
        $uri = (new IniLoader())->setRemoteFilename($remoteFile)->getRemoteIniUrl();
        /** @var \Psr\Http\Message\ResponseInterface $response */
        $response = $this->getClient()->get($uri, ['connect_timeout' => $this->connectTimeout]);
        if ($response->getStatusCode() !== 200) {
            throw new FetcherException('an error occured while fetching remote data from URI ' . $uri . ': StatusCode was ' . $response->getStatusCode());
        }
        try {
            $content = $response->getBody()->getContents();
        } catch (\Exception $e) {
            throw new FetcherException('an error occured while fetching remote data', 0, $e);
        }
        if (empty($content)) {
            $error = error_get_last();
            throw FetcherException::httpError($uri, $error['message']);
        }
        $this->getLogger()->debug('finished fetching remote file');
        $converter = new Converter($this->getLogger(), $this->getCache());
        $this->storeContent($converter, $content, $cachedVersion);
    }

Usage Example

    /**
     *
     */
    public function testUpdateOk()
    {
        if (class_exists('\\Browscap\\Browscap')) {
            self::markTestSkipped('if the \\Browscap\\Browscap class is available the browscap.ini file is not updated from a remote ' . 'location');
        }
        $logger = $this->getMockBuilder(\Monolog\Logger::class)->disableOriginalConstructor()->getMock();
        $this->object->setLogger($logger);
        $content = ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Browscap Version

[GJK_Browscap_Version]
Version=5031
Released=Mon, 30 Jun 2014 17:55:58 +0200
Format=ASP
Type=

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties

[DefaultProperties]

Comment=DefaultProperties
Browser=DefaultProperties
Version=0.0
MajorVer=0
MinorVer=0
Platform=unknown
Platform_Version=unknown
Alpha=false
Beta=false
Win16=false
Win32=false
Win64=false
Frames=false
IFrames=false
Tables=false
Cookies=false
BackgroundSounds=false
JavaScript=false
VBScript=false
JavaApplets=false
ActiveXControls=false
isMobileDevice=false
isTablet=false
isSyndicationReader=false
Crawler=false
CssVersion=0
AolVersion=0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask

[Ask]

Parent=DefaultProperties
Comment=Ask
Browser=Ask
Frames=1
IFrames=1
Tables=1
Crawler=1
Version=0.0
MajorVer=0
MinorVer=0
Platform=unknown
Platform_Version=unknown
Alpha=
Beta=
Win16=
Win32=
Win64=
Cookies=
BackgroundSounds=
JavaScript=
VBScript=
JavaApplets=
ActiveXControls=
isMobileDevice=
isTablet=
isSyndicationReader=
CssVersion=0
AolVersion=0

[Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)]

Parent=Ask
Browser=Teoma
Comment=Ask
Version=0.0
MajorVer=0
MinorVer=0
Platform=unknown
Platform_Version=unknown
Alpha=
Beta=
Win16=
Win32=
Win64=
Frames=1
IFrames=1
Tables=1
Cookies=
BackgroundSounds=
JavaScript=
VBScript=
JavaApplets=
ActiveXControls=
isMobileDevice=
isTablet=
isSyndicationReader=
Crawler=1
CssVersion=0
AolVersion=0
';
        $body = $this->getMockBuilder(\GuzzleHttp\Psr7\Stream::class)->disableOriginalConstructor()->setMethods(['getContents'])->getMock();
        $body->expects(self::once())->method('getContents')->will(self::returnValue($content));
        $response = $this->getMockBuilder(\GuzzleHttp\Psr7\Response::class)->disableOriginalConstructor()->setMethods(['getStatusCode', 'getBody'])->getMock();
        $response->expects(self::once())->method('getStatusCode')->will(self::returnValue(200));
        $response->expects(self::once())->method('getBody')->will(self::returnValue($body));
        $client = $this->getMockBuilder(\GuzzleHttp\Client::class)->disableOriginalConstructor()->setMethods(['get'])->getMock();
        $client->expects(self::once())->method('get')->will(self::returnValue($response));
        $this->object->setClient($client);
        $map = [['browscap.time', false, null, null], ['browscap.version', false, null, null]];
        $cache = $this->getMockBuilder(\BrowscapPHP\Cache\BrowscapCache::class)->disableOriginalConstructor()->setMethods(['getItem', 'setItem'])->getMock();
        $cache->expects(self::once())->method('getItem')->will(self::returnValueMap($map));
        $cache->expects(self::exactly(4355))->method('setItem')->will(self::returnValue(false));
        $this->object->setCache($cache);
        self::assertNull($this->object->update());
    }