summaryrefslogtreecommitdiff
path: root/archaeological_operations/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_operations/tests.py')
-rw-r--r--archaeological_operations/tests.py202
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)