root / elixir / trunk / tests / test_versioning.py @ 208

Revision 208, 3.4 kB (checked in by bbangert, 7 years ago)

Updated version test to reflect new version amounts.

Line 
1from elixir import *
2from elixir.ext.versioned import acts_as_versioned
3from datetime import datetime, timedelta
4
5import time
6
7
8def setup():
9    global Director, Movie, Actor
10
11    class Director(Entity):
12        has_field('name', Unicode(60))
13        has_many('movies', of_kind='Movie', inverse='director')
14        using_options(tablename='directors')
15
16
17    class Movie(Entity):
18        has_field('id', Integer, primary_key=True)
19        has_field('title', Unicode(60), primary_key=True)
20        has_field('description', Unicode(512))
21        has_field('releasedate', DateTime)
22        belongs_to('director', of_kind='Director', inverse='movies')
23        has_and_belongs_to_many('actors', of_kind='Actor', inverse='movies', tablename='movie_casting')
24        using_options(tablename='movies')
25        acts_as_versioned()
26
27
28    class Actor(Entity):
29        has_field('name', Unicode(60))
30        has_and_belongs_to_many('movies', of_kind='Movie', inverse='actors', tablename='movie_casting')
31        using_options(tablename='actors')
32
33    metadata.bind = 'sqlite:///'
34
35
36def teardown():
37    cleanup_all()
38
39
40class TestVersioning(object):
41    def setup(self):
42        create_all()
43   
44    def teardown(self):
45        drop_all()
46        objectstore.clear()
47   
48    def test_versioning(self):   
49        gilliam = Director(name='Terry Gilliam')
50        monkeys = Movie(id=1, title='12 Monkeys', description='draft description', director=gilliam)
51        bruce = Actor(name='Bruce Willis', movies=[monkeys])
52        objectstore.flush(); objectstore.clear()
53   
54        time.sleep(1)
55        after_create = datetime.now()
56        time.sleep(1)
57   
58        movie = Movie.get_by(title='12 Monkeys')
59        assert movie.version == 1
60        assert movie.title == '12 Monkeys'
61        assert movie.director.name == 'Terry Gilliam'
62        movie.description = 'description two'
63        objectstore.flush(); objectstore.clear()
64   
65        time.sleep(1)
66        after_update_one = datetime.now()
67        time.sleep(1)
68   
69        movie = Movie.get_by(title='12 Monkeys')
70        movie.description = 'description three'
71        objectstore.flush(); objectstore.clear()
72   
73        time.sleep(1)
74        after_update_two = datetime.now()
75        time.sleep(1)
76   
77        movie = Movie.get_by(title='12 Monkeys')
78        oldest_version = movie.get_as_of(after_create)
79        middle_version = movie.get_as_of(after_update_one)
80        latest_version = movie.get_as_of(after_update_two)
81   
82        initial_timestamp = oldest_version.timestamp
83   
84        assert oldest_version.version == 1
85        assert oldest_version.description == 'draft description'
86   
87        assert middle_version.version == 2
88        assert middle_version.description == 'description two'
89   
90        assert latest_version.version == 3
91        assert latest_version.description == 'description three'
92   
93        differences = latest_version.compare_with(oldest_version)
94        assert differences['description'] == ('description three', 'draft description')
95   
96        assert len(movie.versions) == 3
97        assert movie.versions[0] == oldest_version
98        assert movie.versions[1] == middle_version
99   
100        movie.revert_to(1)
101        objectstore.flush(); objectstore.clear()
102   
103        movie = Movie.get_by(title='12 Monkeys')
104        assert movie.version == 1
105        assert movie.timestamp == initial_timestamp
106        assert movie.title == '12 Monkeys'
107        assert movie.director.name == 'Terry Gilliam'
Note: See TracBrowser for help on using the browser.