def test_autocommit_transaction(backend): backend.filter(Movie, {}).delete() try: backend.autocommit = True movie = Movie({'name': 'The Godfather', 'year': 1979, 'type': 'US'}) movie.save(backend) backend.delete(movie) movie.name = 'Star Wars IV' movie.save(backend) with pytest.raises(Movie.DoesNotExist): backend.get(Movie, { 'name': 'The Godfather', 'year': 1979, 'type': 'US' }) assert backend.get(Movie, { 'name': 'Star Wars IV', 'year': 1979 }) == movie assert len(backend.filter(Movie, {'type': 'US'})) == 1 finally: backend.autocommit = False
def test_advanced_transaction(backend): backend.begin() backend.filter(Movie, {}).delete() movie = Movie({'name': 'The Godfather', 'year': 1979, 'type': 'US'}) movie.save(backend) backend.commit() backend.delete(movie) movie.name = 'Star Wars IV' movie.save(backend) with pytest.raises(Movie.DoesNotExist): backend.get(Movie, { 'name': 'The Godfather', 'year': 1979, 'type': 'US' }) backend.rollback() assert backend.get(Movie, {'name': 'The Godfather', 'year': 1979}) == movie assert len(backend.filter(Movie, {'type': 'US'})) == 1
def test_advanced_transaction(transactional_backend): transactional_backend.begin() transactional_backend.filter(Movie, {}).delete() transactional_backend.rollback() movie = Movie({'title': 'The Godfather', 'year': 1979}) movie.save(transactional_backend) transactional_backend.commit() transactional_backend.delete(movie) movie.title = 'Star Wars IV' movie.save(transactional_backend) transactional_backend.rollback() assert transactional_backend.get(Movie, { 'title': 'The Godfather', 'year': 1979 }).title == 'The Godfather' assert transactional_backend.get(Movie, { 'title': 'The Godfather', 'year': 1979 }) == movie assert len(transactional_backend.filter(Movie, {'year': 1979})) == 1
def test_indexed_delete(backend): movie = Movie({'name': 'The Godfather'}) actor = Actor({'name': 'Marlon Brando'}) actor.performances = [movie] movie.cast = {'Don Corleone': actor} movie.save(backend)
def test_basic_storage(backend): #the dots will get encoded and should be decoded when loading the data... movie = Movie({"foo.bar.baz": "bar"}) with backend.transaction(): backend.save(movie) recovered_movie = backend.get(Movie, {}) assert 'foo.bar.baz' in recovered_movie and recovered_movie[ 'foo.bar.baz'] == 'bar'
def test_nested_value(backend): actor = Actor({'name' : 'Robert de Niro'}) movie = Movie({'best_actor' : actor,'title' : 'The Godfather'}) backend.save(actor) actor.movies = [movie] backend.save(actor) backend.commit() backend.save(movie) backend.commit() recovered_actor = backend.get(Actor,{'pk' : actor.pk}) assert recovered_actor == actor assert movie in recovered_actor.movies assert recovered_actor.movies[0] == movie assert 'best_actor' in recovered_actor.movies[0] assert recovered_actor.movies[0].best_actor == recovered_actor recovered_actors = backend.filter(Actor,{'movies.title' : 'The Godfather'}) assert len(recovered_actors) == 1 assert actor in recovered_actors