def test_success_post_resolution_without_report(self):
        self.app.authorization = ('Basic', (self.sas_name, self.sas_pass))
        response = self.app.get('/monitorings/{}'.format(self.monitoring_id))
        conclusion_published = response.json["data"]["conclusion"][
            "datePublished"]
        allow_post_since = calculate_normalized_business_date(
            parse_date(conclusion_published), RESOLUTION_WAIT_PERIOD)
        request_data = self.get_elimination_resolution()
        with freeze_time(allow_post_since):
            response = self.app.patch_json(
                '/monitorings/{}'.format(self.monitoring_id),
                {"data": {
                    "eliminationResolution": request_data,
                }},
            )

        resolution = response.json["data"]["eliminationResolution"]
        self.assertEqual(resolution["result"], request_data["result"])
        self.assertEqual(resolution["resultByType"],
                         request_data["resultByType"])
        self.assertEqual(resolution["description"],
                         request_data["description"])
        self.assertEqual(resolution["dateCreated"],
                         allow_post_since.isoformat())
        self.assertEqual(len(resolution["documents"]),
                         len(request_data["documents"]))
def validate_posting_elimination_resolution(request):
    monitoring = request.validated['monitoring']
    monitoring.eliminationResolution.datePublished = monitoring.eliminationResolution.dateCreated
    if not monitoring.eliminationReport:
        accelerator = get_monitoring_accelerator(request.context)
        allow_post_since = calculate_normalized_business_date(
            monitoring.conclusion.datePublished, RESOLUTION_WAIT_PERIOD,
            accelerator)
        if get_now() < allow_post_since:
            raise_operation_error(
                request,
                "Can't post eliminationResolution without eliminationReport "
                "earlier than {} business days since conclusion.datePublished".
                format(RESOLUTION_WAIT_PERIOD.days))
Example #3
0
 def collection_post(self):
     """
     Post a post
     """
     monitoring = self.context
     post = self.request.validated['post']
     set_author(post, self.request, 'author')
     set_author(post.documents, self.request, 'author')
     upload_objects_documents(self.request, post)
     if post.author == get_monitoring_role('sas') and post.relatedPost is None:
         accelerator = get_monitoring_accelerator(self.context)
         post.dateOverdue = calculate_normalized_business_date(get_now(), POST_OVERDUE_TIME, accelerator)
     if monitoring.status in (ADDRESSED_STATUS, DECLINED_STATUS):
         post.postOf = CONCLUSION_OBJECT_TYPE
     monitoring.posts.append(post)
     if save_monitoring(self.request):
         self.LOGGER.info('Created monitoring post {}'.format(post.id),
                          extra=context_unpack(self.request,
                                               {'MESSAGE_ID': 'monitoring_post_create'},
                                               {'POST_ID': post.id}))
         self.request.response.status = 201
         self.request.response.headers['Location'] = self.request.route_url(
             'Monitoring Post', monitoring_id=monitoring.id, post_id=post.id)
         return {'data': post.serialize('view')}
 def test_ends_after_non_working(self):
     date = datetime(2018, 1, 2, 12, 0, 0, tzinfo=TZ)
     result = calculate_normalized_business_date(date, timedelta(days=4))
     self.assertEqual(result, datetime(2018, 1, 10, 0, 0, 0, tzinfo=TZ))
 def test_starts_on_non_working_before_non_working(self):
     date = datetime(2017, 12, 31, 12, 0, 0, tzinfo=TZ)
     result = calculate_normalized_business_date(date, timedelta(days=1))
     self.assertEqual(result, datetime(2018, 1, 3, 0, 0, 0, tzinfo=TZ))
Example #6
0
    def patch(self):
        monitoring = self.request.validated['monitoring']
        monitoring_old_status = monitoring.status
        elimination_resolution = monitoring.eliminationResolution

        apply_patch(self.request,
                    save=False,
                    src=self.request.validated['monitoring_src'])

        now = get_now()
        if monitoring_old_status == DRAFT_STATUS and monitoring.status == ACTIVE_STATUS:
            set_author(monitoring.decision.documents, self.request, 'author')
            accelerator = get_monitoring_accelerator(self.context)
            monitoring.monitoringPeriod = generate_period(
                now, MONITORING_TIME, accelerator)
            monitoring.decision.datePublished = now
            monitoring.endDate = calculate_normalized_business_date(
                now, MONITORING_TIME, accelerator)
        elif monitoring_old_status == ACTIVE_STATUS and monitoring.status == ADDRESSED_STATUS:
            set_author(monitoring.conclusion.documents, self.request, 'author')
            accelerator = get_monitoring_accelerator(self.context)
            monitoring.conclusion.datePublished = now
            monitoring.eliminationPeriod = generate_period(
                now, ELIMINATION_PERIOD_TIME, accelerator)
        elif monitoring_old_status == ACTIVE_STATUS and monitoring.status == DECLINED_STATUS:
            accelerator = get_monitoring_accelerator(self.context)
            monitoring.eliminationPeriod = generate_period(
                now, ELIMINATION_PERIOD_NO_VIOLATIONS_TIME, accelerator)
            monitoring.conclusion.datePublished = now
        elif any([
                monitoring_old_status == DRAFT_STATUS
                and monitoring.status == CANCELLED_STATUS,
                monitoring_old_status == ACTIVE_STATUS
                and monitoring.status == STOPPED_STATUS,
                monitoring_old_status == DECLINED_STATUS
                and monitoring.status == STOPPED_STATUS,
                monitoring_old_status == ADDRESSED_STATUS
                and monitoring.status == STOPPED_STATUS
        ]):
            set_author(monitoring.cancellation.documents, self.request,
                       'author')
            monitoring.cancellation.datePublished = now

        if not elimination_resolution and monitoring.eliminationResolution:
            validate_posting_elimination_resolution(self.request)
            monitoring.eliminationResolution.datePublished = monitoring.eliminationResolution.dateCreated

        # download (change urls of) documents for Decision, Conclusion, etc.
        raw_data = self.request.json.get("data", {})
        for key in raw_data.keys():
            if hasattr(getattr(monitoring, key, None),
                       "documents") and "documents" in raw_data[key]:
                upload_objects_documents(self.request,
                                         getattr(monitoring, key),
                                         key=key)

        save_monitoring(self.request, date_modified=now)
        LOGGER.info('Updated monitoring {}'.format(monitoring.id),
                    extra=context_unpack(self.request,
                                         {'MESSAGE_ID': 'monitoring_patch'}))
        return {'data': monitoring.serialize('view')}