diff options
Diffstat (limited to 'archaeological_operations/tests.py')
-rw-r--r-- | archaeological_operations/tests.py | 202 |
1 files changed, 175 insertions, 27 deletions
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index a475667b1..1c63de93b 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 @@ -52,6 +57,41 @@ FILE_TOWNS_FIXTURES = OPERATION_TOWNS_FIXTURES + [ '../archaeological_files/fixtures/initial_data.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): def setUp(self): self.username, self.password, self.user = create_superuser() @@ -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): @@ -587,11 +628,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 +907,30 @@ 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) class OperationSearchTest(TestCase, OperationInitTest): @@ -980,7 +1037,7 @@ class OperationSearchTest(TestCase, OperationInitTest): 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 +1053,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 +1067,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 +1141,45 @@ class OperationWizardCreationTest(WizardTest, OperationInitTest, TestCase): FormData( "Create a preventive diag", form_datas={ - 'filechoice-operation_creation': {}, - 'general-operation_creation': { + 'filechoice': {}, + 'general': { 'operation_type': 1, # preventive diag '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': { + 'filechoice': {}, + 'general': { 'operation_type': 1, # preventive diag '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': 1, # preventive diag + 'year': 2016}, + 'towns': [], + 'parcels': [], + }, + ignored=('townsgeneral-operation_creation', + 'parcelsgeneral-operation_creation', + 'preventive-operation_creation') + ), ] def pre_wizard(self): @@ -1053,31 +1188,44 @@ 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}) + 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) + self.parcel_number + 3) class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase): @@ -1247,7 +1395,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 +1526,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) |