view idavoll/test/test_backend.py @ 150:35977eb964e6

Use uuid.py module [1] for generating unique id's for nodes and items. Factor out authorization checking. [1] http://ofxsuite.berlios.de/uuid.py
author Ralph Meijer <ralphm@ik.nu>
date Tue, 04 Oct 2005 12:17:01 +0000
parents 48244f3c0c93
children 5191ba7c4df8
line wrap: on
line source

from twisted.trial import unittest
from twisted.trial.assertions import *
from zope.interface import implements
from twisted.internet import defer
from twisted.words.protocols.jabber import jid

from idavoll import backend, storage

OWNER = jid.JID('owner@example.com')

class testNode:
    id = 'to-be-deleted'
    def get_affiliation(self, entity):
        if entity is OWNER:
            return defer.succeed('owner')

class testStorage:

    implements(storage.IStorage)

    def get_node(self, node_id):
        return defer.succeed(testNode())

    def delete_node(self, node_id):
        if node_id in ['to-be-deleted']:
            self.backend.delete_called = True
            return defer.succeed(None)
        else:
            return defer.fail(storage.NodeNotFound())

class NodeDeletionServiceTests:
    pre_delete_called = False
    delete_called = False

    def setUpClass(self):
        self.storage = testStorage()
        self.storage.backend = self

    def testDeleteNode(self):
        def pre_delete(node_id):
            self.pre_delete_called = True
            return defer.succeed(None)

        def cb(result):
            assert_(self.pre_delete_called)
            assert_(self.delete_called)

        self.backend.register_pre_delete(pre_delete)
        d = self.backend.delete_node('to-be-deleted', OWNER)
        d.addCallback(cb)

class GenericNodeDeletionServiceTestCase(unittest.TestCase,
                                         NodeDeletionServiceTests):

    def setUpClass(self):
        NodeDeletionServiceTests.setUpClass(self)
        from idavoll.generic_backend import BackendService, NodeDeletionService
        bs = BackendService(self.storage)
        self.backend = NodeDeletionService()
        self.backend.setServiceParent(bs)