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
|
|
|
|