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)