summaryrefslogtreecommitdiff
path: root/ishtar/ishtar_base/tests.py
blob: 5a433b381f6cf7b7999d4ce136f2cd9fd594ce58 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (C) 2010-2011 Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet>

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.

# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# See the file COPYING for details.

"""
Unit tests
"""
import json

from django.test import TestCase

import models

class FileTest(TestCase):
    fixtures = ['user.json', 'person_type-fr.json', 'organization_type-fr.json',
                'treatment_type-fr.json']
    model = models.File

    def setUp(self):
        self.extra_models, self.model_list = {}, []
        user = models.IshtarUser.objects.get(pk=1)
        person_type = models.PersonType(label=u'Test person type',
                                        txt_idx='test_person', available=True)
        person_type.save()
        self.extra_models['person_type'] = person_type
        self.model_list.append(person_type)

        person = models.Person(title='Mr', surname='Surname', name='Name',
                               person_type=person_type, history_modifier=user)
        person.save()
        self.extra_models['person'] = person
        self.model_list.append(person)

        file_type = models.FileType(label=u'Test file type',
                                    txt_idx='test_file', available=True)
        file_type.save()
        self.extra_models['file_type'] = file_type
        self.model_list.append(file_type)

        dct = {'year':2010, 'numeric_reference':1000, 'file_type':file_type,
               'internal_reference':u'UNIT_testÉ ?', 'in_charge':person,
               'history_modifier':user, 'total_surface':10000}
        self.item = self.model(**dct)
        self.item.save()

    def tearDown(self):
        self.item.delete()
        for item in reversed(self.model_list):
            item.delete()

    def testAddAndGetHistorized(self):
        """
        Test correct new version and correct access to history
        """
        nb_hist = self.item.history.count()
        self.assertTrue(self.item.history.count() >= 1)
        base_label = self.item.internal_reference
        self.item.internal_reference = u"Unité_Test"
        self.item.save()
        self.failUnlessEqual(self.item.history.count(), nb_hist+1)
        self.failUnlessEqual(self.item.history.all()[1].internal_reference,
                             base_label)

    def testIntelligentHistorisation(self):
        """
        Test that to identical version are not recorded twice in the history
        """
        nb_hist = self.item.history.count()
        self.item.internal_reference = u"Unité_Test"
        self.item.save()
        self.failUnlessEqual(self.item.history.count(), nb_hist+1)
        nb_hist = self.item.history.count()
        self.item.save()
        self.failUnlessEqual(self.item.history.count(), nb_hist)

    def testRollbackFile(self):
        nb_hist = self.item.history.count()
        initial_values = self.item.values()
        backup_date = self.item.history.all()[0].history_date
        self.item.internal_reference = u"Unité_Test"
        self.item.save()
        self.item.rollback(backup_date)
        self.failUnlessEqual(self.item.history.count(), nb_hist)
        new_values = self.item.values()
        for k in initial_values.keys():
            self.assertTrue(k in new_values)
            self.assertEqual(new_values[k], initial_values[k])

    def testRESTGetFile(self):
        response = self.client.post('/get-file/',
                             {'numeric_reference':self.item.numeric_reference})
        self.assertEqual(response.status_code, 200)
        data = json.loads(response.content)
        self.assertTrue('records' in data)
        self.assertTrue(data['records'] == 1)

    def testRESTGetOldFile(self):
        initial_ref = self.item.internal_reference
        new_ref = u"Unité_Test_old_file"
        new_ref = initial_ref != new_ref and new_ref or new_ref + u"extra"
        self.item.internal_reference = new_ref
        self.item.save()
        response = self.client.post('/get-file/',
                     {'numeric_reference':self.item.numeric_reference, 'old':1})
        self.assertEqual(response.status_code, 200)
        data = json.loads(response.content)
        self.assertTrue('records' in data)
        self.assertTrue(data['records'] == 1)
        self.assertEqual(data['rows'][0]['internal_reference'], initial_ref)