def setUp(self): self.connection = get_test_conn() ep.set_context(self.connection) ep.start_session() class Ingredient(ep.Object): name = ep.f.CharacterVarying(20) class Meal(ep.Object): name = ep.f.CharacterVarying(20) ingredients = ep.rel.OneToMany(Ingredient, dependent=False) for meal_name, ingredient_set in [ ('meal1', ['spam', 'bacon']), ('meal2', ['spam', 'eggs', 'bacon']), ('meal3', ['spam', 'bacon', 'sausage']), ]: ingredients = [ Ingredient(name = ing) for ing in ingredient_set ] ep.add(*ingredients) new_meal = Meal(name = meal_name, ingredients = ingredients) ep.add(new_meal) ep.commit() self.Ingredient = Ingredient self.Meal = Meal
def test_import(self): """Test if you can import a file content from the filesystem""" ep.start_session() pythons = self.Jpeg.get(1) self.assertEqual(pythons.content.get_size(), os.path.getsize( os.path.join(HERE, 'pythons.yotpeg') ))
def test_assigment(self): """Ensure we can't use assignment to set the file field value""" ep.start_session() inquisition = self.Skit.get(3) def broken(): inquisition.content = 'xxx' self.assertRaises(AttributeError, broken)
def test_not_identical(self): """Disabling cache by restarting session""" knight = self.Knight.get(1) knight.title = "Sire" ep.start_session() knight2 = self.Knight.get(1) self.assertEqual(knight2.title, "Sir")
def test_no_mime(self): """Test if without a mimetype we get application/octet-stream""" ep.start_session() inquisition = self.Skit.get(3) self.assertEqual( inquisition.content.mimetype, 'application/octet-stream' )
def test_uncompatible(self): """Trying to set uncompatible type""" ep.start_session() meal1 = self.Meal.get(self.Meal.id == 1) def wrong(): meal1.ingredients = 1 self.assertRaises(TypeError, wrong)
def test_read(self): ep.start_session() pythons = self.Image.get(1) img = pythons.image thumb = pythons.thumb self.assertEqual(img.width, 640) self.assertEqual(thumb.width, 100)
def test_get(self): ep.start_session() meal1 = self.Food.get(5) self.assertSetEqual( set([ingredient.name for ingredient in meal1.ingredients]), set(['spam', 'bacon']) )
def setUp(self): class Skit(ep.Object): title = ep.f.CharacterVarying(length=16) content = ep.f.FileField() class Jpeg(ep.Object): title = ep.f.CharacterVarying(length=16) content = ep.f.FileField(mimetype='image/jpeg') self.Skit = Skit self.Jpeg = Jpeg self.conn = get_test_conn() ep.set_context(self.conn) ep.start_session() parrot = Skit(title='parrot') ep.add(parrot) parrot.content.filename='parrot.txt' parrot.content.write(CONTENT_PARROT) hungarian = Skit(title='hungarian') ep.add(hungarian) hungarian.content.filename='hungarian.txt' hungarian.content.mimetype='text/x-rst' hungarian.content.write(CONTENT_HUNGARIAN) img = Jpeg(title='pythons') ep.add(img) img.content.import_(os.path.join(HERE, 'pythons.yotpeg')) inquisition = Skit(title='inquisition') ep.add(inquisition) inquisition.content.filename='inquisition' inquisition.content.write(CONTENT_INQUISITION) ep.commit()
def test_not_added(self): """Ensure trying to write to a file without a session raises exc""" ep.start_session() parrot2 = self.Skit(title='parrot2') def broken(): parrot2.content.write(CONTENT_PARROT) self.assertRaises(ep.object.exc.LifecycleError, broken)
def test_backref(self): """Test if items are getting correct backref""" ep.start_session() meal = self.Meal.get(self.Meal.id == 3) self.assertEqual( meal.ingredients[0].meal, meal, )
def test_get_one(self): """Test if a single object gets correct set of children""" ep.start_session() meal = self.Meal.get(1) self.assertEqual( set([i.name for i in meal.ingredients]), set(['spam', 'bacon']) )
def test_remove(self): """Testing the behavior when we pop an element from list""" ep.start_session() meal = self.Meal.get(1) ing = meal.ingredients[0] self.assertEqual(ing.meal, meal) meal.ingredients.pop(0) self.assertEqual(ing.meal, None)
def test_wrong_side(self): """Trying to write to the backref""" ep.start_session() meal1 = self.Meal.get(self.Meal.id == 1) meal2 = self.Meal.get(self.Meal.id == 2) def wrong(): meal1.ingredients[0].meal = meal2 self.assertRaises(TypeError, wrong)
def test_size(self): """Test getting the size. As it involves seek()ing also check if position is unchanged""" ep.start_session() parrot = self.Skit.get(1) parrot.content.seek(10) self.assertEqual(parrot.content.get_size(), len(CONTENT_PARROT)) self.assertEqual(parrot.content.tell(), 10)
def test_get(self): """Test if getting a list from fixture preserves the order""" ep.start_session() # import pdb; pdb.set_trace() meal = self.Meal.get(self.Meal.id == 3) self.assertListEqual( [ingredient.name for ingredient in meal.ingredients], ['spam', 'bacon', 'sausage'], )
def test_fixed_mime(self): """Test if you can fix a mime for a field""" ep.start_session() pythons = self.Jpeg.get(1) self.assertEqual(pythons.content.filename, 'pythons.yotpeg') self.assertEqual(pythons.content.mimetype, 'image/jpeg') def broken(): pythons.content.mimetype = 'image/png' self.assertRaises(AttributeError, broken)
def test_back_search(self): """Test using the backref as a base for condition""" ep.start_session() meal = self.Meal.get(self.Meal.id == 3) ingredients = self.Ingredient.find(self.Ingredient.meal == meal) self.assertSetEqual( set((ingredient.id for ingredient in meal.ingredients)), set((ingredient.id for ingredient in ingredients)), )
def test_delete(self): """Check if no garbage is left after we delete object containg lobject """ ep.start_session() parrot = self.Skit.get(1) oid = parrot.content.oid parrot.delete() ep.commit() self.assertRaises(OperationalError, lambda: self.conn.lobject(oid))
def test_unlink(self): """Check if unlinking an lobject is handled by None'ing a field""" ep.start_session() parrot = self.Skit.get(1) parrot.content.unlink() ep.commit() ep.start_session() parrot = self.Skit.get(1) self.assertEqual(parrot.content.read(), '')
def test_crude_remove(self): """Testing the behavior when we pop an element from list using ugly unpythonish syntax""" ep.start_session() meal = self.Meal.get(1) ing = meal.ingredients[0] self.assertEqual(ing.meal, meal) meal.ingredients = meal.ingredients[1:] self.assertEqual(ing.meal, None)
def run(self): for i in range(10): self.connection = get_test_conn() ep.set_context(self.connection) ep.start_session() self.session = ep.get_session() time.sleep(rnd.random() / 10) if self.session != ep.get_session(): self.conflicted = True break
def test_non_dependent(self): """Test if the orphaned object persists""" ep.start_session() meal = self.Meal.get(1) ing = meal.ingredients[0] ing_id = ing.get_pk_value() meal.ingredients.pop(0) ep.commit() ep.start_session() ing2 = self.Ingredient.get(ing_id) self.assertEqual(ing2.meal, None)
def test_swap(self): """Test if swappin elements from a list from fixture works""" ep.start_session() meal = self.Meal.get(self.Meal.id == 3) ing = meal.ingredients.pop(0) meal.ingredients.append(ing) ep.commit() ep.start_session meal = self.Meal.get(self.Meal.id == 3) self.assertListEqual( [ingredient.name for ingredient in meal.ingredients], ['bacon', 'sausage', 'spam'], )
def test_serve(self): """Test the WSGI feature of the file field.""" ep.start_session() pythons = self.Jpeg.get(1) app = webtest.TestApp(pythons.content.serve()) res = app.get('/') with open(os.path.join(HERE, 'pythons.yotpeg'), 'rb') as f: self.assertEqual(res.body, f.read()) self.assertEqual( res.headers['Content-Disposition'], 'attachment; filename="pythons.yotpeg"' ) self.assertEqual(res.headers['Content-Type'], 'image/jpeg')
def test_dependent(self): """Test if the orphaned object is removed""" ep.start_session() meal = self.Meal.get(1) ing = meal.ingredients[0] ing_id = ing.get_pk_value() meal.ingredients.pop(0) self.assertEqual(ing._status, ORPHANED) ep.commit() ep.start_session() def wrong(): return self.Ingredient.get(ing_id) self.assertRaises(NotFound, wrong)
def setUp(self): class Image(ep.Object): image = ep.f.Image() thumb = ep.f.Thumb(origin=image, size=(100, 100)) self.Image = Image self.conn = get_test_conn() ep.set_context(self.conn) ep.start_session() img = pystacia.read(os.path.join(HERE, 'pythons.yotpeg')) img.filename = 'pythons.jpeg' pythons = Image(image=img) ep.add(pythons) ep.commit()
def test_replace(self): """Replacing full list so __set__ is called""" ep.start_session() meal = self.Meal.get(1) eggs = self.Ingredient.get(2) bacon = self.Ingredient.get(3) meal.ingredients = [eggs, bacon] del meal.ingredients[1] ep.commit() ep.start_session() self.assertSetEqual( set([i.name for i in meal.ingredients]), set(['eggs']) )
def test_swap_as_new(self): """Test swapping, but this time we set a completely new list""" ep.start_session() meal = self.Meal.get(self.Meal.id == 3) new_ings = meal.ingredients[:] ing = new_ings.pop(0) new_ings.append(ing) meal.ingredients = new_ings ep.commit() ep.start_session meal = self.Meal.get(self.Meal.id == 3) self.assertListEqual( [ingredient.name for ingredient in meal.ingredients], ['bacon', 'sausage', 'spam'], )
def test_move(self): """Test if you can safely move a dependent object without it getting deleted""" ep.start_session() meal1 = self.Meal.get(1) meal2 = self.Meal.get(2) ing = meal1.ingredients.pop(0) ing_id = ing.id meal2.ingredients.append(ing) ep.commit() ep.start_session() meal1 = self.Meal.get(1) meal2 = self.Meal.get(2) ing = self.Ingredient.get(ing_id) self.assertEqual(len(meal1.ingredients), 1) self.assertEqual(len(meal2.ingredients), 4)