def test_queue_operations(self):
        db = DBOp()
        table = db.unit_test
        table.remove()

        _id1 = db.new_id(table)
        _id2 = db.new_id(table)
        _id3 = db.new_id(table)

        db.push(table, _id1, 'notify', 'a')
        db.push(table, _id1, 'notify', 'b')
        db.push(table, _id1, 'notify', ['c', 'd'])
        db.push(table, [_id1, _id2, _id3], 'notify', ['a', 'e'])

        data = db.load(table, _id1, fields={'_id': False, 'notify': True})
        print data
        self.assertEqual(data['notify'], ['a', 'b', 'c', 'd', 'e'])

        db.pop(table, _id1, 'notify', ['a', 'b'])
        db.pop(table, _id1, 'notify', 'c')

        data = db.load(table, _id1, fields={'_id': False, 'notify': True})
        self.assertEqual(data['notify'], ['d', 'e'])

        db.pop(table, [_id1, _id2, _id3], 'notify', 'e')

        data = db.load(table, _id1, fields={'_id': False, 'notify': True})
        self.assertEqual(data['notify'], ['d'])
        data = db.load(table, _id2, fields={'_id': False, 'notify': True})
        self.assertEqual(data['notify'], ['a'])
        data = db.load(table, _id3, fields={'_id': False, 'notify': True})
        self.assertEqual(data['notify'], ['a'])

        db.close()
    def test_id_operations(self):
        db = DBOp()
        table = db.unit_test
        table.remove()

        _id1 = db.new_id(table)
        self.assertTrue(_id1 is not None)
        self.assertTrue(isinstance(_id1, str))
        print 'new generated id: %s' % _id1

        _id2 = db.save(table, _id1, {'data': 'test data'})
        self.assertTrue(_id2 is not None)
        self.assertTrue(isinstance(_id2, str))
        print 'new updated id: %s' % _id2

        self.assertEqual(db.load(table, _id1)['data'], 'test data')

        _id3 = db.delete(table, _id1)
        self.assertTrue(_id3 is not None)
        print 'deleted id: %s' % _id3

        try:
            db.load(table, _id1)
            self.assertFalse('unreachable for exception')
        except Exception, e:
            self.assertIn('''Couldn't load''', e.message)
            self.assertIn('''it doesn't exist or deleted''', e.message)