ClientTest   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 109
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 10
Bugs 4 Features 0
Metric Value
wmc 6
c 10
b 4
f 0
lcom 1
cbo 2
dl 0
loc 109
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A testInstance() 0 5 1
A testInvalidInstance() 0 5 1
A testCallFailed() 0 13 1
A testParserNotFound() 0 10 1
A testCallUrls() 0 8 1
A provideCalls() 0 57 1
1
<?php
2
namespace Thunder\SimilarWebApi\Tests;
3
4
use Thunder\SimilarWebApi\Client;
5
use Thunder\SimilarWebApi\AbstractRequest;
6
use Thunder\SimilarWebApi\Request\Traffic;
7
8
/**
9
 * @author Tomasz Kowalczyk <[email protected]>
10
 */
11
class ClientTest extends \PHPUnit_Framework_TestCase
12
    {
13
    public function testInstance()
14
        {
15
        $instance = new Client(sha1('user_key'), 'XML');
16
        $this->assertInstanceOf('Thunder\SimilarWebApi\Client', $instance);
17
        }
18
19
    public function testInvalidInstance()
20
        {
21
        $this->setExpectedException('InvalidArgumentException');
22
        new Client(sha1('user_key'), 'INVALID');
23
        }
24
25
    public function testCallFailed()
26
        {
27
        $this->setExpectedException('RuntimeException');
28
        /** @var $clientMock \PHPUnit_Framework_MockObject_MockObject|Client */
29
        $request = new Traffic('google.com');
30
        $clientMock = $this->getMock('Thunder\\SimilarWebApi\\Client', array('executeCall'), array(sha1('user_key'), 'JSON'));
31
        $clientMock
32
            ->expects($this->at(0))
33
            ->method('executeCall')
34
            ->with($request->getCallUrl('JSON', sha1('user_key')))
35
            ->will($this->returnValue(''));
36
        $clientMock->getResponse($request);
37
        }
38
39
    public function testParserNotFound()
40
        {
41
        $this->setExpectedException('RuntimeException');
42
        $client = new Client('token', 'JSON');
43
        $reflectionObject = new \ReflectionObject($client);
44
        $property = $reflectionObject->getProperty('format');
45
        $property->setAccessible(true);
46
        $property->setValue($client, 'INVALID');
47
        $client->getResponse(new Traffic('google.com'));
48
        }
49
50
    /**
51
     * @dataProvider provideCalls
52
     */
53
    public function testCallUrls($call, array $args, $expected)
54
        {
55
        $class = 'Thunder\\SimilarWebApi\\Request\\'.$call;
56
        /** @var $request AbstractRequest */
57
        $reflectionClass = new \ReflectionClass($class);
58
        $request = $reflectionClass->newInstanceArgs($args);
59
        $this->assertEquals($expected, $request->getCallUrl('JSON', 'api_token'));
60
        }
61
62
    public function provideCalls()
63
        {
64
        $page = 1;
65
        $app = 'app.id';
66
        $domain = 'example.com';
67
        $api = 'http://api.similarweb.com/Site/'.$domain;
68
        $mobileApi = 'http://api.similarweb.com/Mobile/0/'.$app;
69
        $formatToken = 'Format=JSON&UserKey=api_token';
70
        $startEndMd = 'start=08-2014&end=09-2014&md=true';
71
        $args = $formatToken.'&'.$startEndMd.'&page='.$page;
72
        $argsNoPage = $formatToken.'&gr=monthly&'.$startEndMd;
73
74
        $domainArgs = array($domain);
75
        $proPeriodArgs = array($domain, 'monthly', '08-2014', '09-2014', true, $page);
76
        $proPeriodArgsNoPage = array($domain, 'monthly', '08-2014', '09-2014', true);
77
        $proNoPeriodArgs = array($domain, '08-2014', '09-2014', true, $page);
78
79
        $items = array(
80
            array('GlobalRank', $domainArgs, $api.'/globalRank?'.$formatToken),
81
            array('SimilarSites', $domainArgs, $api.'/similarSites?'.$formatToken),
82
            array('Tagging', $domainArgs, $api.'/tags?'.$formatToken),
83
            array('V0WebsiteCategorization', $domainArgs, $api.'/category?'.$formatToken),
84
            array('WebsiteCategoryRank', $domainArgs, $api.'/categoryRank?'.$formatToken),
85
            array('WebsiteCountryRank', $domainArgs, $api.'/countryRank?'.$formatToken),
86
87
            array('Traffic', $domainArgs, $api.'/v1/traffic?'.$formatToken),
88
            array('Engagement', $domainArgs, $api.'/v1/engagement?'.$formatToken),
89
            array('Keywords', $domainArgs, $api.'/v1/searchintelligence?'.$formatToken),
90
            array('SocialReferrals', $domainArgs, $api.'/v1/SocialReferringSites?'.$formatToken),
91
92
            array('AdultWebsites', $domainArgs, $api.'/v2/Category?'.$formatToken),
93
            array('AlsoVisited', $domainArgs, $api.'/v2/AlsoVisited?'.$formatToken),
94
            array('CategoryRank', $domainArgs, $api.'/v2/CategoryRank?'.$formatToken),
95
            array('Destinations', $domainArgs, $api.'/v2/leadingdestinationsites?'.$formatToken),
96
            array('EstimatedVisitors', $domainArgs, $api.'/v2/EstimatedTraffic?'.$formatToken),
97
            array('Referrals', $domainArgs, $api.'/v2/leadingreferringsites?'.$formatToken),
98
            array('SimilarWebsites', $domainArgs, $api.'/v2/SimilarSites?'.$formatToken),
99
            array('WebsiteCategorization', $domainArgs, $api.'/v2/Category?'.$formatToken),
100
            array('WebsiteTags', $domainArgs, $api.'/v2/Tags?'.$formatToken),
101
102
            array('TrafficPro', $proPeriodArgs, $api.'/v1/visits?'.$argsNoPage),
103
            array('EngagementPageViews', $proPeriodArgsNoPage, $api.'/v1/pageviews?'.$argsNoPage),
104
            array('EngagementVisitDuration', $proPeriodArgsNoPage, $api.'/v1/visitduration?'.$argsNoPage),
105
            array('EngagementBounceRate', $proPeriodArgsNoPage, $api.'/v1/bouncerate?'.$argsNoPage),
106
            array('KeywordsOrganicSearch', $proNoPeriodArgs, $api.'/v1/orgsearch?'.$args),
107
            array('KeywordsPaidSearch', $proNoPeriodArgs, $api.'/v1/paidsearch?'.$args),
108
            array('ReferralsPro', $proNoPeriodArgs, $api.'/v1/referrals?'.$args),
109
            array('KeywordCompetitorsOrganic', $proNoPeriodArgs, $api.'/v1/orgkwcompetitor?'.$args),
110
            array('KeywordCompetitorsPaid', $proNoPeriodArgs, $api.'/v1/paidkwcompetitor?'.$args),
111
112
            array('MobileApp', array(0, $app), $mobileApi.'/v1/GetAppDetails?'.$formatToken),
113
            array('MobileAppInstalls', array(0, $app), $mobileApi.'/v1/GetAppInstalls?'.$formatToken),
114
            array('MobileRelatedApps', array(0, $domain), 'http://api.similarweb.com/Mobile/0/'.$domain.'/v1/GetRelatedSiteApps?'.$formatToken),
115
            );
116
117
        return $items;
118
        }
119
    }
120