Exemplo n.º 1
0
    def test_commit_on_success_succeed(self):
        """
        If there aren't any exceptions, the data will get saved.
        """
        Reporter.objects.create(first_name="Alice", last_name="Smith")
        with transaction.commit_on_success():
            Reporter.objects.filter(first_name="Alice").delete()

        self.assertQuerysetEqual(Reporter.objects.all(), [])
Exemplo n.º 2
0
    def test_commit_on_success_with_using(self):
        """
        The commit_on_success context manager also works with a using argument.
        """
        with self.assertRaises(Exception):
            with transaction.commit_on_success(using="default"):
                self.create_reporter_and_fail()

        self.assertEqual(Reporter.objects.count(), 0)
Exemplo n.º 3
0
 def test_commit_on_success_succeed(self):
     """
     If there aren't any exceptions, the data will get saved.
     """
     Reporter.objects.create(first_name="Alice", last_name="Smith")
     remove_comitted_on_success = transaction.commit_on_success(
         self.remove_a_reporter
     )
     remove_comitted_on_success("Alice")
     self.assertEqual(list(Reporter.objects.all()), [])
Exemplo n.º 4
0
 def test_commit_on_success(self):
     """
     With the commit_on_success decorator, the transaction is only committed
     if the function doesn't throw an exception.
     """
     committed_on_success = transaction.commit_on_success(
         self.create_a_reporter_then_fail)
     self.assertRaises(Exception, committed_on_success, "Dirk", "Gently")
     # This time the object never got saved
     self.assertEqual(Reporter.objects.count(), 0)
Exemplo n.º 5
0
    def test_commit_on_success(self):
        """
        With the commit_on_success context manager, the transaction is only
        committed if the block doesn't throw an exception.
        """
        with self.assertRaises(Exception):
            with transaction.commit_on_success():
                self.create_reporter_and_fail()

        self.assertEqual(Reporter.objects.count(), 0)
Exemplo n.º 6
0
 def test_bad_sql(self):
     """
     Regression for #11900: If a function wrapped by commit_on_success
     writes a transaction that can't be committed, that transaction should
     be rolled back. The bug is only visible using the psycopg2 backend,
     though the fix is generally a good idea.
     """
     execute_bad_sql = transaction.commit_on_success(self.execute_bad_sql)
     self.assertRaises(IntegrityError, execute_bad_sql)
     transaction.rollback()
Exemplo n.º 7
0
    def test_commit_on_success_exit(self):
        with transaction.autocommit():
            with transaction.commit_on_success():
                Reporter.objects.create(first_name="Bobby", last_name="Tables")

            # Much more formal
            r = Reporter.objects.get()
            r.first_name = "Robert"
            r.save()

        r = Reporter.objects.get()
        self.assertEqual(r.first_name, "Robert")
Exemplo n.º 8
0
 def test_commit_on_success_with_using(self):
     """
     The commit_on_success decorator also works with a using argument.
     """
     using_committed_on_success = transaction.commit_on_success(using='default')(
         self.create_a_reporter_then_fail
     )
     self.assertRaises(Exception,
         using_committed_on_success,
         "Dirk", "Gently"
     )
     # This time the object never got saved
     self.assertEqual(Reporter.objects.count(), 0)
Exemplo n.º 9
0
 def test_bad_sql(self):
     """
     Regression for #11900: If a block wrapped by commit_on_success
     writes a transaction that can't be committed, that transaction should
     be rolled back. The bug is only visible using the psycopg2 backend,
     though the fix is generally a good idea.
     """
     with self.assertRaises(IntegrityError):
         with transaction.commit_on_success():
             cursor = connection.cursor()
             cursor.execute("INSERT INTO transactions_reporter (first_name, last_name) VALUES ('Douglas', 'Adams');")
             transaction.set_dirty()
     transaction.rollback()