# -*- coding: iso-8859-1 -*-

import os, sys
if __name__ == '__main__':
    execfile(os.path.join(sys.path[0], 'framework.py'))

import unittest
from Testing import ZopeTestCase

import Products.PlacelessTranslationService.Tracker as TrackerModule
from Products.PlacelessTranslationService.Tracker import Tracker

ZopeTestCase.installProduct('PlacelessTranslationService')


class BasicTrackerTestCase(unittest.TestCase):

    def setUp(self):
        self.tracker = Tracker()
        return

    def testTrackerOff(self):
        """Should be off at stratup
        """
        self.failIf(self.tracker.mode,
                    "Tracker should be off")
        return

    def testDontRecordWhenOff(self):
        """Don't record when tracker is off
        """
        self.tracker.recordFailure('dummy', 'dummy', 'dummy')
        self.failIf(self.tracker.msgids,
                    "There should be no message")
        self.failIf(self.tracker.by_language,
                    "There should be no message")
        return

    def testDontRecordWrongDomain(self):
        """Don't record unwanted domain
        """
        self.tracker.mode = True
        self.tracker.domain = 'foo'
        self.tracker.recordFailure('dummy', 'dummy', 'dummy')
        self.failUnlessEqual(self.tracker.msgids, [])
        self.failUnlessEqual(self.tracker.by_language, {})

    def testRecordOnlyOnce(self):
        """A message should be recorded only once
        """
        self.tracker.mode = True
        self.tracker.domain = 'dummy'
        self.tracker.recordFailure('dummy', 'dummy', 'dummy')
        self.tracker.recordFailure('dummy', 'dummy', 'dummy')
        self.failUnlessEqual(self.tracker.msgids, ['dummy'])
        self.failUnlessEqual(self.tracker.by_language,
                             {'dummy': [0]})
        self.tracker.recordFailure('dummy', 'dummy', 'dummy')
        return

# /class BasicTrackerTestCase

class AdvancedTrackerTestCase(unittest.TestCase):
    """Some testing for data management
    """

    def setUp(self):
        domain = 'foo'
        self.tracker = Tracker()
        self.tracker.mode = True
        self.tracker.domain = domain
        messages = (
            ('msg1', 'fr'),
            ('msg2', 'fr'),
            ('msg1', 'de'),
            ('msg3', 'it'),
            ('msg0', 'it'))
        for msg, lang in messages:
            self.tracker.recordFailure(domain, msg, lang)
        return

    def testavailableLanguages(self):
        """Check all languages recorded for domain
        """
        self.failUnlessEqual(self.tracker.availableLanguages(),
                             ['de', 'fr', 'it'])
        return

    def testAllMessages(self):
        """Checks all recorded messages
        """
        self.failUnlessEqual(self.tracker.availableMsgids(),
                             ['msg0', 'msg1', 'msg2', 'msg3'])
        return

    def testAllMessagesByLanguage(self):
        """Checks all recorded messages for any language
        """
        self.failUnlessEqual(self.tracker.availableMsgids('fr'),
                             ['msg1', 'msg2'])
        self.failUnlessEqual(self.tracker.availableMsgids('de'),
                             ['msg1'])
        self.failUnlessEqual(self.tracker.availableMsgids('it'),
                             ['msg0', 'msg3'])
        return

# /class AdvancedTrackerTestCase

class PTSTrackerTestCase(ZopeTestCase.ZopeTestCase):
    """Testing the tracker through the PlacelessTranslationService
    """

    def afterSetUp(self):
        this_domain = 'PlacelessTranslationService'
        self.ts = self.app.Control_Panel.TranslationService
        package_dir = os.path.dirname(TrackerModule.__file__)
        self.ts._load_i18n_dir(os.path.join(package_dir, 'i18n'))
        self.tracker = self.ts.getTracker()
        self.tracker.mode = True
        self.tracker.domain = this_domain
        messages = (
            ('msg1', 'fr'),
            ('msg2', 'fr'),
            ('msg1', 'de'),
            ('msg3', 'it'),
            ('msg0', 'it'))
        for msg, lang in messages:
            msg = self.ts.translate(this_domain, msg, context=self.folder.REQUEST,
                                    target_language=lang)
        return

    def testAllMessages(self):
        """Checks all recorded messages
        """
        self.failUnlessEqual(self.tracker.availableMsgids(),
                             ['msg0', 'msg1', 'msg2', 'msg3'])
        return

    def testAllMessagesByLanguage(self):
        """Checks all recorded messages for any language
        """
        self.failUnlessEqual(self.tracker.availableMsgids('fr'),
                             ['msg1', 'msg2'])
        self.failUnlessEqual(self.tracker.availableMsgids('de'),
                             ['msg1'])
        self.failUnlessEqual(self.tracker.availableMsgids('it'),
                             ['msg0', 'msg3'])
        return

def test_suite():
    from unittest import TestSuite, makeSuite
    suite = TestSuite()
    suite.addTest(makeSuite(BasicTrackerTestCase))
    suite.addTest(makeSuite(AdvancedTrackerTestCase))
    suite.addTest(makeSuite(PTSTrackerTestCase))
    return suite

if __name__ == '__main__':
    framework()

