def test_deletes(self): root = _makeOneRoot(self.request) coll = root['example_collection'] instance1 = _makeOneObject(self.request, title='Instance #1') instance2 = _makeOneObject(self.request, title='Instance #2') instance3 = _makeOneObject(self.request, title='Instance #3') coll.add_child(instance1) coll.add_child(instance2) coll.add_child(instance3) name1 = instance1.__name__ name2 = instance2.__name__ name3 = instance3.__name__ id1 = instance1._id id2 = instance2._id id3 = instance3._id from audrey import sortutil c_and_t = coll.get_child_names_and_total(sort=sortutil.sort_string_to_mongo('_created')) self.assertEqual(c_and_t['total'], 3) self.assertEqual(c_and_t['items'], [name1, name2, name3]) self.assertEqual(coll.delete_child_by_name(name1), 1) c_and_t = coll.get_child_names_and_total(sort=sortutil.sort_string_to_mongo('_created')) self.assertEqual(c_and_t['total'], 2) self.assertEqual(c_and_t['items'], [name2, name3]) self.assertEqual(coll.delete_child_by_name(name1), 0) self.assertEqual(coll.delete_child_by_id(id3), 1) c_and_t = coll.get_child_names_and_total(sort=sortutil.sort_string_to_mongo('_created')) self.assertEqual(c_and_t['total'], 1) self.assertEqual(c_and_t['items'], [name2]) self.assertEqual(coll.delete_child_by_id(id3), 0)
def test_child_getters(self): root = _makeOneRoot(self.request) coll = root['example_collection'] c_and_t = coll.get_children_and_total() self.assertEqual(c_and_t['total'], 0) self.assertEqual(c_and_t['items'], []) from bson.objectid import ObjectId self.assertEqual(coll.get_child_by_id(ObjectId()), None) instance = _makeOneObject(self.request) instance2 = _makeOneObject(self.request, title='Another') instance3 = _makeOneObject(self.request, title='One More') self.assertNotEqual(instance.title, instance2.title) coll.add_child(instance) c_and_t = coll.get_children_and_total() self.assertEqual(c_and_t['total'], 1) self.assertEqual([x._id for x in c_and_t['items']], [instance._id]) self.assertNotEqual(coll.get_child_by_id(instance._id), None) coll.add_child(instance2) self.assertNotEqual(instance._id, instance2._id) from audrey import sortutil c_and_t = coll.get_children_and_total(sort=sortutil.sort_string_to_mongo('_created')) self.assertEqual(c_and_t['total'], 2) self.assertEqual([x._id for x in c_and_t['items']], [instance._id, instance2._id]) self.assertNotEqual(coll.get_child_by_id(instance2._id), None) self.assertEqual(coll[instance.__name__].title, instance.title) self.assertEqual(coll[instance2.__name__].title, instance2.title) with self.assertRaises(KeyError): coll['foo'] self.assertFalse(coll.has_child_with_name('bar')) self.assertTrue(coll.has_child_with_name(instance.__name__)) result = coll.get_children(sort=sortutil.sort_string_to_mongo('_created')) self.assertEqual([x._id for x in result], [instance._id, instance2._id]) n_and_t = coll.get_child_names_and_total(sort=sortutil.sort_string_to_mongo('_created')) self.assertEqual(n_and_t['total'], 2) self.assertEqual(n_and_t['items'], [instance.__name__, instance2.__name__]) coll.add_child(instance3) names = coll.get_child_names(sort=sortutil.sort_string_to_mongo('_created')) self.assertEqual(names, [instance.__name__, instance2.__name__, instance3.__name__]) names = coll.get_child_names(skip=1, sort=sortutil.sort_string_to_mongo('_created')) self.assertEqual(names, [instance2.__name__, instance3.__name__]) names = coll.get_child_names(limit=2, sort=sortutil.sort_string_to_mongo('_created')) self.assertEqual(names, [instance.__name__, instance2.__name__]) names = [] for child in coll.get_children_lazily(sort=sortutil.sort_string_to_mongo('-_created')): names.append(child.__name__) self.assertEqual(names, [instance3.__name__, instance2.__name__, instance.__name__])
def test_naming_crud(self): root = _makeOneRoot(self.request) coll = root['example_naming_collection'] from audrey import sortutil name = 'name1' instance = _makeOneNamedObject(self.request, name) result = root.basic_fulltext_search() self.assertEqual(result['total'], 0) coll.add_child(instance) self.assertTrue(coll.has_child_with_name(name)) root.refresh_elastic() result = root.basic_fulltext_search() self.assertEqual(result['total'], 1) self.assertEqual(result['items'][0]._id, instance._id) # Create another object and try to add with the same name name2= 'name2' instance2 = _makeOneNamedObject(self.request, name, title='Another Object') from audrey.exceptions import Veto with self.assertRaises(Veto) as cm: coll.add_child(instance2) self.assertEqual(cm.exception.args[0], '''The name "%s" is already in use.''' % name) self.assertEqual(coll.get_child_by_name(name2), None) # Now try to add again with a unique name instance2.__name__ = name2 coll.add_child(instance2) c_and_t = coll.get_child_names_and_total(sort=sortutil.sort_string_to_mongo('_created')) self.assertEqual(c_and_t['total'], 2) self.assertEqual(c_and_t['items'], [name, name2]) self.assertNotEqual(coll.get_child_by_name(name2), None) coll.delete_child_by_name(name) self.assertFalse(coll.has_child_with_name(name)) result = root.basic_fulltext_search() self.assertEqual(result['total'], 1)
def test_sortutil(self): from audrey import sortutil self.assertTrue(sortutil.sort_string_to_mongo('foo,-bar,+baz'), [('foo', 1), ('bar', -1), ('baz', 1)]) self.assertTrue(sortutil.sort_string_to_elastic('foo,-bar,+baz'), 'foo,bar:desc,baz'), self.assertTrue(sortutil.SortSpec('foo,-bar,+baz').to_string(pluses=True), '+foo,-bar,+baz') self.assertTrue(str(sortutil.SortSpec('foo,-bar,+baz')), 'foo,-bar,baz')