def setUp(self):
     self.sharesys = SharingSystem(self.env)
class SharingSystemTestCase(unittest.TestCase):
    @classmethod
    def setupClass(cls):
        class MockNode(object):
            ''' Mock svn repo node '''
            def __init__(self, path, rev=1, repos=None, pool=None, parent_root=None):
                self.path = path
                self.rev = rev
                self.repos = repos
                self.pool = pool
                self.parent_root = parent_root
            @property
            def isfile(self):
                return os.path.isfile(self.path)
            def get_content(self):
                return open(self.path)
            def get_content_type(self):
                return get_mimetype(self.path)
            
        class MockRepo(Repository,Component):
            ''' Mock svn repo '''
            implements(IRepositoryProvider)
            path = '.'
            def get_node(self, path, rev=None):
                return MockNode(path, rev=rev, repos=self)
            def get_repository(self, name):
                return self
            @property
            def repos(self):
                return self
        cls.server = SMTPThreadedServer(port=2526)
        cls.server.start()
        env = EnvironmentStub(default_data=True, enable=['trac.*', 'announcer.*', 'sourcesharingplugin.*', 'define.*'])
        env.components.update({RepositoryManager: MockRepo(env)})
        if sourcesharingplugin.sourcesharer.using_announcer:
            env.config.set('smtp', 'port', cls.server.port)
        else:
            env.config.set('notifications', 'smtp_port', cls.server.port)
        cls.env = env

    @classmethod
    def teardownClass(cls):
        cls.server.stop()

    def setUp(self):
        self.sharesys = SharingSystem(self.env)

    def tearDown(self):
        self.sharesys = None

    def test_get_address(self):
        pass

    def test_parse_email(self):
        valid = ('*****@*****.**', 'Doe, John [email protected]',
                 '"John Doe" <[email protected] ',
                 ' "Doe, John"    <*****@*****.**> ',
                 '"Örjan Pärson" <*****@*****.**>')
        invalid = ('kallekula_at_gmail_com', '', None, )
        for v in valid:
            name, address = self.sharesys.parse_address(v)
            assert address, v
        for v in invalid:
            name, address = self.sharesys.parse_address(v)
            assert name is None and address is None, v

    def test_get_resource(self):
        req = Request(perm=MockPerm(), href=Href)
        repo = Resource('repository', '')
        res = self.sharesys._get_file_resource(req, 'source', repo, 'trunk')
        assert res.id == 'trunk', res

    def test_send_mail(self):
        dir = resource_filename(__name__, os.path.join('..', 'htdocs'))
        files = [os.path.join(dir, f) for f in os.listdir(dir)]
        resources = []
        parent = Resource('repository', '')
        for f in files:
            res = Resource('source', f, parent=parent)
            resources.append(res)

        subjects = ('Re: åäö',
                    u'Re: åäö',
                    'Re: ascii',
                    )
        bodies = ('Here you gö (Här får du)',
                  u'Here you gö (Här får du)',
                  'Ascii body',
                  )
        for subject in subjects:
            subject = to_unicode(subject)
            for body in bodies:
                body = to_unicode(body)
                mail = self.sharesys.send_as_email("anonymous",
                                                   (u'Pöntus Enmärk',
                                                    '*****@*****.**'),
                                                   [(u'Pontus Enmark',
                                                     '*****@*****.**'),
                                                    (u'Pöntus Enmärk',
                                                     '*****@*****.**')],
                                                   subject,
                                                   body,
                                                   *resources)
                headers, sent_body = parse_smtp_message(self.server.get_message())
                assert 'utf-8' in sent_body.split('\n')[2]
                assert subject == headers['Subject'], headers
                assert os.path.basename(files[0]) in sent_body