import os
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
from ckanext.googleanalytics.gasnippet import gacode


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 = gacode % (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([])
        # command.run(['--config=%s' % os.path.join(conf_dir, 'test.ini')])
        # config = appconfig('config:test.ini', relative_to=conf_dir)
        # for k in config:
            # print k
        response = self.app.get(url_for(controller='package',
                                        action='read',
                                        id='annakarenina'))
        assert "(downloaded 4 times)" in response.body


@@ -3191,203 +3191,8 @@
 %5B%5D)%0A
-        # command.run(%5B'--config=%25s' %25 os.path.join(conf_dir, 'test.ini')%5D)%0A        # config = appconfig('config:test.ini', relative_to=conf_dir)%0A        # for k in config:%0A            # print k%0A
     

remove dead code