root / elixir / trunk / tests / test_fields.py @ 227

Revision 227, 3.7 kB (checked in by ged, 6 years ago)

rename test_movies to test_fields

Line 
1"""
2    simple test case
3"""
4
5from elixir import *
6
7def setup():
8    global Director, Movie, Actor, Media
9
10    class Director(Entity):
11        with_fields(
12            name = Field(Unicode(60))
13        )
14       
15        has_many('movies', of_kind='Movie', inverse='director')
16
17
18    class Movie(Entity):
19        """
20            simple movie class
21        """
22       
23        # columns
24        with_fields(
25            title = Field(Unicode(50)),
26            year = Field(Integer)
27        )
28       
29        # relationships
30        belongs_to('director', of_kind="Director", inverse='movies')
31       
32        has_and_belongs_to_many('actors', of_kind="Actor", inverse='movies')
33        has_one('media', of_kind='Media', inverse='movie')
34
35
36    class Actor(Entity):
37        with_fields(
38            name = Field(Unicode(60))
39        )
40       
41        has_and_belongs_to_many('movies', of_kind="Movie", inverse="actors")
42
43
44    class Media(Entity):
45        with_fields(
46            number = Field(Integer, primary_key=True)
47        )
48       
49        belongs_to('movie', of_kind='Movie', inverse='media')
50
51    metadata.bind = 'sqlite:///'
52       
53def teardown():
54    cleanup_all()
55
56
57class TestMovies(object):
58    def setup(self):
59        create_all()
60   
61    def teardown(self):
62        drop_all()
63        session.clear()
64   
65    def test_backref(self):
66        swars = Movie(title="Star Wars", year=1977)
67        glucas = Director(name="George Lucas")
68        swars.director = glucas
69
70        # does it work before a flush?
71        assert swars in glucas.movies
72
73    def test_bidirectional(self):
74        brunner = Movie(title="Blade Runner", year=1982)
75        alien = Movie(title="Alien", year=1979)
76        swars = Movie(title="Star Wars", year=1977)
77       
78        brunner.media = Media(number=1)
79        m = Media(number=7)
80        m.movie = alien
81       
82        rscott = Director(name="Ridley Scott")
83        glucas = Director(name="George Lucas")
84       
85        hford = Actor(name="Harrison Ford")
86        mhamill = Actor(name="Mark Hamill")
87        sweaver = Actor(name="Sigourney Weaver")
88       
89        rscott.movies.append(brunner) 
90        rscott.movies.append(alien)
91        swars.director = glucas
92       
93        swars.actors.append(hford)
94        swars.actors.append(mhamill)
95        alien.actors.append(sweaver)
96        brunner.actors.append(hford)
97       
98        session.flush()
99        session.clear()
100       
101        # directors
102        assert Movie.get_by(title="Alien").director is Director.get_by(name="Ridley Scott")
103        assert Director.get_by(name="Ridley Scott").name == "Ridley Scott"
104        assert Movie.get_by(title="Alien").director.name == "Ridley Scott"
105        assert Movie.get_by(title="Star Wars").director is Director.get_by(name="George Lucas")
106       
107        # movie
108        assert Movie.get_by(title="Blade Runner").year == 1982
109        assert Movie.get_by(title="Alien").year == 1979
110       
111        # actors
112        assert Actor.get_by(name="Harrison Ford") in Movie.get_by(title="Blade Runner").actors
113        assert Actor.get_by(name="Harrison Ford") in Movie.get_by(title="Star Wars").actors
114        assert Movie.get_by(title="Star Wars") in Actor.get_by(name="Mark Hamill").movies
115        assert Movie.get_by(title="Blade Runner") in Actor.get_by(name="Harrison Ford").movies
116       
117        # media
118        assert Movie.get_by(title="Blade Runner").media is Media.get_by(number=1)
119        assert Movie.get_by(title="Blade Runner").media.number is Media.get_by(number=1).number
120        assert Actor.get_by(name="Sigourney Weaver") in Media.get_by(number=7).movie.actors
121
122if __name__ == '__main__':
123    setup()
124    test = TestMovies()
125    test.setup()
126    test.test_bidirectional()
127    test.teardown()
128    teardown()
Note: See TracBrowser for help on using the browser.