diff options
Diffstat (limited to 'archaeological_operations/tests.py')
| -rw-r--r-- | archaeological_operations/tests.py | 105 | 
1 files changed, 103 insertions, 2 deletions
| diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index 4f9f73a43..612156df2 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -30,8 +30,8 @@ from django.core.urlresolvers import reverse  from django.db.models import Q  from django.test.client import Client -from django.contrib.auth.models import User -from django.contrib.auth.models import Permission +from django.contrib.auth.models import User, Permission +from django.utils.translation import ugettext_lazy as _  import models  from archaeological_operations import views @@ -475,6 +475,107 @@ class ImportOperationTest(ImportTest, TestCase):          self.assertEqual(ope2.data, {u'autre_refs': {u'arbitraire': 456}}) +class ImportStepByStepTest(ImportTest, TestCase): +    fixtures = OPERATION_TOWNS_FIXTURES + +    def test_step_by_step_import(self): +        create_user() + +        importer, form = self.init_ope_import() +        impt = form.save(self.ishtar_user) +        impt.initialize() +        self.init_ope_targetkey(imp=impt) +        c = Client() + +        first_person_nb = Person.objects.count() +        first_ope_nb = models.Operation.objects.count() +        import_url = reverse('import_step_by_step', +                             kwargs={'pk': impt.pk, 'line_number': 2}) +        response = c.get(import_url) +        # no login redirect +        self.assertEqual(response.status_code, 302) +        self.assertRedirects(response, "/accounts/login/?next=" + import_url) + +        c.login(username=self.username, password=self.password) +        response = c.get(import_url) +        self.assertEqual(response.status_code, 200) +        # verify pagination for next link is OK +        self.assertIn('href="/import-step-by-step/{}/3/"'.format(impt.pk), +                      response.content) +        # creation have been evaluated +        self.assertIn( +            unicode(_(u"New objects will be created.")), +            response.content.decode('utf-8') +        ) + +        # import this line +        posted = {"valid": "import"} +        response = c.post(import_url, posted) +        self.assertEqual(response.status_code, 302) +        # successful import - go to the next line +        new_import_url = reverse('import_step_by_step', +                                 kwargs={'pk': impt.pk, 'line_number': 3}) +        self.assertRedirects(response, new_import_url) +        current_ope_nb = models.Operation.objects.count() +        self.assertEqual(current_ope_nb, first_ope_nb + 1) +        current_person_nb = Person.objects.count() +        self.assertEqual(current_person_nb, first_person_nb) + +        # re-import +        posted = {"valid": "import"} +        c.post(import_url, posted) +        # no changes +        current_ope_nb = models.Operation.objects.count() +        self.assertEqual(current_ope_nb, first_ope_nb + 1) +        current_person_nb = Person.objects.count() +        self.assertEqual(current_person_nb, first_person_nb) + +        # on import page, already imported is visible +        response = c.get(import_url) +        self.assertEqual(response.status_code, 200) +        self.assertIn( +            unicode(_(u"This line have been already imported.")), +            response.content.decode('utf-8') +        ) + +        # import next page +        next_import_url = reverse( +            'import_step_by_step', kwargs={'pk': impt.pk, 'line_number': 3}) +        posted = {"valid": "import"} +        c.post(next_import_url, posted) +        current_ope_nb = models.Operation.objects.count() +        self.assertEqual(current_ope_nb, first_ope_nb + 2) +        current_person_nb = Person.objects.count() +        self.assertEqual(current_person_nb, first_person_nb + 1) + +        # modifiy CSV with an invalid date +        posted = { +            "valid": "change-csv", +            "col-1": "4201", +            "col-2": "Bourgogne", +            "col-3": u"Fouille programmée", +            "col-4": u"Oppìdum de Paris 2", +            "col-5": u"L'opérateur", +            "col-6": u"", +            "col-7": "2000/01/32", +            "col-8": "2002/12/31", +            "col-9": "Age du Fer", +        } +        response = c.post(import_url, posted) +        self.assertEqual(response.status_code, 200) +        # modification have been made in the source CSV +        with open(impt.imported_file.path) as fle: +            fle.readline()  # header +            imported_line = fle.readline() +            self.assertIn("2000/01/32", imported_line) +        # error detected on the source file +        error = unicode(_( +            u"The following error(s) has been encountered while parsing " +            u"the source file:") +        ) +        self.assertIn(error, response.content.decode('utf-8')) + +  class ParcelTest(ImportTest, TestCase):      fixtures = OPERATION_TOWNS_FIXTURES | 
