root/pdw/tests/test_model.py @ 326:46fe057f2605

Revision 326:46fe057f2605, 3.9 KB (checked in by acracia, 6 months ago)

[api]to_dict method on the model, tailored to use as input of the api

Line 
1from datetime import datetime
2
3from pdw.tests import *
4
5import pdw.model as model 
6import pdw.model.sale
7
8
9class TestFRBR(object):
10    @classmethod
11    def setup_class(self):
12        self.fn = TestController.fxt_name
13        self.pfn = TestController.fxt_pname
14        self.title = TestController.fxt_title
15        self.ptitle = TestController.fxt_ptitle
16        TestController.create_fixtures()
17
18    @classmethod
19    def teardown_class(self):
20        TestController.teardown_fixtures()
21
22    def test_artist(self):
23        art2 = model.Person.query.filter_by(name=self.fn).one()
24        assert art2.birth_date == '1685'
25        assert art2.birth_date_normed == '1685'
26        assert art2.birth_date_ordered == 1685
27        assert art2.death_date == '1750'
28        assert art2.death_date_normed == '1750'
29        assert art2.death_date_ordered == 1750
30        assert art2.aka == u'The Greatest'
31        assert art2.srcid == TestController.fxt_srcid
32
33    def test_work(self):
34        work = model.Work.query.filter_by(title=self.title).one()
35        assert self.title == work.title
36        assert work.srcid == TestController.fxt_srcid
37        assert work.date == '1704'
38        assert work.date_normed == '1704'
39        assert work.date_ordered == 1704
40        print work
41        assert self.fn == work.persons[0].name
42        assert 1 == len(work.items)
43        print work
44        assert work.extras['source'] == 'made-up', work
45
46    def test_item(self):
47        rec = model.Item.query.filter_by(title=self.ptitle).one()
48        assert self.title == rec.works[0].title
49        assert rec.date == '1955'
50        assert rec.date_normed == '1955'
51        assert rec.date_ordered == 1955
52        assert rec.persons[0].name == self.pfn
53        assert rec.srcid == TestController.fxt_srcid
54        assert len(rec.persons) == 2
55   
56    def test_to_dict(self):
57        work = model.Work.query.filter_by(title=self.title).one()
58        out = work.to_dict()
59        assert out['title'] == work.title
60        assert len(out['persons']) == len(work.persons)
61        assert out['date'] == '1704', out
62        # test it serializes ok
63        outjson = model.json.dumps(out)
64        out2 = model.json.loads(outjson)
65        assert len(out2) == len(out)
66
67    def test_from_dict(self):
68        work = model.Work.query.filter_by(title=self.title).one()
69        ourid = work.id
70        model.Session.remove()
71
72        indict = { 'id': ourid }
73        outwork = model.Work.from_dict(indict)
74        assert outwork.title == self.title
75        model.Session.remove()
76
77        newtitle = u'a new title ...'
78        name1 = u'annakarenina'
79        name2 = u'levin'
80        indict = {
81            'title': newtitle,
82            'date': u'1881',
83            'type': u'text',
84            'persons': [
85                { 'name': name1, 'death_date': u'1887' },
86                { 'name': name2, 'death_date': u'1987' }
87                ]
88            }
89        outwork = model.Work.from_dict(indict)
90        assert isinstance(outwork, model.Work)
91        assert outwork.title == newtitle
92        assert outwork.date_ordered == 1881
93        assert len(outwork.persons) == 2, outwork
94
95
96class TestSale(object):
97    @classmethod
98    def setup_class(self):
99        self.fn = TestController.fxt_name
100        self.pfn = TestController.fxt_pname
101        self.title = TestController.fxt_title
102        self.ptitle = TestController.fxt_ptitle
103        TestController.create_fixtures()
104        item = model.Item.query.filter_by(title=self.ptitle).first()
105        sale = pdw.model.sale.Sale()
106        sale.item = item
107        sale.price = 10.0
108        sale.extras = {'abc': 1}
109        model.Session.commit()
110
111    @classmethod
112    def teardown_class(self):
113        for s in pdw.model.sale.Sale.query.all():
114            model.Session.delete(s)
115        TestController.teardown_fixtures()
116
117    def test_sale(self):
118        sale = pdw.model.sale.Sale.query.all()[0]
119        assert sale.item is not None
120        assert sale.price == 10.0
121        assert sale.extras['abc'] == 1
Note: See TracBrowser for help on using the browser.