diff options
Diffstat (limited to 'archaeological_operations/tests.py')
| -rw-r--r-- | archaeological_operations/tests.py | 304 | 
1 files changed, 248 insertions, 56 deletions
| diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index a475667b1..ebaaa54ad 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -19,12 +19,15 @@  import json  import datetime +import StringIO +import zipfile  from django.conf import settings  from django.core.files.uploadedfile import SimpleUploadedFile  from django.core.urlresolvers import reverse  from django.test.client import Client +from django.contrib.auth.models import User  from django.contrib.auth.models import Permission  import models @@ -32,7 +35,9 @@ from archaeological_operations import views  from ishtar_common.models import OrganizationType, Organization, ItemKey, \      ImporterType, IshtarUser, TargetKey, ImporterModel, IshtarSiteProfile, \ -    Town, ImporterColumn, Person, Author, SourceType, AuthorType +    Town, ImporterColumn, Person, Author, SourceType, AuthorType, \ +    DocumentTemplate, PersonType +from archaeological_files.models import File, FileType  from archaeological_context_records.models import Unit  from ishtar_common import forms_common @@ -45,11 +50,46 @@ OPERATION_TOWNS_FIXTURES = \  FILE_FIXTURES = OPERATION_FIXTURES + [      settings.ROOT_PATH + -    '../archaeological_files/fixtures/initial_data.json'] +    '../archaeological_files/fixtures/initial_data-fr.json']  FILE_TOWNS_FIXTURES = OPERATION_TOWNS_FIXTURES + [      settings.ROOT_PATH + -    '../archaeological_files/fixtures/initial_data.json'] +    '../archaeological_files/fixtures/initial_data-fr.json'] + + +class FileInit(object): +    def login_as_superuser(self): +        self.client.login(username='username', password='tralala') + +    def create_file(self): +        self.extra_models, self.model_list = {}, [] +        self.user, created = User.objects.get_or_create(username='username', +                                                        is_superuser=True) +        self.user.set_password('tralala') +        self.user.save() +        self.o_user, created = User.objects.get_or_create(username='ousername') +        person_type, created = PersonType.objects.get_or_create( +            label=u'Test ' u'person type', txt_idx='test_person', +            available=True) +        self.extra_models['person_type'] = person_type +        self.model_list.append(person_type) + +        person = models.Person(surname='Surname', name='Name', +                               history_modifier=self.o_user) +        person.save() +        self.extra_models['person'] = person +        self.model_list.append(person) + +        file_type, created = FileType.objects.get_or_create( +            label=u'Test file type', txt_idx='test_file', available=True) +        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': self.o_user, 'total_surface': 10000} +        self.item = File(**dct) +        self.item.save()  class ImportTest(object): @@ -247,7 +287,8 @@ class ImportOperationTest(ImportTest, TestCase):          self.assertEqual(len(impt.errors), 2)          self.assertTrue(              "Importer configuration error" in impt.errors[0]['error'] or -            "Erreur de configuration de l\'importeur" in impt.errors[0]['error'] +            "Erreur de configuration de l\'importeur" in +            impt.errors[0]['error']          )      def test_model_limitation(self): @@ -575,7 +616,9 @@ def create_orga(user):  def create_operation(user, orga=None, values={}): -    dct = {'year': 2010, 'operation_type_id': 1, +    operation_type = models.OperationType.objects.get( +        txt_idx="arch_diagnostic") +    dct = {'year': 2010, 'operation_type_id': operation_type.pk,             'history_modifier': user}      dct.update(values)      if orga: @@ -587,11 +630,13 @@ def create_operation(user, orga=None, values={}):  class OperationInitTest(object):      def create_user(self):          username, password, self.user = create_user() +        return self.user      def get_default_user(self): -        if not hasattr(self, 'user') or not self.user: -            self.create_user() -        return self.user +        q = User.objects.filter(is_superuser=False) +        if q.count(): +            return q.all()[0] +        return self.create_user()      def create_orgas(self, user=None):          if not user: @@ -864,16 +909,37 @@ class OperationTest(TestCase, OperationInitTest):      def test_show(self):          operation = self.operations[0] +        source = models.OperationSource.objects.create( +            operation=operation, title="Source title", +            source_type=models.SourceType.objects.all()[0] +        )          c = Client() +          response = c.get(reverse('show-operation', kwargs={'pk': operation.pk}))          self.assertEqual(response.status_code, 200)          # empty content when not allowed          self.assertEqual(response.content, "") +        response = c.get(reverse('show-operationsource', +                                 kwargs={'pk': source.pk})) +        self.assertEqual(response.status_code, 200) +        # empty content when not allowed +        self.assertEqual(response.content, "")          c.login(username=self.username, password=self.password)          response = c.get(reverse('show-operation', kwargs={'pk': operation.pk}))          self.assertEqual(response.status_code, 200)          self.assertIn('class="sheet"', response.content) +        response = c.get(reverse('show-operationsource', +                                 kwargs={'pk': source.pk})) +        self.assertEqual(response.status_code, 200) +        self.assertIn('class="sheet"', response.content) + +        response = c.get(reverse('show-operation', kwargs={'pk': operation.pk, +                                                           'type': 'odt'})) +        self.assertEqual(response.status_code, 200) +        f = StringIO.StringIO(response.content) +        z = zipfile.ZipFile(f) +        self.assertIsNone(z.testzip())  class OperationSearchTest(TestCase, OperationInitTest): @@ -978,9 +1044,28 @@ class OperationSearchTest(TestCase, OperationInitTest):          self.assertTrue(json.loads(response.content)['total'] == 1) +class DashboardTest(TestCase, OperationInitTest): +    fixtures = FILE_FIXTURES + +    def setUp(self): +        IshtarSiteProfile.objects.get_or_create( +            slug='default', active=True) +        self.username, self.password, self.user = create_superuser() +        self.orgas = self.create_orgas(self.user) +        self.operations = self.create_operation(self.user, self.orgas[0]) + +    def test_dashboard(self): +        url = 'dashboard-operation' +        c = Client() +        c.login(username=self.username, password=self.password) + +        response = c.get(reverse(url)) +        self.assertEqual(response.status_code, 200) + +  def create_administrativact(user, operation):      act_type, created = models.ActType.objects.get_or_create( -        txt_idx='act_type') +        txt_idx='act_type_O', intented_to='O')      dct = {'history_modifier': user,             'act_type': act_type,             'operation': operation, @@ -996,7 +1081,7 @@ class RegisterTest(TestCase, OperationInitTest):      def setUp(self):          self.username, self.password, self.user = create_superuser()          self.operations = self.create_operation(self.user) -        self.act_types, self.operations = create_administrativact( +        self.act_types, self.admin_acts = create_administrativact(              self.user, self.operations[0])      def testSearch(self): @@ -1010,6 +1095,70 @@ class RegisterTest(TestCase, OperationInitTest):          response = c.get(reverse('get-administrativeact'), {'indexed': '2'})          self.assertTrue(json.loads(response.content)['total'] == 1) +    def test_document_generation(self): +        tpl = open( +            settings.ROOT_PATH + +            '../archaeological_operations/tests/document_reference.odt', +            'rb') +        template = SimpleUploadedFile(tpl.name, tpl.read()) +        doc = DocumentTemplate.objects.create( +            name="Test", +            associated_object_name=DocumentTemplate.CLASSNAMES[0][0], +            available=True, +            template=template +        ) +        self.act_types[0].associated_template.add(doc) + +        c = Client() +        data = {'pk': self.admin_acts[0].pk, 'document_template': doc.pk} +        response = c.post(reverse('operation-administrativeact-document'), data) +        # no result when no authentication +        self.assertEqual(response.content, "") +        c.login(username=self.username, password=self.password) +        response = c.post(reverse('operation-administrativeact-document'), data) +        try: +            f = StringIO.StringIO(response.content) +            z = zipfile.ZipFile(f) +            self.assertIsNone(z.testzip()) +            content = z.open('content.xml') +            self.assertIn('2014-05-12', content.read()) +        finally: +            content.close() +            z.close() +            f.close() + +    def test_document_migration(self): +        fe = FileInit() +        fe.create_file() + +        from archaeological_files.tests import create_administrativact as ca_fle +        ca_fle(self.user, fe.item) + +        tpl = open( +            settings.ROOT_PATH + +            '../ishtar_common/tests/old.odt', +            'rb') +        template = SimpleUploadedFile(tpl.name, tpl.read()) +        doc = DocumentTemplate.objects.create( +            name="Old", +            associated_object_name=DocumentTemplate.CLASSNAMES[0][0], +            available=True, +            template=template +        ) +        self.act_types[0].associated_template.add(doc) + +        doc.convert_from_v1() +        with open(doc.template.path) as f: +            try: +                z = zipfile.ZipFile(f) +                self.assertIsNone(z.testzip()) +                c = z.open('content.xml') +                content = c.read() +                self.assertIn('{{ adminact_operator_id }}', content) +            finally: +                c.close() +                z.close() +  class OperationWizardCreationTest(WizardTest, OperationInitTest, TestCase):      fixtures = FILE_FIXTURES @@ -1020,31 +1169,45 @@ class OperationWizardCreationTest(WizardTest, OperationInitTest, TestCase):          FormData(              "Create a preventive diag",              form_datas={ -                'filechoice-operation_creation': {}, -                'general-operation_creation': { -                    'operation_type': 1,  # preventive diag +                'filechoice': {}, +                'general': { +                    'operation_type': None,                      'year': 2016}, -                'townsgeneral-operation_creation': [], -                'parcelsgeneral-operation_creation': [], +                'townsgeneral': [], +                'parcelsgeneral': [],              },              ignored=('towns-operation_creation',                       'parcels-operation_creation', -                     'preventive-operation_creation',) +                     'preventive-operation_creation')          ),          FormData(              "Create another preventive diag with same parcel name",              form_datas={ -                'filechoice-operation_creation': {}, -                'general-operation_creation': { -                    'operation_type': 1,  # preventive diag +                'filechoice': {}, +                'general': { +                    'operation_type': None,                      'year': 2016}, -                'townsgeneral-operation_creation': [], -                'parcelsgeneral-operation_creation': [], +                'townsgeneral': [], +                'parcelsgeneral': [],              },              ignored=('towns-operation_creation',                       'parcels-operation_creation', -                     'preventive-operation_creation',) -        ) +                     'preventive-operation_creation') +        ), +        FormData( +            "Create an operation related to a file", +            form_datas={ +                'filechoice': {}, +                'general': { +                    'operation_type': None, +                    'year': 2016}, +                'towns': [], +                'parcels': [], +            }, +            ignored=('townsgeneral-operation_creation', +                     'parcelsgeneral-operation_creation', +                     'preventive-operation_creation') +        ),      ]      def pre_wizard(self): @@ -1053,29 +1216,48 @@ class OperationWizardCreationTest(WizardTest, OperationInitTest, TestCase):          profile.files = True          profile.save() -        if 'townsgeneral-operation_creation' not in \ +        if 'townsgeneral' not in \                  self.form_datas[0].form_datas:              return super(OperationWizardCreationTest, self).pre_wizard()          town = self.create_towns()[0]          town_data = {'town': town.pk}          self.form_datas[0].form_datas[ -            'townsgeneral-operation_creation'].append(town_data) +            'townsgeneral'].append(town_data)          self.form_datas[1].form_datas[ -            'townsgeneral-operation_creation'].append(town_data) +            'townsgeneral'].append(town_data)          parcel_data = {              'town': town.pk, 'year': 2017, 'section': 'S',              'parcel_number': '42'}          self.form_datas[0].form_datas[ -            'parcelsgeneral-operation_creation'].append(parcel_data) +            'parcelsgeneral'].append(parcel_data)          self.form_datas[1].form_datas[ -            'parcelsgeneral-operation_creation'].append(parcel_data) +            'parcelsgeneral'].append(parcel_data) + +        FI = FileInit() +        FI.create_file() +        file = FI.item +        file.towns.add(town) +        parcel = models.Parcel.objects.create( +            town=town, year=2017, section='G', parcel_number='43' +        ) +        file.parcels.add(parcel) +        self.form_datas[2].set('filechoice', 'associated_file', file.pk) +        self.form_datas[2].append('towns', town_data) +        self.form_datas[2].append('parcels', {'parcel': parcel.pk}) + +        # diagnostic +        ope_type = models.OperationType.objects.get(txt_idx='arch_diagnostic') +        self.form_datas[0].set('general', 'operation_type', ope_type.pk) +        self.form_datas[1].set('general', 'operation_type', ope_type.pk) +        self.form_datas[2].set('general', 'operation_type', ope_type.pk) +          self.operation_number = models.Operation.objects.count()          self.parcel_number = models.Parcel.objects.count()          super(OperationWizardCreationTest, self).pre_wizard()      def post_wizard(self):          self.assertEqual(models.Operation.objects.count(), -                         self.operation_number + 2) +                         self.operation_number + 3)          self.assertEqual(models.Parcel.objects.count(),                           self.parcel_number + 2) @@ -1099,36 +1281,36 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):          FormData(              "Update an operation",              form_datas={ -                'selec-operation_modification': {}, -                'general-operation_modification': { +                'selec': {}, +                'general': {                      'operation_type': 2,                      'year': 2017}, -                'townsgeneral-operation_modification': [], -                'parcelsgeneral-operation_modification': [], +                'townsgeneral': [], +                'parcelsgeneral': [],              },              ignored=base_ignored_steps          ),          FormData(              "Operation: try to remove a parcel with attached context record",              form_datas={ -                'selec-operation_modification': {}, -                'general-operation_modification': { +                'selec': {}, +                'general': {                      'operation_type': 2,                      'year': 2017}, -                'townsgeneral-operation_modification': [], -                'parcelsgeneral-operation_modification': [], +                'townsgeneral': [], +                'parcelsgeneral': [],              },              ignored=base_ignored_steps          ),          FormData(              "Operation: remove a parcel with no attached context record",              form_datas={ -                'selec-operation_modification': {}, -                'general-operation_modification': { +                'selec': {}, +                'general': {                      'operation_type': 2,                      'year': 2017}, -                'townsgeneral-operation_modification': [], -                'parcelsgeneral-operation_modification': [], +                'townsgeneral': [], +                'parcelsgeneral': [],              },              ignored=base_ignored_steps          ), @@ -1148,33 +1330,40 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):                     'history_modifier': self.get_default_user()}          self.cr = ContextRecord.objects.create(**cr_data) +        # diagnostic +        self.ope_type = models.OperationType.objects.get( +            txt_idx='prev_excavation') +        self.form_datas[0].set('general', 'operation_type', self.ope_type.pk) +        self.form_datas[1].set('general', 'operation_type', self.ope_type.pk) +        self.form_datas[2].set('general', 'operation_type', self.ope_type.pk) +          data = self.form_datas[0].form_datas          data2 = self.form_datas[1].form_datas          data3 = self.form_datas[2].form_datas -        data['selec-operation_modification']['pk'] = operation.pk -        data2['selec-operation_modification']['pk'] = operation.pk -        data3['selec-operation_modification']['pk'] = operation.pk +        data['selec']['pk'] = operation.pk +        data2['selec']['pk'] = operation.pk +        data3['selec']['pk'] = operation.pk          town = self.create_towns(              datas={'numero_insee': '67890', 'name': 'Twin Peaks'})[-1]          towns = [{'town': town.pk}, {'town': init_town.pk}] -        data['townsgeneral-operation_modification'] = towns -        data2['townsgeneral-operation_modification'] = towns -        data3['townsgeneral-operation_modification'] = towns +        data['townsgeneral'] = towns +        data2['townsgeneral'] = towns +        data3['townsgeneral'] = towns          parcel_data = {              'town': town.pk, 'year': 2017, 'section': 'S',              'parcel_number': '42'} -        data['parcelsgeneral-operation_modification'].append(parcel_data) -        data2['parcelsgeneral-operation_modification'].append(parcel_data) -        data3['parcelsgeneral-operation_modification'].append(parcel_data) +        data['parcelsgeneral'].append(parcel_data) +        data2['parcelsgeneral'].append(parcel_data) +        data3['parcelsgeneral'].append(parcel_data)          parcel_data_2 = {              'town': init_parcel.town.pk, 'year': init_parcel.year or '',              'section': init_parcel.section,              'parcel_number': init_parcel.parcel_number} -        data['parcelsgeneral-operation_modification'].append(parcel_data_2) +        data['parcelsgeneral'].append(parcel_data_2)          # no init parcel for data2 and data3          self.operation_number = models.Operation.objects.count() @@ -1185,7 +1374,8 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):                                      test_object.operation_number)              operation = models.Operation.objects.get(                  pk=test_object.operations[0].pk) -            test_object.assertEqual(operation.operation_type.pk, 2) +            test_object.assertEqual(operation.operation_type.pk, +                                    self.ope_type.pk)              test_object.assertEqual(operation.year, 2017)              test_object.assertEqual(models.Parcel.objects.count(),                                      test_object.parcel_number + 1) @@ -1197,7 +1387,8 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):                                      test_object.operation_number)              operation = models.Operation.objects.get(                  pk=test_object.operations[0].pk) -            test_object.assertEqual(operation.operation_type.pk, 2) +            test_object.assertEqual(operation.operation_type.pk, +                                    self.ope_type.pk)              test_object.assertEqual(operation.year, 2017)              test_object.assertEqual(models.Parcel.objects.count(),                                      test_object.parcel_number + 1) @@ -1217,7 +1408,8 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):                                      test_object.operation_number)              operation = models.Operation.objects.get(                  pk=test_object.operations[0].pk) -            test_object.assertEqual(operation.operation_type.pk, 2) +            test_object.assertEqual(operation.operation_type.pk, +                                    self.ope_type.pk)              test_object.assertEqual(operation.year, 2017)              # with no attach the parcel is deleted              test_object.assertEqual(operation.parcels.count(), @@ -1247,7 +1439,7 @@ class OperationWizardDeleteTest(OperationWizardCreationTest):      ]      def pass_test(self): -        if not settings.SOUTH_TESTS_MIGRATE: +        if not settings.TEST_VIEWS:              # with no migration the views are not created              return True @@ -1378,4 +1570,4 @@ class OperationSourceWizardModificationTest(WizardTest, OperationInitTest,      def post_wizard(self):          source = models.OperationSource.objects.get(pk=self.source.pk) -        self.assertEqual(source.authors.count(), 0)
\ No newline at end of file +        self.assertEqual(source.authors.count(), 0) | 
