示例#1
0
def patch_decisions_with_lot_by_broker(self):
    self.app.authorization = ('Basic', ('broker', ''))
    self.initial_status = 'draft'
    self.create_resource(with_decisions=False)

    decision_data = [
        {
            'decisionID': 'decID',
            'decisionDate': get_now().isoformat()
        },
        {
            'decisionID': 'decID2',
            'decisionDate': get_now().isoformat()
        }
    ]
    decision_data = {
        'decisions': decision_data
    }

    response = self.app.patch_json(
        '/{}'.format(self.resource_id),
        params={'data': decision_data},
        headers=self.access_header
    )
    self.assertNotIn('decisions', response.json)
示例#2
0
 def rectificationPeriod_serializable(self):
     if self.status == 'pending' and not self.rectificationPeriod:
         self.rectificationPeriod = type(self).rectificationPeriod.model_class()
         self.rectificationPeriod.startDate = get_now()
         self.rectificationPeriod.endDate = calculate_business_date(self.rectificationPeriod.startDate,
                                                                    RECTIFICATION_PERIOD_DURATION,
                                                                    None)
示例#3
0
def create_decisions_with_asset(self):
    data = deepcopy(self.initial_data)
    decision_1 = {'id': '1' * 32,  'decisionID': 'decID',  'decisionDate': get_now().isoformat()}
    decision_2 = deepcopy(decision_1)
    decision_2['id'] = '2' * 32
    data['decisions'] = [
       decision_1, decision_2
    ]
    response = self.app.post_json('/', params={'data': data})
    decision_1['decisionOf'] = 'asset'
    decision_2['decisionOf'] = 'asset'

    self.assertEqual(response.status, '201 Created')
    self.assertEqual(len(response.json['data']['decisions']), 2)
    self.assertEqual(response.json['data']['decisions'][0], decision_1)
    self.assertEqual(response.json['data']['decisions'][1], decision_2)

    del decision_1['decisionOf']
    del decision_2['decisionOf']

    decision_2['id'] = '1' * 32
    data['decisions'] = [
       decision_1, decision_2
    ]
    response = self.app.post_json('/', params={'data': data}, status=422)
    self.assertEqual(response.status, '422 Unprocessable Entity')
    self.assertEqual(
        response.json['errors'][0]['description'][0],
        u'Decision id should be unique for all decisions'
    )
def rectificationPeriod_workflow(self):
    rectificationPeriod = Period()
    rectificationPeriod.startDate = get_now() - timedelta(3)
    rectificationPeriod.endDate = calculate_business_date(rectificationPeriod.startDate,
                                                          timedelta(1),
                                                          None)

    asset = self.create_resource()

    response = self.app.get('/{}'.format(asset['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.json['data']['id'], asset['id'])

    # Change rectification period in db
    fromdb = self.db.get(asset['id'])
    fromdb = self.asset_model(fromdb)

    fromdb.status = 'pending'
    fromdb.rectificationPeriod = rectificationPeriod
    fromdb = fromdb.store(self.db)

    self.assertEqual(fromdb.id, asset['id'])

    response = self.app.get('/{}'.format(asset['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.json['data']['id'], asset['id'])

    response = self.app.patch_json('/{}'.format(asset['id']),
                                   headers=self.access_header,
                                   params={'data': {'title': ' PATCHED'}})
    self.assertNotEqual(response.json['data']['title'], 'PATCHED')
    self.assertEqual(asset['title'], response.json['data']['title'])

    add_cancellationDetails_document(self, asset)
    check_patch_status_200(self, asset['id'], 'deleted', self.access_header)
示例#5
0
    def create_resource(self, extra=None, auth=None, with_decisions=True):
        resource = super(BaseAssetWebTest, self).create_resource(extra, auth)
        if with_decisions:
            current_status = resource['status']

            self.set_status('pending')
            response = self.app.get('/{}'.format(self.resource_id))
            old_decs_count = len(response.json['data'].get('decisions', []))

            decision_data = {
                'decisionDate': get_now().isoformat(),
                'decisionID': 'decisionLotID'
            }
            response = self.app.post_json('/{}/decisions'.format(
                self.resource_id), {"data": decision_data},
                                          headers=self.access_header)
            self.assertEqual(response.status, '201 Created')
            self.assertEqual(response.json['data']['decisionDate'],
                             decision_data['decisionDate'])
            self.assertEqual(response.json['data']['decisionID'],
                             decision_data['decisionID'])
            self.decision_id = response.json['data']['id']

            self.set_status(current_status)

            response = self.app.get('/{}'.format(self.resource_id))
            present_decs_count = len(response.json['data'].get(
                'decisions', []))
            self.assertEqual(old_decs_count + 1, present_decs_count)
            resource = response.json['data']

        return resource
def rectificationPeriod_item_workflow(self):
    rectificationPeriod = Period()
    rectificationPeriod.startDate = get_now() - timedelta(3)
    rectificationPeriod.endDate = calculate_business_date(
        rectificationPeriod.startDate, timedelta(1), None)

    asset = self.create_resource()

    response = self.app.post_json('/{}/items'.format(asset['id']),
                                  headers=self.access_header,
                                  params={'data': self.initial_item_data})
    self.assertEqual(response.status, '201 Created')
    self.assertEqual(response.content_type, 'application/json')
    item_id = response.json["data"]['id']
    self.assertIn(item_id, response.headers['Location'])
    self.assertEqual(self.initial_item_data['description'],
                     response.json["data"]["description"])
    self.assertEqual(self.initial_item_data['quantity'],
                     response.json["data"]["quantity"])
    self.assertEqual(self.initial_item_data['address'],
                     response.json["data"]["address"])
    item_id = response.json['data']['id']

    response = self.app.get('/{}'.format(asset['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.json['data']['id'], asset['id'])

    # Change rectification period in db
    fromdb = self.db.get(asset['id'])
    fromdb = Asset(fromdb)

    fromdb.status = 'pending'
    fromdb.rectificationPeriod = rectificationPeriod
    fromdb = fromdb.store(self.db)

    self.assertEqual(fromdb.id, asset['id'])

    response = self.app.get('/{}'.format(asset['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.json['data']['id'], asset['id'])

    response = self.app.post_json('/{}/items'.format(asset['id']),
                                  headers=self.access_header,
                                  params={'data': self.initial_item_data},
                                  status=403)
    self.assertEqual(response.status, '403 Forbidden')
    self.assertEqual(response.json['errors'][0]['description'],
                     'You can\'t change items after rectification period')

    self.assertEqual(response.json['errors'][0]['description'],
                     'You can\'t change items after rectification period')
    response = self.app.patch_json('/{}/items/{}'.format(asset['id'], item_id),
                                   headers=self.access_header,
                                   params={'data': self.initial_item_data},
                                   status=403)
    self.assertEqual(response.status, '403 Forbidden')
    self.assertEqual(response.json['errors'][0]['description'],
                     'You can\'t change items after rectification period')
def rectificationPeriod_item_validation(request, error_handler, **kwargs):
    asset = request.context if 'documents' in request.context else request.context.__parent__
    if asset.rectificationPeriod and asset.rectificationPeriod.endDate < get_now(
    ):
        request.errors.add(
            'body', 'mode',
            'You can\'t change items after rectification period')
        request.errors.status = 403
        raise error_handler(request)
示例#8
0
def dateModified_resource(self):
    response = self.app.get('/')
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(len(response.json['data']), 0)

    response = self.app.post_json('/', {'data': self.initial_data})
    self.assertEqual(response.status, '201 Created')
    resource = response.json['data']
    token = str(response.json['access']['token'])
    dateModified = resource['dateModified']

    response = self.app.get('/{}'.format(resource['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['data']['dateModified'], dateModified)

    # Add decision
    response = self.app.get('/{}'.format(resource['id']))
    old_decs_count = len(response.json['data'].get('decisions', []))

    decision_data = {
        'decisionDate': get_now().isoformat(),
        'decisionID': 'decisionLotID'
    }
    response = self.app.post_json('/{}/decisions'.format(resource['id']),
                                  {"data": decision_data},
                                  headers={'X-Access-Token': token})
    self.assertEqual(response.status, '201 Created')
    self.assertEqual(response.json['data']['decisionDate'],
                     decision_data['decisionDate'])
    self.assertEqual(response.json['data']['decisionID'],
                     decision_data['decisionID'])

    response = self.app.get('/{}'.format(resource['id']))
    present_decs_count = len(response.json['data'].get('decisions', []))
    self.assertEqual(old_decs_count + 1, present_decs_count)
    resource = response.json['data']

    response = self.app.patch_json('/{}'.format(resource['id']),
                                   headers={'X-Access-Token': token},
                                   params={'data': {
                                       'status': 'pending'
                                   }})
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['data']['status'], 'pending')

    self.assertNotEqual(response.json['data']['dateModified'], dateModified)
    resource = response.json['data']
    dateModified = resource['dateModified']

    response = self.app.get('/{}'.format(resource['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['data'], resource)
    self.assertEqual(response.json['data']['dateModified'], dateModified)
示例#9
0
def status_change_depending_actions(request):
    current_status = request.context.status
    new_status = request.validated['data'].get('status')

    if current_status == 'active' and new_status == 'pending':
        request.context.rectificationPeriod.endDate = None
        request.validated['data']['rectificationPeriod'] = {}
        request.validated['data']['rectificationPeriod']['endDate'] = None
    elif current_status == 'verification' and new_status == 'active':
        request.context.rectificationPeriod.endDate = get_now()
        request.validated['data']['rectificationPeriod'] = {}
        request.validated['data']['rectificationPeriod'][
            'endDate'] = request.context.rectificationPeriod.endDate
 def get_role(self):
     root = self.__parent__
     request = root.request
     if request.authenticated_role == 'Administrator':
         role = 'Administrator'
     elif request.authenticated_role == 'concierge':
         role = 'concierge'
     else:
         after_rectificationPeriod = bool(
             request.context.rectificationPeriod
             and request.context.rectificationPeriod.endDate < get_now())
         if request.context.status == 'pending' and after_rectificationPeriod:
             return 'edit_pendingAfterRectificationPeriod'
         role = 'edit_{}'.format(request.context.status)
     return role
def rectificationPeriod_document_validation(request, error_handler, **kwargs):
    asset = request.context if 'documents' in request.context else request.context.__parent__
    is_period_ended = bool(asset.rectificationPeriod
                           and asset.rectificationPeriod.endDate < get_now())
    if (is_period_ended and request.validated['document'].documentType !=
            'cancellationDetails') and request.method == 'POST':
        request.errors.add(
            'body', 'mode',
            'You can add only document with cancellationDetails after rectification period'
        )
        request.errors.status = 403
        raise error_handler(request)

    if is_period_ended and request.method in ['PUT', 'PATCH']:
        request.errors.add(
            'body', 'mode',
            'You can\'t change documents after rectification period')
        request.errors.status = 403
        raise error_handler(request)
示例#12
0
def create_or_patch_decision_in_not_allowed_status(self):
    self.app.authorization = ('Basic', ('broker', ''))
    self.initial_status = 'draft'
    self.create_resource()

    check_patch_status_200(self, self.resource_id, 'pending', self.access_header)

    self.app.authorization = ('Basic', ('concierge', ''))
    check_patch_status_200(self, self.resource_id, 'verification', self.access_header)

    self.app.authorization = ('Basic', ('broker', ''))
    decision_data = {
        'decisionDate': get_now().isoformat(),
        'decisionID': 'decisionLotID'
    }
    response = self.app.post_json(
        '/{}/decisions'.format(self.resource_id),
        {"data": decision_data},
        headers=self.access_header,
        status=403
    )
    self.assertEqual(response.status, '403 Forbidden')
    self.assertEqual(
        response.json['errors'][0]['description'],
        'Can\'t update decisions in current (verification) asset status'
    )

    response = self.app.patch_json(
        '/{}/decisions/{}'.format(self.resource_id, self.decision_id),
        {"data": decision_data},
        headers=self.access_header,
        status=403
    )
    self.assertEqual(response.status, '403 Forbidden')
    self.assertEqual(
        response.json['errors'][0]['description'],
        'Can\'t update decisions in current (verification) asset status'
    )
示例#13
0
def tender_init_handler(event):
    """ initialization handler for compound assets """
    event.asset.date = get_now()
def tender_init_handler(event):
    """ initialization handler for claimRights assets """
    event.asset.date = get_now()
test_item_data = deepcopy(test_loki_item_data)
del test_item_data['id']

# test_loki_item_data['schema_properties'] = schema_properties
asset_type = os.environ.get('ASSET_TYPE', 'bounce')
test_asset_bounce_data = {
    "title": u"Земля для космодрому",
    "description": u"Опис землі для космодрому",
    "assetType": asset_type,
    "items": [test_item_data, test_item_data],
    "assetCustodian": deepcopy(test_organization_loki)
}
test_asset_bounce_data_schema_0 = {
    "title": u"Земля для космодрому-0",
    "description": u"Опис землі для космодрому",
    "assetType": asset_type,
    "items": [test_item_data, test_item_data],
    "assetCustodian": deepcopy(test_organization_loki),
}

if SANDBOX_MODE:
    test_asset_bounce_data[
        'sandboxParameters'] = 'quick, accelerator={}'.format(
            DEFAULT_ACCELERATION)

test_decision_data = {
    'decisionDate': get_now().isoformat(),
    'decisionID': '1111-4'
}
示例#16
0
def rectificationPeriod_endDate_remove(self):
    data = deepcopy(self.initial_data)
    data['items'] = [deepcopy(test_loki_item_data)]

    response = self.app.post_json('/', params={'data': data})
    self.assertEqual(response.status, '201 Created')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['data']['status'], 'draft')
    asset = response.json['data']
    token = response.json['access']['token']
    access_header = {'X-Access-Token': str(token)}

    # Add decision
    decision_data = {
        'decisionDate': get_now().isoformat(),
        'decisionID': 'decisionLotID'
    }
    response = self.app.post_json('/{}/decisions'.format(asset['id']),
                                  {"data": decision_data},
                                  headers=access_header)
    self.assertEqual(response.status, '201 Created')
    self.assertEqual(response.json['data']['decisionDate'],
                     decision_data['decisionDate'])
    self.assertEqual(response.json['data']['decisionID'],
                     decision_data['decisionID'])
    self.decision_id = response.json['data']['id']

    response = self.app.patch_json('/{}'.format(asset['id']),
                                   params={'data': {
                                       'status': 'pending'
                                   }},
                                   headers=access_header)
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertIn('startDate', response.json['data']['rectificationPeriod'])
    self.assertNotIn('endDate', response.json['data']['rectificationPeriod'])

    rectificationPeriod_startDate = response.json['data'][
        'rectificationPeriod']['startDate']

    self.app.authorization = ('Basic', ('concierge', ''))
    check_patch_status_200(self, asset['id'], 'verification')
    check_patch_status_200(self,
                           asset['id'],
                           'active',
                           extra_data={'relatedLot': uuid4().hex})

    response = self.app.get('/{}'.format(asset['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['data']['rectificationPeriod']['startDate'],
                     rectificationPeriod_startDate)
    self.assertIn('endDate', response.json['data']['rectificationPeriod'])

    self.app.authorization = ('Basic', ('administrator', ''))
    response = self.app.patch_json(
        '/{}'.format(asset['id']),
        params={'data': {
            'rectificationPeriod': {
                'endDate': None
            }
        }},
    )
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertIn('startDate', response.json['data']['rectificationPeriod'])
    self.assertNotIn('endDate', response.json['data']['rectificationPeriod'])

    response = self.app.get('/{}'.format(asset['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertIn('startDate', response.json['data']['rectificationPeriod'])
    self.assertNotIn('endDate', response.json['data']['rectificationPeriod'])
def rectificationPeriod_document_workflow(self):
    rectificationPeriod = Period()
    rectificationPeriod.startDate = get_now() - timedelta(3)
    rectificationPeriod.endDate = calculate_business_date(
        rectificationPeriod.startDate, timedelta(1), None)

    asset = self.create_resource()

    response = self.app.post_json('/{}/documents'.format(self.resource_id),
                                  headers=self.access_header,
                                  params={'data': self.initial_document_data})
    self.assertEqual(response.status, '201 Created')
    self.assertEqual(response.content_type, 'application/json')
    doc_id = response.json["data"]['id']

    response = self.app.get('/{}'.format(asset['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.json['data']['id'], asset['id'])

    # Change rectification period in db
    fromdb = self.db.get(asset['id'])
    fromdb = Asset(fromdb)

    fromdb.status = 'pending'
    fromdb.rectificationPeriod = rectificationPeriod
    fromdb = fromdb.store(self.db)

    self.assertEqual(fromdb.id, asset['id'])

    response = self.app.get('/{}'.format(asset['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.json['data']['id'], asset['id'])

    response = self.app.post_json('/{}/documents'.format(asset['id']),
                                  headers=self.access_header,
                                  params={'data': self.initial_document_data},
                                  status=403)
    self.assertEqual(response.status, '403 Forbidden')
    self.assertEqual(
        response.json['errors'][0]['description'],
        'You can add only document with cancellationDetails after rectification period'
    )

    response = self.app.patch_json('/{}/documents/{}'.format(
        asset['id'], doc_id),
                                   headers=self.access_header,
                                   params={'data': self.initial_document_data},
                                   status=403)
    self.assertEqual(response.status, '403 Forbidden')
    self.assertEqual(response.json['errors'][0]['description'],
                     'You can\'t change documents after rectification period')

    response = self.app.put_json('/{}/documents/{}'.format(
        asset['id'], doc_id),
                                 headers=self.access_header,
                                 params={'data': self.initial_document_data},
                                 status=403)
    self.assertEqual(response.status, '403 Forbidden')
    self.assertEqual(response.json['errors'][0]['description'],
                     'You can\'t change documents after rectification period')

    test_document_data = {
        # 'url': self.generate_docservice_url(),
        'title': u'укр.doc',
        'hash': 'md5:' + '0' * 32,
        'format': 'application/msword',
        'documentType': 'cancellationDetails'
    }
    test_document_data['url'] = self.generate_docservice_url()

    response = self.app.post_json('/{}/documents'.format(asset['id']),
                                  headers=self.access_header,
                                  params={'data': test_document_data})
    self.assertEqual(response.status, '201 Created')
    self.assertEqual(response.content_type, 'application/json')
    doc_id = response.json["data"]['id']

    response = self.app.patch_json('/{}/documents/{}'.format(
        asset['id'], doc_id),
                                   headers=self.access_header,
                                   params={'data': self.initial_document_data},
                                   status=403)
    self.assertEqual(response.status, '403 Forbidden')
    self.assertEqual(response.json['errors'][0]['description'],
                     'You can\'t change documents after rectification period')

    response = self.app.put_json('/{}/documents/{}'.format(
        asset['id'], doc_id),
                                 headers=self.access_header,
                                 params={'data': self.initial_document_data},
                                 status=403)
    self.assertEqual(response.status, '403 Forbidden')
    self.assertEqual(response.json['errors'][0]['description'],
                     'You can\'t change documents after rectification period')
 def rectificationPeriod_serializable(self):
     if self.status == 'pending' and not self.rectificationPeriod:
         self.rectificationPeriod = type(
             self).rectificationPeriod.model_class()
         self.rectificationPeriod.startDate = get_now()
def tender_init_handler(event):
    """ initialization handler for bounce assets """
    asset = event.asset
    asset.date = get_now()
    asset.documents.append(type(asset).documents.model_class(INFORMATION_DETAILS))