ckanext-googleanalytics/tests/test_general.py

123 lines
4.2 KiB
Python

import httplib
from unittest import TestCase
from ckan.config.middleware import make_app
from paste.deploy import appconfig
import paste.fixture
from ckan.tests import conf_dir, url_for, CreateTestData
from mockgoogleanalytics import runmockserver
from ckanext.googleanalytics.commands import LoadAnalytics
from ckanext.googleanalytics.commands import InitDB
from ckanext.googleanalytics import dbutil
import ckanext.googleanalytics.gasnippet as gasnippet
class MockClient(httplib.HTTPConnection):
def request(self, http_request):
filters = http_request.uri.query.get("filters")
path = http_request.uri.path
if filters:
if "dataset" in filters:
path += "/dataset"
else:
path += "/download"
httplib.HTTPConnection.request(self, http_request.method, path)
resp = self.getresponse()
return resp
class TestConfig(TestCase):
def test_config(self):
config = appconfig("config:test.ini", relative_to=conf_dir)
config.local_conf["ckan.plugins"] = "googleanalytics"
config.local_conf["googleanalytics.id"] = ""
command = LoadAnalytics("loadanalytics")
command.CONFIG = config.local_conf
self.assertRaises(Exception, command.run, [])
class TestLoadCommand(TestCase):
@classmethod
def setup_class(cls):
InitDB("initdb").run([]) # set up database tables
config = appconfig("config:test.ini", relative_to=conf_dir)
config.local_conf["ckan.plugins"] = "googleanalytics"
config.local_conf["googleanalytics.username"] = "borf"
config.local_conf["googleanalytics.password"] = "borf"
config.local_conf["googleanalytics.id"] = "UA-borf-1"
config.local_conf["googleanalytics.show_downloads"] = "true"
cls.config = config.local_conf
wsgiapp = make_app(config.global_conf, **config.local_conf)
env = {
"HTTP_ACCEPT": (
"text/html;q=0.9,text/plain;" "q=0.8,image/png,*/*;q=0.5"
)
}
cls.app = paste.fixture.TestApp(wsgiapp, extra_environ=env)
CreateTestData.create()
runmockserver()
@classmethod
def teardown_class(cls):
CreateTestData.delete()
conn = httplib.HTTPConnection("localhost:%d" % 6969)
conn.request("QUIT", "/")
conn.getresponse()
def test_analytics_snippet(self):
response = self.app.get(url_for(controller="tag", action="index"))
code = gasnippet.header_code % (
self.config["googleanalytics.id"],
"auto",
)
assert code in response.body
def test_top_packages(self):
command = LoadAnalytics("loadanalytics")
command.TEST_HOST = MockClient("localhost", 6969)
command.CONFIG = self.config
command.run([])
packages = dbutil.get_top_packages()
resources = dbutil.get_top_resources()
self.assertEquals(packages[0][1], 2)
self.assertEquals(resources[0][1], 4)
def test_download_count_inserted(self):
command = LoadAnalytics("loadanalytics")
command.TEST_HOST = MockClient("localhost", 6969)
command.CONFIG = self.config
command.run([])
response = self.app.get(
url_for(controller="package", action="read", id="annakarenina")
)
assert "[downloaded 4 times]" in response.body
def test_js_inserted_resource_view(self):
from nose import SkipTest
raise SkipTest("Test won't work until CKAN 1.5.2")
from ckan.logic.action import get
from ckan import model
context = {"model": model, "ignore_auth": True}
data = {"id": "annakarenina"}
pkg = get.package_show(context, data)
resource_id = pkg["resources"][0]["id"]
command = LoadAnalytics("loadanalytics")
command.TEST_HOST = MockClient("localhost", 6969)
command.CONFIG = self.config
command.run([])
response = self.app.get(
url_for(
controller="package",
action="resource_read",
id="annakarenina",
resource_id=resource_id,
)
)
assert 'onclick="javascript: _gaq.push(' in response.body