Beispiel #1
0
def item_listing(self):
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']

    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    response = self.app.get('/{}/items'.format(self.resource_id))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(len(response.json['data']),
                     len(self.initial_data['items']))

    response = self.app.post_json('/{}/items'.format(self.resource_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"])

    response = self.app.get('/{}/items'.format(self.resource_id))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(len(response.json['data']),
                     len(self.initial_data['items']) + 1)
Beispiel #2
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, '/{}'.format(self.resource_id), 'composing',
                           self.access_header)
    lot = add_lot_decision(self, self.resource_id, self.access_header)
    add_lot_related_process(self, self.resource_id, self.access_header)
    add_auctions(self, lot, self.access_header)
    check_patch_status_200(self, '/{}'.format(self.resource_id),
                           'verification', self.access_header)

    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) lot status')
Beispiel #3
0
def auctionPeriod_endDate_blacklisted(self):
    response = self.app.get('/{}/auctions'.format(self.resource_id))
    auctions = sorted(response.json['data'], key=lambda a: a['tenderAttempts'])

    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']
    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    english = auctions[0]

    # Change auctionPeriod
    data = {
        'auctionPeriod': {
            'startDate': (datetime.now(TZ) + timedelta(1)).isoformat(),
            'endDate': (datetime.now(TZ) + timedelta(10)).isoformat()
        }
    }

    response = self.app.patch_json('/{}/auctions/{}'.format(
        self.resource_id, english['id']),
                                   headers=self.access_header,
                                   params={'data': data})
    self.assertEqual(response.json['data']['auctionPeriod']['startDate'],
                     data['auctionPeriod']['startDate'])
    self.assertNotIn('endDate', response.json['data']['auctionPeriod'])
Beispiel #4
0
def patch_auctions_with_lot(self):
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']
    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    self.app.authorization = ('Basic', ('broker', ''))

    response = create_single_lot(self, self.initial_data)
    lot = response.json['data']
    token = response.json['access']['token']
    access_header = {'X-Access-Token': str(token)}

    # Move from 'draft' to 'pending' status
    check_patch_status_200(self, '/{}'.format(lot['id']), 'composing',
                           access_header)
    lot = add_lot_decision(self, lot['id'], access_header)
    add_lot_related_process(self, lot['id'], access_header)
    add_auctions(self, lot, access_header)
    check_patch_status_200(self, '/{}'.format(lot['id']), 'verification',
                           access_header)

    self.app.authorization = ('Basic', ('concierge', ''))

    check_patch_status_200(self, '/{}'.format(lot['id']), 'verification')
    add_decisions(self, lot)
    check_patch_status_200(self,
                           '/{}'.format(lot['id']),
                           'pending',
                           extra={'items': [test_loki_item_data]})

    self.app.authorization = ('Basic', ('broker', ''))

    data = deepcopy(lot)
    del data['decisions']
    del data['status']
    data['auctions'][0]['tenderAttempts'] = 3
    data['auctions'][0]['procurementMethodType'] = 'sellout.insider'
    response = self.app.patch_json(
        '/{}'.format(lot['id']),
        headers=access_header,
        params={'data': data},
    )
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['data']['auctions'][0]['tenderAttempts'], 1)
    self.assertEqual(
        response.json['data']['auctions'][0]['procurementMethodType'],
        'sellout.english')

    response = self.app.get('/{}/auctions'.format(lot['id']))
    auctions = sorted(response.json['data'], key=lambda a: a['tenderAttempts'])
    english = auctions[0]
    self.assertEqual(english['tenderAttempts'], 1)
    self.assertEqual(english['procurementMethodType'], 'sellout.english')
Beispiel #5
0
def rectificationPeriod_auction_workflow(self):
    rectificationPeriod = Period()
    rectificationPeriod.startDate = get_now() - timedelta(3)
    rectificationPeriod.endDate = calculate_business_date(
        rectificationPeriod.startDate, timedelta(1), None)
    data = deepcopy(self.initial_auctions_data)

    lot = self.create_resource()

    # Change rectification period in db
    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    fromdb = self.db.get(lot['id'])
    fromdb = Lot(fromdb)

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

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

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

    response = self.app.get('/{}/auctions'.format(self.resource_id))
    auctions = sorted(response.json['data'], key=lambda a: a['tenderAttempts'])
    english = auctions[0]

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

    self.app.authorization = ('Basic', ('concierge', ''))
    response = self.app.patch_json('/{}/auctions/{}'.format(
        lot['id'], english['id']),
                                   headers=self.access_header,
                                   params={'data': data['english']},
                                   status=200)
    self.assertEqual(response.status, '200 OK')

    self.app.authorization = ('Basic', ('convoy', ''))
    response = self.app.patch_json('/{}/auctions/{}'.format(
        lot['id'], english['id']),
                                   headers=self.access_header,
                                   params={'data': data['english']},
                                   status=200)
    self.assertEqual(response.status, '200 OK')
Beispiel #6
0
def procurementMethodDetails_check_with_sandbox(self):
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']
    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    # Test procurementMethodDetails after creating lot
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']
    english = response.json['data']['auctions'][0]
    second_english = response.json['data']['auctions'][1]
    insider = response.json['data']['auctions'][2]

    self.assertNotIn('procurementMethodDetails', english)
    self.assertNotIn('procurementMethodDetails', second_english)
    self.assertNotIn('procurementMethodDetails', insider)

    auction_param_with_procurementMethodDetails = {
        'procurementMethodDetails': 'quick'
    }

    # Test procurementMethodDetails after update second english
    response = self.app.patch_json(
        '/{}/auctions/{}'.format(lot['id'], second_english['id']),
        {'data': auction_param_with_procurementMethodDetails},
        headers=self.access_header)
    self.assertEqual(
        response.json['data']['procurementMethodDetails'],
        auction_param_with_procurementMethodDetails['procurementMethodDetails']
    )

    # Test procurementMethodDetails after update insider
    response = self.app.patch_json(
        '/{}/auctions/{}'.format(lot['id'], insider['id']),
        {'data': auction_param_with_procurementMethodDetails},
        headers=self.access_header)
    self.assertEqual(
        response.json['data']['procurementMethodDetails'],
        auction_param_with_procurementMethodDetails['procurementMethodDetails']
    )

    # Test procurementMethodDetails after update english
    response = self.app.patch_json(
        '/{}/auctions/{}'.format(lot['id'], english['id']),
        {'data': auction_param_with_procurementMethodDetails},
        headers=self.access_header)
    self.assertEqual(
        response.json['data']['procurementMethodDetails'],
        auction_param_with_procurementMethodDetails['procurementMethodDetails']
    )
Beispiel #7
0
def update_items_in_forbidden(self):
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']

    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    response = self.app.post_json('/{}/items'.format(self.resource_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"])

    data = self.initial_item_data
    data['quantity'] = 99.9999
    for status in self.forbidden_item_statuses_modification:
        self.set_status(status)
        response = self.app.patch_json('/{}/items/{}'.format(
            self.resource_id, item_id),
                                       headers=self.access_header,
                                       params={"data": data},
                                       status=403)
        self.assertEqual(response.status, '403 Forbidden')
        self.assertEqual(response.content_type, 'application/json')
        self.assertEqual(
            response.json['errors'][0]["description"],
            "Can't update item in current ({}) {} status".format(
                status, self.resource_name[:-1]))

    for status in self.forbidden_item_statuses_modification:
        self.set_status(status)
        response = self.app.post_json('/{}/items'.format(self.resource_id),
                                      headers=self.access_header,
                                      params={"data": self.initial_item_data},
                                      status=403)
        self.assertEqual(response.status, '403 Forbidden')
        self.assertEqual(response.content_type, 'application/json')
        self.assertEqual(
            response.json['errors'][0]["description"],
            "Can't update item in current ({}) {} status".format(
                status, self.resource_name[:-1]))
Beispiel #8
0
def patch_decisions_with_lot_by_concierge(self):
    self.app.authorization = ('Basic', ('broker', ''))
    self.initial_status = 'draft'
    self.create_resource()

    decision_data = [{
        'decisionID': 'decID',
        'decisionDate': get_now().isoformat(),
        'relatedItem': '1' * 32,
        'decisionOf': 'asset'
    }]
    decision_data = {'decisions': decision_data}

    check_patch_status_200(self, '/{}'.format(self.resource_id), 'composing',
                           self.access_header)
    add_lot_decision(self, self.resource_id, self.access_header)
    lot = add_lot_related_process(self, self.resource_id, self.access_header)
    add_auctions(self, lot, self.access_header)
    check_patch_status_200(self, '/{}'.format(self.resource_id),
                           'verification', self.access_header)

    self.app.authorization = ('Basic', ('concierge', ''))
    response = self.app.patch_json('/{}'.format(self.resource_id),
                                   params={'data': decision_data},
                                   headers=self.access_header)
    decision = response.json['data']['decisions'][0]
    self.assertEqual(decision['decisionID'],
                     decision_data['decisions'][0]['decisionID'])
    self.assertEqual(decision['decisionDate'],
                     decision_data['decisions'][0]['decisionDate'])
    self.assertEqual(decision['relatedItem'],
                     decision_data['decisions'][0]['relatedItem'])
    self.assertEqual(decision['decisionOf'],
                     decision_data['decisions'][0]['decisionOf'])
    decision_id = decision['id']

    response = self.app.get('/{}/decisions/{}'.format(self.resource_id,
                                                      decision_id))
    self.assertEqual(response.json['data']['id'], decision_id)
    self.assertEqual(response.json['data']['decisionID'],
                     decision_data['decisions'][0]['decisionID'])
    self.assertEqual(response.json['data']['decisionDate'],
                     decision_data['decisions'][0]['decisionDate'])
    self.assertEqual(response.json['data']['relatedItem'],
                     decision_data['decisions'][0]['relatedItem'])
    self.assertEqual(response.json['data']['decisionOf'],
                     decision_data['decisions'][0]['decisionOf'])
Beispiel #9
0
def patch_auction_by_concierge(self):
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']
    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    data = deepcopy(self.initial_auctions_data)
    response = self.app.get('/{}/auctions'.format(self.resource_id))
    auctions = sorted(response.json['data'], key=lambda a: a['tenderAttempts'])
    english = auctions[0]
    data['english']['minimalStep']['amount'] = 99

    response = self.app.patch_json('/{}/auctions/{}'.format(
        self.resource_id, english['id']),
                                   headers=self.access_header,
                                   params={'data': data['english']})

    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['data']['id'], english['id'])
    self.assertEqual(response.json['data']['tenderAttempts'], 1)
    self.assertEqual(response.json['data']['value'], data['english']['value'])
    self.assertEqual(response.json['data']['minimalStep'],
                     data['english']['minimalStep'])
    self.assertEqual(response.json['data']['auctionPeriod'],
                     data['english']['auctionPeriod'])
    self.assertEqual(response.json['data']['guarantee'],
                     data['english']['guarantee'])
    self.assertNotIn('dutchSteps', response.json['data']['auctionParameters'])

    self.app.authorization = ('Basic', ('concierge', ''))

    response = self.app.patch_json('/{}/auctions/{}'.format(
        self.resource_id, english['id']),
                                   headers=self.access_header,
                                   params={
                                       'data': {
                                           'status': 'unsuccessful',
                                           'auctionID': 'someAuctionID',
                                           'relatedProcessID': '1' * 32
                                       }
                                   })
    self.assertEqual(response.json['data']['status'], 'unsuccessful')
    self.assertEqual(response.json['data']['auctionID'], 'someAuctionID')
    self.assertEqual(response.json['data']['relatedProcessID'], '1' * 32)
Beispiel #10
0
def patch_decision(self):
    self.app.authorization = ('Basic', ('broker', ''))
    self.initial_status = 'draft'
    self.create_resource()

    check_patch_status_200(self, '/{}'.format(self.resource_id), 'composing',
                           self.access_header)
    add_lot_decision(self, self.resource_id, self.access_header)
    lot = add_lot_related_process(self, self.resource_id, self.access_header)
    add_auctions(self, lot, self.access_header)
    check_patch_status_200(self, '/{}'.format(self.resource_id),
                           'verification', self.access_header)

    self.app.authorization = ('Basic', ('concierge', ''))
    add_decisions(self, lot)
    check_patch_status_200(self,
                           '/{}'.format(self.resource_id),
                           'pending',
                           extra={'items': [test_loki_item_data]})

    self.app.authorization = ('Basic', ('broker', ''))
    decisions = self.app.get('/{}/decisions'.format(
        self.resource_id)).json['data']
    asset_decision_id = filter(lambda d: d['decisionOf'] == 'asset',
                               decisions)[0]['id']
    lot_decision_id = filter(lambda d: d['decisionOf'] == 'lot',
                             decisions)[0]['id']

    decision_data = {'title': 'Some Title'}
    response = self.app.patch_json('/{}/decisions/{}'.format(
        self.resource_id, asset_decision_id),
                                   params={'data': decision_data},
                                   status=403,
                                   headers=self.access_header)
    self.assertEqual(response.status, '403 Forbidden')
    self.assertEqual(
        response.json['errors'][0]['description'],
        'Can edit only decisions which have decisionOf equal to \'lot\'.')

    response = self.app.patch_json('/{}/decisions/{}'.format(
        self.resource_id, lot_decision_id),
                                   params={'data': decision_data},
                                   headers=self.access_header)
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.json['data']['id'], lot_decision_id)
    self.assertEqual(response.json['data']['title'], decision_data['title'])
def rectificationPeriod_document_workflow(self):
    rectificationPeriod = Period()
    rectificationPeriod.startDate = get_now() - timedelta(3)
    rectificationPeriod.endDate = calculate_business_date(
        rectificationPeriod.startDate, timedelta(1), None)

    lot = 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(lot['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.json['data']['id'], lot['id'])

    # Change rectification period in db
    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    fromdb = self.db.get(lot['id'])
    fromdb = Lot(fromdb)

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

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

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

    response = self.app.post_json('/{}/documents'.format(lot['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(
        lot['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(lot['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(lot['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(
        lot['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(lot['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')
Beispiel #12
0
def rectificationPeriod_item_workflow(self):
    rectificationPeriod = Period()
    rectificationPeriod.startDate = get_now() - timedelta(3)
    rectificationPeriod.endDate = calculate_business_date(
        rectificationPeriod.startDate, timedelta(1), None)

    lot = self.create_resource()
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']

    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    response = self.app.post_json('/{}/items'.format(lot['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(lot['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.json['data']['id'], lot['id'])

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

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

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

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

    response = self.app.post_json('/{}/items'.format(lot['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')

    response = self.app.patch_json('/{}/items/{}'.format(lot['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')
Beispiel #13
0
def patch_items_with_lot(self):
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']

    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    # Create lot in 'draft' status and move it to 'pending'
    initial_item_data = deepcopy(self.initial_item_data)
    del initial_item_data['id']

    response = create_single_lot(self, self.initial_data)
    lot = response.json['data']
    token = response.json['access']['token']
    access_header = {'X-Access-Token': str(token)}

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

    # Move from 'draft' to 'pending' status
    check_patch_status_200(self, '/{}'.format(lot['id']), 'composing',
                           access_header)
    add_lot_decision(self, lot['id'], access_header)
    lot = add_lot_related_process(self, lot['id'], access_header)
    add_auctions(self, lot, access_header)
    check_patch_status_200(self, '/{}'.format(lot['id']), 'verification',
                           access_header)

    self.app.authorization = ('Basic', ('concierge', ''))

    check_patch_status_200(self, '/{}'.format(lot['id']), 'verification')
    add_decisions(self, lot)
    check_patch_status_200(self,
                           '/{}'.format(lot['id']),
                           'pending',
                           extra={'items': [test_loki_item_data]})

    self.app.authorization = ('Basic', ('broker', ''))

    # Move from 'pending' to 'pending' status
    check_patch_status_200(self, '/{}'.format(lot['id']), 'pending',
                           access_header)

    response = self.app.post_json('/{}/items'.format(lot['id']),
                                  headers=access_header,
                                  params={'data': 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"])

    response = self.app.post_json('/{}/items'.format(lot['id']),
                                  headers=access_header,
                                  params={'data': 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"])

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

    data = {'items': [initial_item_data]}
    response = self.app.patch_json('/{}'.format(lot['id']),
                                   headers=access_header,
                                   params={'data': data})
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(len(response.json['data']['items']), 1)

    item_data = deepcopy(self.initial_item_data)
    item_data['id'] = uuid4().hex
    data = {'items': [item_data, item_data]}
    response = self.app.patch_json('/{}'.format(lot['id']),
                                   headers=access_header,
                                   params={'data': data},
                                   status=422)
    self.assertEqual(response.status, '422 Unprocessable Entity')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['errors'][0]['description'][0],
                     u'Item id should be uniq for all items')

    data = {'items': [item_data]}
    response = self.app.patch_json('/{}'.format(lot['id']),
                                   headers=access_header,
                                   params={'data': data})
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertNotEqual(response.json['data']['id'], item_data['id'])
Beispiel #14
0
def patch_item(self):
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']

    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    response = self.app.post_json('/{}/items'.format(self.resource_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"])

    response = self.app.patch_json(
        '/{}/items/{}'.format(self.resource_id, item_id),
        headers=self.access_header,
        params={
            "data": {
                "description":
                "new item description",
                "registrationDetails":
                self.initial_item_data['registrationDetails'],
                "unit":
                self.initial_item_data['unit'],
                "address":
                self.initial_item_data['address'],
                "quantity":
                self.initial_item_data['quantity'],
                "classification":
                self.initial_item_data['classification'],
            }
        })
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(item_id, response.json["data"]["id"])
    self.assertEqual(response.json["data"]["description"],
                     'new item description')

    # Test partial update
    response = self.app.patch_json('/{}/items/{}'.format(
        self.resource_id, item_id),
                                   headers=self.access_header,
                                   params={
                                       "data": {
                                           "description":
                                           "partial item update",
                                           "additionalClassifications": []
                                       }
                                   })
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(item_id, response.json["data"]["id"])
    self.assertEqual(response.json["data"]["description"],
                     'partial item update')
    self.assertNotIn('additionalClassifications', response.json['data'])
Beispiel #15
0
def procurementMethodDetails_check_without_sandbox(self):
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']
    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    # Test procurementMethodDetails after creating lot
    response = self.app.get('/{}'.format(self.resource_id))
    lot = response.json['data']
    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    english = response.json['data']['auctions'][0]
    second_english = response.json['data']['auctions'][1]
    insider = response.json['data']['auctions'][2]

    self.assertNotIn(
        'procurementMethodDetails',
        response.json['data']['auctions'][0],
    )
    self.assertNotIn(
        'procurementMethodDetails',
        response.json['data']['auctions'][1],
    )
    self.assertNotIn(
        'procurementMethodDetails',
        response.json['data']['auctions'][2],
    )

    auction_param_with_procurementMethodDetails = {
        'procurementMethodDetails': 'quick'
    }

    # Test procurementMethodDetails error while updating english
    response = self.app.patch_json(
        '/{}/auctions/{}'.format(lot['id'], english['id']),
        {'data': auction_param_with_procurementMethodDetails},
        headers=self.access_header,
        status=422)
    self.assertEqual(response.status, '422 Unprocessable Entity')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['errors'][0]['description'], u'Rogue field')
    self.assertEqual(response.json['errors'][0]['name'],
                     'procurementMethodDetails')

    # Test procurementMethodDetails error while updating english
    response = self.app.patch_json(
        '/{}/auctions/{}'.format(lot['id'], second_english['id']),
        {'data': auction_param_with_procurementMethodDetails},
        headers=self.access_header,
        status=422)
    self.assertEqual(response.status, '422 Unprocessable Entity')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['errors'][0]['description'], u'Rogue field')
    self.assertEqual(response.json['errors'][0]['name'],
                     'procurementMethodDetails')

    # Test procurementMethodDetails error while updating english
    response = self.app.patch_json(
        '/{}/auctions/{}'.format(lot['id'], insider['id']),
        {'data': auction_param_with_procurementMethodDetails},
        headers=self.access_header,
        status=422)
    self.assertEqual(response.status, '422 Unprocessable Entity')
    self.assertEqual(response.content_type, 'application/json')
    self.assertEqual(response.json['errors'][0]['description'], u'Rogue field')
    self.assertEqual(response.json['errors'][0]['name'],
                     'procurementMethodDetails')
def rectificationPeriod_document_workflow(self):
    rectificationPeriod = Period()
    rectificationPeriod.startDate = get_now() - timedelta(3)
    rectificationPeriod.endDate = calculate_business_date(rectificationPeriod.startDate,
                                                          timedelta(1),
                                                          None)

    lot = self.create_resource()

    response = self.app.get('/{}/auctions'.format(lot['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.content_type, 'application/json')
    auction_id = response.json["data"][0]['id']

    response = self.app.post_json('/{}/auctions/{}/documents'.format(lot['id'], auction_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(lot['id']))
    self.assertEqual(response.status, '200 OK')
    self.assertEqual(response.json['data']['id'], lot['id'])

    # Change rectification period in db
    self.set_status('draft')
    add_auctions(self, lot, access_header=self.access_header)
    self.set_status('pending')

    fromdb = self.db.get(lot['id'])
    fromdb = Lot(fromdb)

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

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

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

    response = self.app.post_json('/{}/auctions/{}/documents'.format(lot['id'], auction_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 add documents to auction after rectification period'
    )

    response = self.app.patch_json('/{}/auctions/{}/documents/{}'.format(lot['id'], auction_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('/{}/auctions/{}/documents/{}'.format(lot['id'], auction_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')