コード例 #1
0
ファイル: test_events.py プロジェクト: nahuelange/terra-back
    def setUp(self):
        UserRequestFactory(
            expiry=date.today(),
        )
        self.userrequest = UserRequestFactory(
            expiry=date.today() + timedelta(days=2),
        )
        UserRequestFactory(
            expiry=date.today() + timedelta(days=3),
        )

        self.handler_settings = {
            'model': 'terracommon.trrequests.models.UserRequest',
            'query': {
                'expiry': 'date.today() + timedelta(days=2)',
            },
            'actions': [
                {'action': 'USERREQUEST_IMPENDING_EXPIRY',
                 'kwargs': {
                     'user': '******',
                 }, },
                {'action': 'FAKE_ACTION',
                 'kwargs': {
                     'user': '******',
                 }, },
            ]
        }

        self.executor = ModelValueHandler(
            event="EVERY_DAY",
            settings=self.handler_settings,
        )
コード例 #2
0
 def test_has_object_permission_with_permissions(self):
     user_request = UserRequestFactory()
     user_request.owner = self.user
     self.assertTrue(
         self.permission.has_object_permission(
             self.request,
             self.view,
             user_request,
         )
     )
コード例 #3
0
 def setUp(self):
     self.permission = IsOwnerOrStaff()
     self.view = TestView.as_view()
     self.request = factory.get('/')  # we don't care about the path
     self.user = TerraUserFactory()
     self.request.user = self.user
     self.userrequest = UserRequestFactory()
コード例 #4
0
 def setUp(self):
     self.user = TerraUserFactory()
     self.userrequest = UserRequestFactory()
     self.docx_file = os.path.join(os.path.dirname(__file__), 'empty.docx')
     with open(self.docx_file, 'rb') as docx:
         self.template = DocumentTemplate.objects.create(
             name='emptydocx',
             documenttemplate=SimpleUploadedFile(
                 str(uuid4()),
                 docx.read()
             )
         )
     self.downloadable = DownloadableDocument.objects.create(
         user=self.user,
         document=self.template,
         linked_object=self.userrequest
     )
コード例 #5
0
ファイル: test_events.py プロジェクト: nahuelange/terra-back
class TimeDeltaHandlerTestCase(TestCase):

    def setUp(self):
        self.userrequest = UserRequestFactory()

    def test_handler(self):
        daysdelta = '20'

        args = {
            'instance': self.userrequest,
            'user': self.userrequest.owner,
        }

        # test with nested values
        executor = TimeDeltaHandler(
            'USERREQUEST_CREATED',
            {'daysdelta': daysdelta, 'field': 'properties.name.attribute'},
            **args)

        if executor.valid_condition():
            executor()

        self.userrequest.refresh_from_db()

        self.assertEqual(
            self.userrequest.properties['name']['attribute'],
            str(date.today() + timedelta(days=int(daysdelta)))
            )

        # test with expiry field
        executor = TimeDeltaHandler(
            'USERREQUEST_CREATED',
            {'daysdelta': daysdelta, 'field': 'expiry'},
            **args)

        if executor.valid_condition():
            executor()

        self.userrequest.refresh_from_db()

        self.assertEqual(
            self.userrequest.expiry,
            date.today() + timedelta(days=int(daysdelta))
            )
コード例 #6
0
    def setUp(self):
        template_path = os.path.join('terracommon', 'document_generator',
                                     'tests', 'test_template.odt')
        self.documenttemplate = DocumentTemplate.objects.create(
            name='test_template', documenttemplate=template_path)
        self.user = TerraUserFactory()
        self.userrequest = UserRequestFactory()
        self.downloadable_document = DownloadableDocument.objects.create(
            user=self.user,
            document=self.documenttemplate,
            linked_object=self.userrequest)

        self.serializer = DownloadableDocumentSerializer(
            self.downloadable_document)
コード例 #7
0
ファイル: test_command.py プロジェクト: nahuelange/terra-back
    def test_integration_with_SendEmailHandler(self):
        userrequests = []
        for i in range(0, 3):
            userrequests.append(
                UserRequestFactory(expiry=date.today() +
                                   timedelta(days=i + 1), ))
            userrequests[-1].reviewers.set([
                UserFactory(email=f'reviewer{i*2+1}@makina-corpus.com'),
                UserFactory(email=f'reviewer{i*2+2}@makina-corpus.com')
            ])

        signals = [{
            'action':
            'EVERY_DAY',
            'handler': ('terracommon.events.signals.handlers'
                        '.ModelValueHandler'),
            'settings': {
                'model': 'terracommon.trrequests.models.UserRequest',
                'query': {
                    'expiry': 'date.today() + timedelta(days=2)',
                },
                'actions': [
                    {
                        'action': 'USERREQUEST_WILL_EXPIRE_SOON',
                    },
                ]
            }
        }, {
            'action':
            'USERREQUEST_WILL_EXPIRE_SOON',
            'handler': ('terracommon.events.signals.handlers'
                        '.SendEmailHandler'),
            'settings': {
                'recipients':
                "instance['reviewers']",
                'subject_tpl':
                "A user request will expire",
                'body_tpl': ("The user request n°{instance[id]}"
                             " will expire in 2 days")
            }
        }]
        for signal in signals:
            EventHandler.objects.create(**signal)

        self.assertEqual(len(mail.outbox), 0)

        call_command('execute_action', '--action=EVERY_DAY')

        self.assertEqual(len(mail.outbox), 2)
        mail_signal = signals[1]
        userrequest = userrequests[1]
        for reviewer in userrequest.reviewers.all():
            reviewer_mails = list(
                filter(lambda m: reviewer.email in m.recipients(),
                       mail.outbox))
            self.assertEqual(len(reviewer_mails), 1)
            current_mail = reviewer_mails[0]
            format_kwargs = {'instance': model_to_dict(userrequest)}
            self.assertEqual(
                current_mail.subject,
                mail_signal.get('settings',
                                {}).get('subject_tpl',
                                        '').format(**format_kwargs))
            self.assertEqual(
                current_mail.body,
                mail_signal.get('settings',
                                {}).get('body_tpl',
                                        '').format(**format_kwargs))
コード例 #8
0
ファイル: test_events.py プロジェクト: nahuelange/terra-back
 def setUp(self):
     self.userrequest = UserRequestFactory()
コード例 #9
0
class DocumentGeneratorTestCase(TestCase):
    def setUp(self):
        self.user = TerraUserFactory()
        self.userrequest = UserRequestFactory()
        self.docx_file = os.path.join(os.path.dirname(__file__), 'empty.docx')
        with open(self.docx_file, 'rb') as docx:
            self.template = DocumentTemplate.objects.create(
                name='emptydocx',
                documenttemplate=SimpleUploadedFile(
                    str(uuid4()),
                    docx.read()
                )
            )
        self.downloadable = DownloadableDocument.objects.create(
            user=self.user,
            document=self.template,
            linked_object=self.userrequest
        )

    @patch('subprocess.run', side_effect=mock_libreoffice)
    def test_pdf_is_generated_from_enriched_docx(self, mock_run):
        # Patch libroffice call, that should write a pdf file of the same name
        # as temporary docx file

        # Now patch get_docx to return dumb content
        docx_path = os.path.join(os.path.dirname(__file__), 'empty.docx')
        with open(docx_path, 'rb') as docx_file:
            with patch.object(
                    DocumentGenerator, 'get_docx',
                    return_value=io.BytesIO(docx_file.read())
            ) as mock_docx:
                dg = DocumentGenerator(self.downloadable)
                pdf_path = dg.get_pdf()
                mock_docx.assert_called()
                os.remove(pdf_path)

    def test_everything_seems_to_work_without_variables(self):
        dg = DocumentGenerator(self.downloadable)
        dg.get_docx({})  # No exceptions are raised

    def test_everything_seems_to_work_with_variables(self):
        template_path = os.path.join(os.path.dirname(__file__),
                                     'template_with_img.docx')

        with open(template_path, 'rb') as template_fd:
            template = DocumentTemplate.objects.create(
                name='template_with_img',
                documenttemplate=SimpleUploadedFile(template_path,
                                                    template_fd.read())
            )
        downloadable = DownloadableDocument.objects.create(
            user=self.user,
            document=template,
            linked_object=self.userrequest
        )
        image_path = os.path.join(os.path.dirname(__file__), 'new_img.png')
        dg = DocumentGenerator(downloadable)
        dg.get_docx({
            'name': 'Makina Corpus',
            'logo': image_path,
        })  # No exceptions are raised

    def test_raises_exception_typeerror(self):
        with self.assertRaises(TypeError):
            DocumentGenerator('')

    @patch('terracommon.document_generator.helpers.logger')
    def test_raises_exception_when_template_is_not_found(self, mock_logger):
        dg = DocumentGenerator(self.downloadable)
        dg.get_docx = MagicMock(side_effect=FileNotFoundError)
        with self.assertRaises(FileNotFoundError):
            dg.get_pdf()
            mock_logger.warning.assert_called()

    @patch('subprocess.run', side_effect=mock_libreoffice)
    def test_cache_is_created(self, mock_run):
        dg = DocumentGenerator(self.downloadable)
        pdf_path = dg.get_pdf()

        self.assertTrue(os.path.isfile(pdf_path))
        os.remove(pdf_path)

    @patch('terracommon.document_generator.helpers.logger')
    def test_raises_templatesyntaxerror_exception(self, mock_logger):
        dg = DocumentGenerator(self.downloadable)
        dg.get_docx = MagicMock(side_effect=TemplateSyntaxError('', 0))

        with self.assertRaises(TemplateSyntaxError):
            dg.get_pdf()
            mock_logger.warning.assert_called()

    @patch('subprocess.run', side_effect=mock_libreoffice)
    def test_pdf_is_generated_again_when_data_are_updated(self, mock_run):
        dg = DocumentGenerator(self.downloadable)
        pdf_path = dg.get_pdf()
        pdf_mtime = os.path.getmtime(pdf_path)

        self.assertTrue(os.path.isfile(pdf_path))

        # Update the updated_at date
        self.userrequest.save()

        pdf_path_bis = dg.get_pdf()
        self.assertTrue(os.path.isfile(pdf_path_bis))
        self.assertNotEqual(os.path.getmtime(pdf_path_bis), pdf_mtime)
        os.remove(pdf_path_bis)