autometal-piwik 0.6.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (213) hide show
  1. data/.gitignore +8 -0
  2. data/.travis.yml +10 -0
  3. data/Gemfile +4 -0
  4. data/License.txt +22 -0
  5. data/README.md +80 -76
  6. data/Rakefile +1 -33
  7. data/autometal-piwik.gemspec +19 -54
  8. data/bin/piwik-console +31 -0
  9. data/lib/piwik.rb +17 -5
  10. data/lib/piwik/actions.rb +59 -0
  11. data/lib/piwik/annotations.rb +41 -0
  12. data/lib/piwik/api.rb +21 -0
  13. data/lib/piwik/api_module.rb +97 -0
  14. data/lib/piwik/api_response.rb +6 -0
  15. data/lib/piwik/api_scope.rb +32 -0
  16. data/lib/piwik/base.rb +156 -69
  17. data/lib/piwik/custom_variables.rb +8 -0
  18. data/lib/piwik/data_methods.rb +54 -0
  19. data/lib/piwik/example_api.rb +15 -0
  20. data/lib/piwik/goals.rb +40 -0
  21. data/lib/piwik/image_graph.rb +7 -0
  22. data/lib/piwik/languages_manager.rb +13 -0
  23. data/lib/piwik/live.rb +8 -0
  24. data/lib/piwik/metadata_api.rb +21 -0
  25. data/lib/piwik/mobile_messaging.rb +16 -0
  26. data/lib/piwik/multi_sites.rb +8 -0
  27. data/lib/piwik/pdf_reports.rb +12 -0
  28. data/lib/piwik/provider.rb +7 -0
  29. data/lib/piwik/referers.rb +62 -0
  30. data/lib/piwik/seo.rb +7 -0
  31. data/lib/piwik/site.rb +50 -250
  32. data/lib/piwik/sites_manager.rb +70 -0
  33. data/lib/piwik/transitions.rb +28 -0
  34. data/lib/piwik/typecast.rb +19 -0
  35. data/lib/piwik/user.rb +7 -126
  36. data/lib/piwik/user_country.rb +12 -0
  37. data/lib/piwik/user_settings.rb +16 -0
  38. data/lib/piwik/users_manager.rb +52 -0
  39. data/lib/piwik/version.rb +3 -0
  40. data/lib/piwik/visit_frequency.rb +7 -0
  41. data/lib/piwik/visit_time.rb +9 -0
  42. data/lib/piwik/visitor_interest.rb +10 -0
  43. data/lib/piwik/visits_summary.rb +53 -0
  44. data/lib/string.rb +11 -0
  45. data/spec/actions_spec.rb +19 -0
  46. data/spec/api_spec.rb +12 -0
  47. data/spec/custom_variables_spec.rb +11 -0
  48. data/spec/files/API.get.xml +28 -0
  49. data/spec/files/API.getDefaultMetricTranslations.xml +39 -0
  50. data/spec/files/API.getDefaultMetrics.xml +8 -0
  51. data/spec/files/API.getDefaultMetricsDocumentation.xml +15 -0
  52. data/spec/files/API.getDefaultProcessedMetrics.xml +9 -0
  53. data/spec/files/API.getHeaderLogoUrl.xml +2 -0
  54. data/spec/files/API.getLogoUrl.xml +2 -0
  55. data/spec/files/API.getMetadata.xml +42 -0
  56. data/spec/files/API.getPiwikVersion.xml +2 -0
  57. data/spec/files/API.getProcessedReport.xml +1227 -0
  58. data/spec/files/API.getReportMetadata.xml +1347 -0
  59. data/spec/files/API.getRowEvolution.xml +4 -0
  60. data/spec/files/API.getSegmentsMetadata.xml +365 -0
  61. data/spec/files/API.getSettings.xml +7 -0
  62. data/spec/files/Actions.GetPageUrl.xml +20 -0
  63. data/spec/files/Actions.get.xml +11 -0
  64. data/spec/files/Actions.getDownloads.xml +19 -0
  65. data/spec/files/Actions.getEntryPageTitles.xml +88 -0
  66. data/spec/files/Actions.getEntryPageUrls.xml +93 -0
  67. data/spec/files/Actions.getExitPageTitles.xml +88 -0
  68. data/spec/files/Actions.getExitPageUrls.xml +93 -0
  69. data/spec/files/Actions.getOutlink.xml +12 -0
  70. data/spec/files/Actions.getOutlinks.xml +100 -0
  71. data/spec/files/Actions.getPageTitles.xml +134 -0
  72. data/spec/files/Actions.getPageUrls.xml +129 -0
  73. data/spec/files/Annotations.add.xml +11 -0
  74. data/spec/files/Annotations.getAll.xml +34 -0
  75. data/spec/files/Annotations.getAnnotationCountForDates.xml +12 -0
  76. data/spec/files/CustomVariables.getCustomVariables.xml +32 -0
  77. data/spec/files/ExampleAPI.getAnswerToLife.xml +2 -0
  78. data/spec/files/ExampleAPI.getCompetitionDatatable.xml +12 -0
  79. data/spec/files/ExampleAPI.getDescriptionArray.xml +8 -0
  80. data/spec/files/ExampleAPI.getMoreInformationAnswerToLife.xml +2 -0
  81. data/spec/files/ExampleAPI.getMultiArray.xml +22 -0
  82. data/spec/files/ExampleAPI.getNull.xml +4 -0
  83. data/spec/files/ExampleAPI.getObject.xml +4 -0
  84. data/spec/files/ExampleAPI.getPiwikVersion.xml +2 -0
  85. data/spec/files/ExampleAPI.getSum.xml +2 -0
  86. data/spec/files/Goals.get.xml +7 -0
  87. data/spec/files/Goals.getDaysToConversion.xml +59 -0
  88. data/spec/files/Goals.getGoals.xml +39 -0
  89. data/spec/files/Goals.getVisitsUntilConversion.xml +55 -0
  90. data/spec/files/ImageGraph.get.xml +0 -0
  91. data/spec/files/LanguagesManager.getAvailableLanguageNames.xml +233 -0
  92. data/spec/files/LanguagesManager.getAvailableLanguages.xml +49 -0
  93. data/spec/files/LanguagesManager.isLanguageAvailable.xml +2 -0
  94. data/spec/files/Live.getCounters.xml +8 -0
  95. data/spec/files/Live.getLastVisitsDetails.xml +768 -0
  96. data/spec/files/MultiSites.getAll.xml +2 -0
  97. data/spec/files/MultiSites.getOne.xml +11 -0
  98. data/spec/files/PDFReports.getReports.xml +35 -0
  99. data/spec/files/Provider.getProvider.xml +113 -0
  100. data/spec/files/Referers.getCampaigns.xml +2 -0
  101. data/spec/files/Referers.getKeywords.xml +145 -0
  102. data/spec/files/Referers.getKeywordsForPageUrl.xml +8 -0
  103. data/spec/files/Referers.getNumberOfDistinctCampaigns.xml +2 -0
  104. data/spec/files/Referers.getNumberOfDistinctKeywords.xml +2 -0
  105. data/spec/files/Referers.getNumberOfDistinctSearchEngines.xml +2 -0
  106. data/spec/files/Referers.getNumberOfDistinctWebsites.xml +2 -0
  107. data/spec/files/Referers.getNumberOfDistinctWebsitesUrls.xml +2 -0
  108. data/spec/files/Referers.getRefererType.xml +82 -0
  109. data/spec/files/Referers.getSearchEngines.xml +112 -0
  110. data/spec/files/Referers.getSocials.xml +2 -0
  111. data/spec/files/Referers.getUrlsForSocial.xml +2 -0
  112. data/spec/files/Referers.getWebsites.xml +386 -0
  113. data/spec/files/SEO.getRank.xml +33 -0
  114. data/spec/files/SitesManager.addSite.xml +1 -0
  115. data/spec/files/SitesManager.getAllSites.xml +63 -0
  116. data/spec/files/SitesManager.getAllSitesId.xml +4 -0
  117. data/spec/files/SitesManager.getCurrencyList.xml +165 -0
  118. data/spec/files/SitesManager.getCurrencySymbols.xml +165 -0
  119. data/spec/files/SitesManager.getDefaultCurrency.xml +2 -0
  120. data/spec/files/SitesManager.getDefaultTimezone.xml +2 -0
  121. data/spec/files/SitesManager.getExcludedIpsGlobal.xml +2 -0
  122. data/spec/files/SitesManager.getExcludedQueryParametersGlobal.xml +2 -0
  123. data/spec/files/SitesManager.getJavascriptTag.xml +14 -0
  124. data/spec/files/SitesManager.getSearchCategoryParametersGlobal.xml +2 -0
  125. data/spec/files/SitesManager.getSearchKeywordParametersGlobal.xml +2 -0
  126. data/spec/files/SitesManager.getSiteFromId.xml +18 -0
  127. data/spec/files/SitesManager.getSiteUrlsFromId.xml +4 -0
  128. data/spec/files/SitesManager.getSitesGroups.xml +4 -0
  129. data/spec/files/SitesManager.getSitesIdFromSiteUrl.xml +2 -0
  130. data/spec/files/SitesManager.getSitesIdWithAdminAccess.xml +4 -0
  131. data/spec/files/SitesManager.getSitesIdWithAtLeastViewAccess.xml +4 -0
  132. data/spec/files/SitesManager.getSitesIdWithViewAccess.xml +2 -0
  133. data/spec/files/SitesManager.getSitesIdWithVisits.xml +2 -0
  134. data/spec/files/SitesManager.getSitesWithAdminAccess.xml +63 -0
  135. data/spec/files/SitesManager.getSitesWithAtLeastViewAccess.xml +18 -0
  136. data/spec/files/SitesManager.getSitesWithViewAccess.xml +2 -0
  137. data/spec/files/SitesManager.getTimezonesList.xml +509 -0
  138. data/spec/files/SitesManager.getUniqueSiteTimezones.xml +4 -0
  139. data/spec/files/Transitions.getTranslations.xml +37 -0
  140. data/spec/files/UserCountry.getCity.xml +221 -0
  141. data/spec/files/UserCountry.getContinent.xml +185 -0
  142. data/spec/files/UserCountry.getCountry.xml +154 -0
  143. data/spec/files/UserCountry.getLocationFromIP.xml +17 -0
  144. data/spec/files/UserCountry.getNumberOfDistinctCountries.xml +2 -0
  145. data/spec/files/UserCountry.getRegion.xml +269 -0
  146. data/spec/files/UserSettings.getBrowser.xml +47 -0
  147. data/spec/files/UserSettings.getBrowserType.xml +58 -0
  148. data/spec/files/UserSettings.getBrowserVersion.xml +39 -0
  149. data/spec/files/UserSettings.getConfiguration.xml +43 -0
  150. data/spec/files/UserSettings.getMobileVsDesktop.xml +36 -0
  151. data/spec/files/UserSettings.getOS.xml +27 -0
  152. data/spec/files/UserSettings.getOSFamily.xml +102 -0
  153. data/spec/files/UserSettings.getPlugin.xml +63 -0
  154. data/spec/files/UserSettings.getResolution.xml +33 -0
  155. data/spec/files/UserSettings.getWideScreen.xml +47 -0
  156. data/spec/files/UsersManager.getSitesAccessFromUser.xml +4 -0
  157. data/spec/files/UsersManager.getUser.xml +10 -0
  158. data/spec/files/UsersManager.getUsers.xml +11 -0
  159. data/spec/files/UsersManager.getUsersAccessFromSite.xml +2 -0
  160. data/spec/files/UsersManager.getUsersLogin.xml +4 -0
  161. data/spec/files/UsersManager.getUsersSitesFromAccess.xml +2 -0
  162. data/spec/files/UsersManager.getUsersWithSiteAccess.xml +2 -0
  163. data/spec/files/UsersManager.userExists.xml +2 -0
  164. data/spec/files/VisitFrequency.get.xml +13 -0
  165. data/spec/files/VisitTime.getByDayOfWeek.xml +43 -0
  166. data/spec/files/VisitTime.getVisitInformationPerLocalTime.xml +83 -0
  167. data/spec/files/VisitTime.getVisitInformationPerServerTime.xml +87 -0
  168. data/spec/files/VisitorInterest.getNumberOfVisitsByDaysSinceLast.xml +63 -0
  169. data/spec/files/VisitorInterest.getNumberOfVisitsByVisitCount.xml +73 -0
  170. data/spec/files/VisitorInterest.getNumberOfVisitsPerPage.xml +43 -0
  171. data/spec/files/VisitorInterest.getNumberOfVisitsPerVisitDuration.xml +43 -0
  172. data/spec/files/VisitsSummary.get.xml +13 -0
  173. data/spec/files/VisitsSummary.getActions.xml +2 -0
  174. data/spec/files/VisitsSummary.getBounceCount.xml +2 -0
  175. data/spec/files/VisitsSummary.getMaxActions.xml +2 -0
  176. data/spec/files/VisitsSummary.getSumVisitsLength.xml +2 -0
  177. data/spec/files/VisitsSummary.getSumVisitsLengthPretty.xml +2 -0
  178. data/spec/files/VisitsSummary.getUniqueVisitors.xml +2 -0
  179. data/spec/files/VisitsSummary.getVisits.xml +2 -0
  180. data/spec/files/VisitsSummary.getVisitsConverted.xml +2 -0
  181. data/spec/files/failure.xml +3 -0
  182. data/spec/files/success.xml +3 -0
  183. data/spec/goals_spec.rb +14 -0
  184. data/spec/image_graph_spec.rb +12 -0
  185. data/spec/languages_manager_spec.rb +13 -0
  186. data/spec/live_spec.rb +13 -0
  187. data/spec/mobile_messaging_spec.rb +10 -0
  188. data/spec/multi_sites_spec.rb +11 -0
  189. data/spec/pdf_reports_spec.rb +11 -0
  190. data/spec/provider_spec.rb +12 -0
  191. data/spec/referers_spec.rb +46 -0
  192. data/spec/seo_spec.rb +15 -0
  193. data/spec/site_spec.rb +104 -0
  194. data/spec/sites_manager_spec.rb +30 -0
  195. data/spec/spec_helper.rb +76 -0
  196. data/spec/transitions_spec.rb +13 -0
  197. data/spec/user_country_spec.rb +33 -0
  198. data/spec/user_settings_spec.rb +50 -0
  199. data/spec/user_spec.rb +32 -0
  200. data/spec/users_manager_spec.rb +26 -0
  201. data/spec/visit_frequency_spec.rb +11 -0
  202. data/spec/visit_time_spec.rb +22 -0
  203. data/spec/visitor_interest_spec.rb +30 -0
  204. data/spec/visits_summary_spec.rb +47 -0
  205. metadata +426 -99
  206. data/.document +0 -5
  207. data/LICENSE +0 -7
  208. data/VERSION +0 -1
  209. data/lib/piwik/trackable.rb +0 -80
  210. data/script/console +0 -10
  211. data/test/files/config/example_piwik.yml +0 -4
  212. data/test/piwik_test.rb +0 -128
  213. data/test/test_helper.rb +0 -12
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <result>
3
+ <row>
4
+ <label>0-10s</label>
5
+ <nb_visits>735</nb_visits>
6
+ </row>
7
+ <row>
8
+ <label>11-30s</label>
9
+ <nb_visits>32</nb_visits>
10
+ </row>
11
+ <row>
12
+ <label>31-60s</label>
13
+ <nb_visits>34</nb_visits>
14
+ </row>
15
+ <row>
16
+ <label>1-2 min</label>
17
+ <nb_visits>37</nb_visits>
18
+ </row>
19
+ <row>
20
+ <label>2-4 min</label>
21
+ <nb_visits>36</nb_visits>
22
+ </row>
23
+ <row>
24
+ <label>4-7 min</label>
25
+ <nb_visits>33</nb_visits>
26
+ </row>
27
+ <row>
28
+ <label>7-10 min</label>
29
+ <nb_visits>12</nb_visits>
30
+ </row>
31
+ <row>
32
+ <label>10-15 min</label>
33
+ <nb_visits>17</nb_visits>
34
+ </row>
35
+ <row>
36
+ <label>15-30 min</label>
37
+ <nb_visits>40</nb_visits>
38
+ </row>
39
+ <row>
40
+ <label>30+ min</label>
41
+ <nb_visits>19</nb_visits>
42
+ </row>
43
+ </result>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <result>
3
+ <nb_uniq_visitors>914</nb_uniq_visitors>
4
+ <nb_visits>995</nb_visits>
5
+ <nb_actions>2161</nb_actions>
6
+ <nb_visits_converted>44</nb_visits_converted>
7
+ <bounce_count>704</bounce_count>
8
+ <sum_visit_length>143952</sum_visit_length>
9
+ <max_actions>47</max_actions>
10
+ <bounce_rate>71%</bounce_rate>
11
+ <nb_actions_per_visit>2.2</nb_actions_per_visit>
12
+ <avg_time_on_site>145</avg_time_on_site>
13
+ </result>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <result>55</result>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <result>51</result>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <result>66</result>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <result>143952</result>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <result>1 days 15 hours</result>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <result>100</result>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <result>200</result>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8" ?>
2
+ <result>0</result>
@@ -0,0 +1,3 @@
1
+ <result>
2
+ <error message="Mocked error message"/>
3
+ </result>
@@ -0,0 +1,3 @@
1
+ <result>
2
+ <success message="ok"/>
3
+ </result>
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::Goals' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ # TODO: Specify required params
8
+ let(:params) { {:idSite => 1, :period => 'day', :date => 'yesterday'} }
9
+ subject { Piwik::Goals }
10
+
11
+ assert_data_integrity(:get, :size => 4)
12
+ assert_data_integrity(:get_goals, :size => 3)
13
+ assert_data_integrity(:get_visits_until_conversion, :size => 13)
14
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::ImageGraph' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ # TODO: Specify required params
8
+ let(:params) { {:idSite => 1, :period => 'day', :date => 'yesterday', :apiModule => 'UserCountry', :apiAction => 'getCountry'} }
9
+ subject { Piwik::ImageGraph }
10
+
11
+ assert_value_integrity(:get) # for array responses
12
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::LanguagesManager' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ let(:params) { { :languageCode => 'en' } }
8
+ subject { Piwik::LanguagesManager }
9
+
10
+ assert_data_integrity(:get_available_language_names, :size => 46)
11
+ assert_data_integrity(:get_available_languages, :size => 46)
12
+ assert_value_integrity(:is_language_available, :value => 1)
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::Live' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ # TODO: Specify required params
8
+ let(:params) { {:idSite => 1, :period => 'day', :date => 'yesterday'} }
9
+ subject { Piwik::Live }
10
+
11
+ assert_data_integrity(:get_counters, :size => 3)
12
+ assert_data_integrity(:get_last_visits_details, :size => 8)
13
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::MobileMessaging' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ subject { Piwik::MobileMessaging }
8
+
9
+ xit { "nothing to see here - yet" }
10
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::MultiSites' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ let(:params) { {:idSite => 1, :period => 'day', :date => 'yesterday'} }
8
+ subject { Piwik::MultiSites }
9
+
10
+ assert_data_integrity(:get_one, :size => 8)
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::PdfReports' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ let(:params) { {:idSite => 1, :period => 'day', :date => 'yesterday'} }
8
+ subject { Piwik::PdfReports }
9
+
10
+ assert_data_integrity(:getReports)
11
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::Provider' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ # TODO: Specify required params
8
+ let(:params) { {:idSite => 1, :period => 'day', :date => 'yesterday'} }
9
+ subject { Piwik::Provider }
10
+
11
+ assert_data_integrity(:get_provider, :size => 10)
12
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::Referers' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ let(:params) { {:idSite => 1, :period => 'day', :date => 'yesterday'} }
8
+ subject { Piwik::Referers }
9
+
10
+ describe "#get_keywords" do
11
+ assert_data_integrity(:get_keywords, :size => 10)
12
+ end
13
+
14
+ describe "#get_campaigns" do
15
+ it { subject.get_campaigns(params).size.should eq(0) }
16
+ it { subject.get_campaigns(params).empty?.should eq(true) }
17
+ end
18
+
19
+ describe "#get_referer_type" do
20
+ assert_data_integrity(:get_referer_type, :size => 3)
21
+ end
22
+
23
+ describe "#get_number_of_distinct_keywords" do
24
+ assert_value_integrity(:get_number_of_distinct_keywords, :value => 207)
25
+ end
26
+
27
+ describe "#get_number_of_distinct_search_engines" do
28
+ assert_value_integrity(:get_number_of_distinct_search_engines, :value => 7)
29
+ end
30
+
31
+ describe "#get_number_of_distinct_websites" do
32
+ assert_value_integrity(:get_number_of_distinct_websites, :value => 27)
33
+ end
34
+
35
+ describe "#get_search_engines" do
36
+ assert_data_integrity(:get_search_engines, :size => 7)
37
+ end
38
+
39
+ describe "#get_socials" do
40
+ it { subject.get_socials(params).size.should eq(0) }
41
+ end
42
+
43
+ describe "#get_urls_for_social" do
44
+ it { subject.get_urls_for_social(params).size.should eq(0) }
45
+ end
46
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::SEO' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ let(:params) { {:url => 'http://site.test'} }
8
+ subject { Piwik::SEO }
9
+
10
+ describe "#get_rank" do
11
+ assert_data_integrity(:get_rank, :size => 5)
12
+ it { subject.get_rank(params).data.first['label'].should eq('Google PageRank') }
13
+ it { subject.get_rank(params).data.first['rank'].should eq('7') }
14
+ end
15
+ end
@@ -0,0 +1,104 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::Site' do
3
+ before do
4
+ stub_api_calls
5
+ end
6
+
7
+ subject { build(:site) }
8
+ its(:main_url) { should eq('http://test.local') }
9
+ its(:name) { should eq('Test Site') }
10
+ its(:config) { should eq({:piwik_url => PIWIK_URL, :auth_token => PIWIK_TOKEN}) }
11
+
12
+ it {
13
+ subject.save.should eq(true)
14
+ subject.name = 'Karate Site'
15
+ subject.update.should eq(true)
16
+ subject.destroy.should eq(true)
17
+ }
18
+
19
+ describe 'with wrong id' do
20
+ before {Piwik::SitesManager.stub(:call).with('SitesManager.getSiteFromId',{:idSite => 666}, /.*/, /.*/).and_return('<result>0</result>')}
21
+
22
+ xit { expect {Piwik::Site.load(666)}.to raise_error(Piwik::UnknownSite) }
23
+ end
24
+
25
+ it { subject.seo_info.first['rank'].to_i.should eq(7) }
26
+
27
+ describe '#annotations' do
28
+ subject { build(:site).annotations }
29
+
30
+ it { subject.all.size.should eq(2) }
31
+ it { subject.update(1,{:pattern => 2}).should_not raise_error(Piwik::ApiError) }
32
+ it { subject.delete(1).should_not raise_error(Piwik::ApiError) }
33
+ it { subject.add(:name => 'test', :note => 'meah', :starred => 1).size.should eq(6) }
34
+ it { subject.count_for_dates.should_not raise_error(Piwik::ApiError) }
35
+
36
+ end
37
+
38
+ describe '#visits' do
39
+ subject { build(:site).visits }
40
+
41
+ it { subject.summary.should be_a(Piwik::VisitsSummary) }
42
+ it { subject.count.should eq(200) }
43
+ it { subject.actions.should eq(55) }
44
+ it { subject.uniques.should eq(100) }
45
+ it { subject.bounces.should eq(51) }
46
+ it { subject.converted.should eq(0) }
47
+ it { subject.max_actions.should eq(66) }
48
+ it { subject.length.should eq(143952) }
49
+ it { subject.pretty_length.should eq("1 days 15 hours") }
50
+ end
51
+
52
+ describe '#actions' do
53
+ subject { build(:site).actions }
54
+
55
+ it { subject.summary.should be_a(Piwik::Actions) }
56
+ it { subject.urls.size.should eq(7) }
57
+ it { subject.entry_urls.size.should eq(5) }
58
+ it { subject.exit_urls.size.should eq(5) }
59
+ it { subject.downloads.size.should eq(2) }
60
+ it { subject.outlinks.size.should eq(11) }
61
+ it { subject.outlink('http://mysite.com').exit_nb_visits.should eq(5) }
62
+ end
63
+
64
+ describe '#referers' do
65
+ subject { build(:site).referers }
66
+
67
+ it { subject.websites.size.should eq(27) }
68
+ it { subject.websites_count.should eq(27) }
69
+ it { subject.keywords.size.should eq(10) }
70
+ it { subject.keywords_for_title('A page title').size.should eq(1) }
71
+ it { subject.keywords_for_url('http://mysite.com/page.html').size.should eq(5) }
72
+ it { subject.keywords_count.should eq(207) }
73
+ it { subject.search_engines.size.should eq(7) }
74
+ it { subject.search_engines_count.should eq(7) }
75
+ it { subject.socials.size.should eq(0) }
76
+ end
77
+
78
+ describe '#goals' do
79
+ subject { build(:site).goals }
80
+
81
+ it { subject.all.size.should eq(3) }
82
+ it { subject.load(1).nb_conversions.should eq(82) }
83
+ it { subject.update(1,{:pattern => 2}).should_not raise_error(Piwik::ApiError) }
84
+ it { subject.delete(1).should_not raise_error(Piwik::ApiError) }
85
+ it { subject.add(:name => 'test', 'matchAttribute' => '/', :pattern => '/', :patternType => 1).should_not raise_error(Piwik::ApiError) }
86
+ end
87
+
88
+ describe '#transitions' do
89
+ subject { build(:site).transitions }
90
+
91
+ it { subject.for_action('name','type').should be_a(Piwik::Transitions::TransitionsForAction) }
92
+ it { subject.for_title('My page title').should be_a(Piwik::Transitions::TransitionsForPageTitle) }
93
+ it { subject.for_url('http://mysite.com').should be_a(Piwik::Transitions::TransitionsForPageUrl) }
94
+ it { subject.translations.size.should eq(32) }
95
+ end
96
+
97
+ describe "that exists" do
98
+ before {
99
+ @site = build(:site)
100
+ @site.save
101
+ }
102
+ it { expect {Piwik::Site.load(@site.id)}.to_not raise_error }
103
+ end
104
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ describe 'Piwik::SitesManager' do
3
+ before {
4
+ stub_api_calls
5
+ }
6
+
7
+ # TODO: Specify required params
8
+ let(:params) { {:idSite => 1, :period => 'day', :date => 'yesterday'} }
9
+ subject { Piwik::SitesManager }
10
+
11
+ describe "#get" do
12
+ it { subject.get(params).should be_a(Piwik::Site) }
13
+ end
14
+
15
+ describe "#get_sites_with_admin_access" do
16
+ assert_data_integrity(:get_sites_with_admin_access, :size => 4)
17
+ end
18
+
19
+ describe "#get_all_sites" do
20
+ assert_data_integrity(:get_all_sites, :size => 4)
21
+ end
22
+
23
+ describe "#get_unique_site_timezones" do
24
+ assert_value_integrity(:get_unique_site_timezones)
25
+ end
26
+
27
+ describe "#get_javascript_tag" do
28
+ assert_value_integrity(:get_javascript_tag)
29
+ end
30
+ end
@@ -0,0 +1,76 @@
1
+ require 'piwik'
2
+
3
+ RSpec.configure do |config|
4
+ Dir[File.join(File.dirname(__FILE__),'spec','support''**','*.rb')].each {|f| require f}
5
+ config.mock_with :rspec
6
+ config.order = "random"
7
+ end
8
+
9
+ def stub_rails_env &block
10
+ Object.const_set("RAILS_ROOT", File.join(File.dirname(__FILE__),"files"))
11
+ yield
12
+ Object.const_set("RAILS_ROOT",nil)
13
+ end
14
+
15
+ def success_response
16
+ File.join(File.dirname(__FILE__),'files',"success.xml")
17
+ end
18
+
19
+ def failure_response
20
+ File.join(File.dirname(__FILE__),'files',"failure.xml")
21
+ end
22
+
23
+ def stub_api_calls
24
+ # Stubbing the main API call method. Methods without a specific stub
25
+ # will always return a success response
26
+ Piwik::Base.stub(:call) do |method,params,piwik_url,auth_token|
27
+ resp_file = File.join(File.dirname(__FILE__),'files',"#{method}.xml")
28
+ xml = if File.exists?(resp_file)
29
+ File.read resp_file
30
+ else
31
+ File.read File.join(success_response)
32
+ end
33
+ if xml.is_a?(String) && xml.force_encoding('BINARY').is_binary_data?
34
+ xml.force_encoding('BINARY')
35
+ elsif xml =~ /error message=/
36
+ result = XmlSimple.xml_in(xml, {'ForceArray' => false})
37
+ raise Piwik::ApiError, result['error']['message'] if result['error']
38
+ else
39
+ xml
40
+ end
41
+ end
42
+ end
43
+
44
+ def assert_data_integrity method, options = {}
45
+ it { puts subject.inspect } if options[:debug]
46
+ it { subject.send(method,params).should_not raise_error(NoMethodError) }
47
+ enum_class = defined?(Enumerator) ? 'Enumerator' : 'Enumerable::Enumerator'
48
+ it { subject.send(method,params).each.should be_a(enum_class.constantize) }
49
+ it { subject.send(method,params).empty?.should eq(false) }
50
+ if options[:size].present?
51
+ it { subject.send(method,params).size.should eq(options[:size]) }
52
+ end
53
+ end
54
+
55
+ def assert_value_integrity method, options = {}
56
+ it { puts subject.inspect } if options[:debug]
57
+ it { subject.send(method,params).should_not raise_error(NoMethodError) }
58
+ it { subject.send(method,params).empty?.should eq(false) }
59
+ if options[:value].present?
60
+ it { subject.send(method,params).value.should eq(options[:value]) }
61
+ end
62
+ end
63
+
64
+ def build(object, attrs = {})
65
+ case object
66
+ when :user
67
+ def_attrs = { :login => "test_user", :password => "changeme", :email => "user@test.local", :user_alias => "Test User" }
68
+ Piwik::User.new(def_attrs.merge(attrs))
69
+ when :site
70
+ def_attrs = { :idsite => 1, :main_url => "http://test.local", :name => "Test Site" }
71
+ Piwik::Site.new(def_attrs.merge(attrs))
72
+ end
73
+ end
74
+
75
+ PIWIK_URL = 'http://piwik.local'
76
+ PIWIK_TOKEN = '90871c8584ddf2265f54553a305b6ae1'