def setUp(self):
     self.testhelper = TestHelper()
     self.testhelper.add(nodes="rootnode.subnode:admin(normaluser).subsubnode.subsubsubnode")
     self.testhelper.add(nodes="rootnode.altsubnode.altsubsubnode:admin(normaluser)")
     self.testhelper.create_superuser("superuser")
     self.nodedao = NodeDao()
class TestNodeDao(TestCase):
    def setUp(self):
        self.testhelper = TestHelper()
        self.testhelper.add(nodes="rootnode.subnode:admin(normaluser).subsubnode.subsubsubnode")
        self.testhelper.add(nodes="rootnode.altsubnode.altsubsubnode:admin(normaluser)")
        self.testhelper.create_superuser("superuser")
        self.nodedao = NodeDao()

    def test_superuser(self):
        # The only difference for superuser is auth, so the normal user tests cover everything but these sanity tests
        self.nodedao.create(self.testhelper.superuser, 'tst', "Test")
        self.nodedao.create(self.testhelper.superuser, 'tst2', "Test2",
                            parentnode_id=self.testhelper.rootnode_subnode_subsubnode.id)

        self.nodedao.read(self.testhelper.superuser, self.testhelper.rootnode.id)
        self.nodedao.read(self.testhelper.superuser, self.testhelper.rootnode_subnode_subsubnode.id)

        self.nodedao.update(self.testhelper.superuser, self.testhelper.rootnode.id, 'tstupdated', "Test updated")
        self.nodedao.update(self.testhelper.superuser, self.testhelper.rootnode_subnode_subsubnode.id, 'tst2', "Test2",
                            parentnode_id=self.testhelper.rootnode_subnode.id)

        self.nodedao.delete(self.testhelper.superuser, self.testhelper.rootnode_subnode_subsubnode.id)
        self.nodedao.delete(self.testhelper.superuser, self.testhelper.rootnode.id)

    def test_create_normaluser(self):
        with self.assertRaises(NodeAdminRequiredError):
            self.nodedao.create(self.testhelper.normaluser,
                                'tst', 'Test', parentnode_id=self.testhelper.rootnode.id)

        nodedct = self.nodedao.create(self.testhelper.normaluser,
                                      'tst', 'Test', parentnode_id=self.testhelper.rootnode_subnode.id)
        del nodedct['id']
        self.assertEquals(nodedct, dict(long_name='Test', short_name='tst',
                                        parentnode_id=self.testhelper.rootnode_subnode.id))

    def test_read_normaluser(self):
        self.assertRaises(NodeAdminRequiredError, self.nodedao.read,
                          self.testhelper.normaluser, self.testhelper.rootnode.id)
        self.nodedao.read(self.testhelper.normaluser, self.testhelper.rootnode_subnode.id)
        self.nodedao.read(self.testhelper.normaluser, self.testhelper.rootnode_subnode_subsubnode.id)

    def test_update_normaluser(self):
        with self.assertRaises(NodeAdminRequiredError): # Update without changing parentnode
            self.nodedao.update(self.testhelper.normaluser,
                                self.testhelper.rootnode_subnode.id,
                                'tst', 'Test', parentnode_id=self.testhelper.rootnode_subnode.parentnode_id)

        nodedct = self.nodedao.update(self.testhelper.normaluser,
                                      self.testhelper.rootnode_subnode_subsubnode.id,
                                      'tst', 'Test', parentnode_id=self.testhelper.rootnode_subnode.id)
        self.assertEquals(nodedct, dict(id=self.testhelper.rootnode_subnode_subsubnode.id,
                                        long_name='Test', short_name='tst',
                                        parentnode_id=self.testhelper.rootnode_subnode.id))

    def test_move_normaluser(self):
        with self.assertRaises(NodeAdminRequiredError): # Update and move
            nodedct = self.nodedao.update(self.testhelper.normaluser,
                                          self.testhelper.rootnode_subnode_subsubnode.id,
                                          'tst', 'Test', parentnode_id=self.testhelper.rootnode_altsubnode.id)
        nodedct = self.nodedao.update(self.testhelper.normaluser,
                                      self.testhelper.rootnode_subnode_subsubnode.id,
                                      'tst', 'Test', parentnode_id=self.testhelper.rootnode_altsubnode_altsubsubnode.id)
        self.assertEquals(nodedct['parentnode_id'], self.testhelper.rootnode_altsubnode_altsubsubnode.id)


    def test_delete_normaluser(self):
        with self.assertRaises(NodeAdminRequiredError):
            self.nodedao.delete(self.testhelper.normaluser, self.testhelper.rootnode_subnode.id)
        with self.assertRaises(NotPermittedToDeleteNonEmptyError):
            self.nodedao.delete(self.testhelper.normaluser, self.testhelper.rootnode_subnode_subsubnode.id)
        self.nodedao.delete(self.testhelper.normaluser, self.testhelper.rootnode_subnode_subsubnode_subsubsubnode.id)