def test_index(self):
        index = SubscriptionIndex('test_index')
        uid = str(uuid.uuid4())
        sub = MockSub()
        assert not index.item_uids_for(sub)
        assert not index.item_uids_for(sub.signature())
        assert not index.subscribers_for(uid)

        #try twice, will not duplicate index:
        for i in range(0, 2):
            index.index(sub, uid)
            result_uids = index.item_uids_for(sub)
            result_subs = index.subscribers_for(uid)
            assert len(result_uids) == 1
            assert len(result_subs) == 1
            assert uid in result_uids
            assert sub.signature() in result_subs

        #index same intem, another sub:
        sub2 = MockSub()
        sub2.email = '*****@*****.**'
        sub2.namespace = 'email'
        assert sub2.signature() == ('email', '*****@*****.**')
        index.index(sub2, uid)
        result_uids = index.item_uids_for(sub2)
        result_subs = index.subscribers_for(uid)
        assert len(result_uids) == 1
        assert len(result_subs) == 2
        assert uid in result_uids
        assert sub2.signature() in result_subs
        assert sub.signature() in result_subs

        # return locals for continued use by other tests:
        return locals()
 def test_unindex(self):
     idx_locals = self.test_index()
     index = idx_locals['index']
     uid = idx_locals['uid']
     sub = MockSub()
     index.unindex(sub, uid)
     result_uids = index.item_uids_for(sub)
     result_subs = index.subscribers_for(uid)
     assert len(result_uids) == 0
     assert len(result_subs) == 1
     assert uid not in result_uids
     assert sub.signature() not in result_subs
     sub2sig = ('email', '*****@*****.**')
     assert sub2sig in result_subs  # sub2 from above
     index.unindex(sub2sig, uid)  # unindex sub2
     result_uids = index.item_uids_for(sub2sig)
     result_subs = index.subscribers_for(uid)
     assert len(result_uids) == 0
     assert len(result_subs) == 0
import base64
import unittest2 as unittest
import uuid
from hashlib import md5

from collective.subscribe.interfaces import ISubscriptionKeys
from collective.subscribe.tests.common import MockSub
from collective.subscribe.keys import SubscriptionKeys


SUB = MockSub()
UID = str(uuid.uuid4())
NAME = 'invited'
VALID = (NAME, SUB.signature(), UID)
INVALID = (
    (NAME, (), UID),
    ((), SUB.signature(), UID),
    (NAME, SUB.signature),
    )
EXPECTED = base64.urlsafe_b64encode(
    md5('%s/%s/%s' % (NAME, hash(SUB.signature()), UID)).digest())[:22]


class KeysTest(unittest.TestCase):
    """Test subscription keys mapping without a ZODB fixture"""

    def setUp(self):
        self.subkeys = SubscriptionKeys()
        assert len(self.subkeys) == 0

    def test_iface(self):
import uuid
import unittest2 as unittest

from collective.subscribe.catalog import SubscriptionCatalog
from collective.subscribe.index import SubscriptionIndex
from collective.subscribe.tests.common import MockSub


# some basic common fixtures for this catalog test
UID1 = str(uuid.uuid4())
UID2 = str(uuid.uuid4())
SUB1 = MockSub()
SUB1.user = '******'
SUB2 = MockSub()
SUB2.user = '******'
SUB3 = MockSub()
SUB3.user = '******'


class CatalogTest(unittest.TestCase):
    """Test catalog of uids to subscriber signatures"""

    def setUp(self):
        self.catalog = SubscriptionCatalog()

    def test_index(self):
        assert len(self.catalog.indexes) == 0
        self.catalog.index(SUB1, UID1, 'like')
        assert len(self.catalog.indexes) == 1
        assert 'like' in self.catalog.indexes
        idx = self.catalog.indexes['like']