Landlease procedure#1018
Landlease procedure#1018denis-quintagroup wants to merge 14 commits intoopenprocurement:eauction_cdb2from
Conversation
| @@ -1,5 +1,6 @@ | |||
| *** Settings *** | |||
| Resource keywords.robot | |||
| Resource base_keywords.robot | |||
There was a problem hiding this comment.
потрібно забрати keywords.robot, якщо імпортуєш base_keywords.robot, keywords.robot вже імпортується в base_keywords.robot
| # CONTRACT | ||
| ############################################################################################## | ||
|
|
||
|
|
| [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних угоди | ||
| ... viewer | ||
| ... ${USERS.users['${viewer}'].broker} | ||
| ... dateSigned_view |
There was a problem hiding this comment.
можна лишити один тег dateSigned
| return fake.dgfID() | ||
|
|
||
|
|
||
| def create_fake_dateSigned(): |
There was a problem hiding this comment.
може просто назвати create_fake_date
| Should Match Regexp ${url} ^https?:\/\/sandbox\.ea2\.openprocurement\.auction\/auctions\/([0-9A-Fa-f]{32}) | ||
| ${procurementMethodType}= Отримати дані із тендера ${viewer} ${TENDER['TENDER_UAID']} procurementMethodType | ||
| Log ${procurementMethodType} | ||
| Run Keyword If '${procurementMethodType}' == 'landLease' |
There was a problem hiding this comment.
можна привязати до MODE і не треба вичитувати procurementMethodType
| ... tender_owner | ||
| ... ${USERS.users['${tender_owner}'].broker} | ||
| ... modify_auction_rectificationPeriod_endDate | ||
| [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} |
There was a problem hiding this comment.
Оновити LAST_MODIFICATION_DATE після кожних змін. Тут і в наступних виправ
| ... modify_auction_registrationFee | ||
| [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | ||
| [Teardown] Оновити LAST_MODIFICATION_DATE | ||
| ${new_guarantee_amount}= create_fake_guarantee ${USERS.users['${tender_owner}'].new_amount} |
There was a problem hiding this comment.
можливо варто використовувати поле зі словника tender_data.data, так ТК буде універсальнішим
| ... ${USERS.users['${tender_owner}'].broker} | ||
| ... modify_auction_bankAccount | ||
| [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | ||
| ${new_bankAccount_bankName}= create_fake_bankName |
There was a problem hiding this comment.
тут враховано, що нове значення може співпасти зі старим і змін не відбудеться?
| ... modify_classification_id | ||
| [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | ||
| [Teardown] Оновити LAST_MODIFICATION_DATE | ||
| ${scheme_id}= Run As ${tender_owner} Отримати інформацію із об'єкта МП ${TENDER['TENDER_UAID']} items[0].classification.id |
There was a problem hiding this comment.
відображення цього поля має йти окремими ТК. Де дальше в ТК використовується змінна scheme_id?
| Неможливість подати цінову попрозицію без кваліфікації користувачем ${provider} | ||
|
|
||
|
|
||
| Можливість подати пропозицію в статусі драфт першим учасником |
There was a problem hiding this comment.
цей ТК не потрібний, майданчик не може подавати пропозицію і статусі драфт
|
|
||
|
|
||
| Можливість змінити поле ${field_name} предмета на ${field_value} | ||
| ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].tender_data.data['items'][0]} |
There was a problem hiding this comment.
Це в майданчика не спрацює, бо в його словнику ${USERS.users['${tender_owner}'].tender_data} нема items, так як відображення цих полів не робилось для ролі tender_owner, тільки viewer. Тут краще використати словник ${USERS.users['${tender_owner}'].initial_data.data['items'][0]}
There was a problem hiding this comment.
треба зробити це ключове слово універсальнішим і додати індекс, бо так получається, що можна змінити лише якщо один предмет
| ${item_index}= get_object_index_by_id ${tender.data['items']} ${item_id} | ||
| Set_To_Object ${tender['data']['items'][${item_index}]} ${fieldname} ${fieldvalue} | ||
| Log ${tender} | ||
| ${reply}= Call Method ${USERS.users['${username}'].client} patch_tender ${tender} |
There was a problem hiding this comment.
В клієнті є окремий метод patch_item, краще його використати
| [Tags] ${USERS.users['${tender_owner}'].broker}: Додання документації | ||
| ... tender_owner | ||
| ... ${USERS.users['${tender_owner}'].broker} | ||
| ... add_rejectionProtocol |
There was a problem hiding this comment.
мабуть варто додати сценарій, де б використовувався цей тест кейс
| ############################################################################################## | ||
| # BIDDING | ||
| ############################################################################################## | ||
| Можливість подати цінову пропозицію в статусі драфт користувачем ${username} |
| # Bid operations | ||
| ############################################################################## | ||
|
|
||
| Подати цінову пропозицію в статусі драфт |
| ${tender}= Call Method ${USERS.users['${username}'].client} create_tender ${tender_data} | ||
| Log object data ${tender} created_tender | ||
| ${access_token}= Get Variable Value ${tender.access.token} | ||
| ${status}= Set Variable If 'dgfOtherAssets' in '${MODE}' active.tendering ${EMPTY} |
There was a problem hiding this comment.
Для dgfOtherAssets не потрібно нічого патчити взагалі, бо там процедура одразу створюється в статусі active.tendering, не draft
Тому тут умову якось по-іншому варто зробити. Можливо щось таке
Run Keyword If '${mode}' == 'geb' Run Keywords
... Set To Dictionary ${tender['data']} status=active.rectification
... AND Call Method ${USERS.users['${username}'].client} patch_tender ${tender}
| Log ${reply} | ||
|
|
||
|
|
||
| Отримати інформацію із об'єкта МП |
There was a problem hiding this comment.
Це щось з малої приватизації, тут його не треба) достатньо викликати Отримати інформацію із тендера, а цей ківорд забрати взагалі
ef880c7 to
4ca6e3f
Compare
|
зміни назву ПРу! |
| @@ -1,6 +1,5 @@ | |||
| *** Settings *** | |||
| Resource keywords.robot | |||
| Resource base_keywords.robot | |||
There was a problem hiding this comment.
можливо треба було забрати keywords.robot і залишити base_keywords.robot
| *** Settings *** | ||
| Resource keywords.robot | ||
| Resource base_keywords.robot | ||
| Resource resource.robot |
There was a problem hiding this comment.
для чого тут resource.robot?
| -i find_tender | ||
|
|
||
|
|
||
|
|
| ${DIALOGUE_TYPE}= Get Variable Value ${DIALOGUE_TYPE} | ||
| Run keyword if '${DIALOGUE_TYPE}' != '${None}' Set to dictionary ${tender_parameters} dialogue_type=${DIALOGUE_TYPE} | ||
| ${tender_data}= Підготувати дані для створення тендера ${tender_parameters} | ||
| Log ${tender_data} |
There was a problem hiding this comment.
тут можна не логувати дані
|
|
||
|
|
||
| def create_fake_items_quantity(): | ||
| return round(random.uniform(5, 10), 3) |
| return round(random.uniform(5, 10), 3) | ||
|
|
||
|
|
||
| def create_fake_scheme_id_test(): |
There was a problem hiding this comment.
можна забрати з назви test
| \ ${left}= Set Variable ${USERS.users['${tender_owner}'].initial_data.data['items'][${item_index}].${field}} | ||
| \ ${right}= Отримати дані із тендера ${username} ${TENDER['TENDER_UAID']} ${field} ${item_id} | ||
| \ compare_additionalClassifications_description ${right} | ||
| \ Звірити поле тендера із значенням ${username} ${TENDER['TENDER_UAID']} ${USERS.users['${tender_owner}'].initial_data.data['items'][${item_index}].${field}} ${field} ${item_id} |
There was a problem hiding this comment.
ці зміни не вплинуть на тести для інших процедур?
| ... ${tender_uaid} | ||
| ... active.tendering | ||
|
|
||
|
|
| "06111000-3", | ||
| "06112000-0", | ||
| "06120000-9" | ||
| ], |
There was a problem hiding this comment.
чому тут не всі id, дані для яких розписані нижче?
| Можливість змінити поле guarantee.amount тендера на ${new_guarantee_amount} | ||
|
|
||
|
|
||
| Відображення зміненого розміру реєстраційного внеску |
| ... modify_auction_budgetSpent | ||
| [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | ||
| [Teardown] Оновити LAST_MODIFICATION_DATE | ||
| ${new_budgetSpent_amount}= create_fake_value ${USERS.users['${tender_owner}'].tender_data.data.value.amount} |
There was a problem hiding this comment.
даний ТК не пройде від ролі майданчика, звірення поля виконується тільки для viewer, в словнику tender_owner цього поля не буде. Для всіх наступних ТК на редагування budgetSpent ідентично
There was a problem hiding this comment.
Є звірення для усіх користувачів.
There was a problem hiding this comment.
не зрозуміло, чого змінюється поле budgetSpent.amount, але дані беруться поля value.amount
| ... modify_auction_description | ||
| [Setup] Дочекатись дати закінчення періоду редагування лоту ${tender_owner} | ||
| [Setup] Дочекатись дати закінчення періоду редагування лоту ${tender_owner} ${TENDER['TENDER_UAID']} | ||
| [Teardown] Оновити LAST_MODIFICATION_DATE |
There was a problem hiding this comment.
для неможливостей не треба Оновити LAST_MODIFICATION_DATE
| ... provider | ||
| ... ${USERS.users['${provider}'].broker} | ||
| ... add_eligibilityDocuments_to_bid_by_provider | ||
| [Setup] Дочекатись дати закінчення прийому пропозицій ${viewer} ${TENDER['TENDER_UAID']} |
|
|
||
|
|
||
| Можливість кваліфікувати пропозицію першим учасником | ||
| [Tags] ${USERS.users['${provider1}'].broker}: Подання пропозиції |
|
|
||
| Можливість змінити поле ${field_name} предмета ${index} на ${field_value} | ||
| ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data['items'][${index}]} | ||
| Set To Dictionary ${USERS.users['${tender_owner}']} item_id=${item_id} |
There was a problem hiding this comment.
для чого зберігати item_id?
| ${item_index}= get_object_index_by_id ${tender.data['items']} ${item_id} | ||
| ${item}= Create Dictionary data=${tender['data']['items'][${item_index}]} | ||
| Set_To_Object ${item.data} ${fieldname} ${fieldvalue} | ||
| Log ${tender} |
There was a problem hiding this comment.
можливо треба було залогувати item, а не tender
| ${tender}= openprocurement_client.Пошук тендера по ідентифікатору ${username} ${tender_uaid} | ||
| ${reply}= Call Method ${USERS.users['${username}'].client} create_bid ${tender} ${bid} | ||
| Run Keyword IF '${tender.data.procurementMethodType}' == 'landLease' | ||
| ... Set To Dictionary ${reply.data} status=pending |
There was a problem hiding this comment.
для цієї умови треба додати patch_bid, в інших випадках patch_bid безтолковий
| ... ${USERS.users['${viewer}'].broker} | ||
| ... tender_view_landLease | ||
| Звірити відображення поля bankAccount.accountIdentification[0].description тендера для користувача ${viewer} | ||
|
|
There was a problem hiding this comment.
додай відступ, по два між ТК має бути
| ... modify_auction_minNumberOfQualifiedBids | ||
| [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | ||
| [Teardown] Оновити LAST_MODIFICATION_DATE | ||
| ${new_minNumberOfQualifiedBids}= Set Variable ${1} |
There was a problem hiding this comment.
це з врахуванням, що початкове значення поля буде завжди більше 1?
| Можливість завантажити документ до тендера з типом cancellationDetails | ||
|
|
||
|
|
||
|
|
| Log ${reply_active} | ||
| Set To Dictionary ${USERS.users['${username}']} bid_id=${reply['data']['id']} | ||
| Log ${reply} | ||
| [return] ${reply} |
There was a problem hiding this comment.
Тут логуємо і повертаємо reply ще в статусі draft, хоча для landlease ще був патч і статус pending
There was a problem hiding this comment.
В reply буде записано і залоговано статус pending, оскільки вище виконується Set To Dictionary ${reply.data} status=pending
There was a problem hiding this comment.
думаю Орися мала на увазі, що reply логується для того, щоб зберегти відповідь з цбд, а не з того, що ти записав в словник
| ... critical | ||
| [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | ||
| [Teardown] Оновити LAST_MODIFICATION_DATE | ||
| ${award_amount}= Get From Dictionary ${USERS.users['${viewer}'].tender_data.data.awards[0].value} amount |
There was a problem hiding this comment.
Словник ${USERS.users['${viewer}'].tender_data.data.awards[0].value} буде пустий в майданчика, бо значення туди записується в тк на відображення поля. Потрібно додати такий тест кейс в с'ют awarding
Або ж використати тут не Get From Dictionary а викликати ківорд Отримати дані із тендера
There was a problem hiding this comment.
Це був лишній рядок. Прибрав з коду.
| return random.choice(banks_name) | ||
|
|
||
|
|
||
| def create_fake_month(start=1, end=12): |
There was a problem hiding this comment.
ця функція використовується при створенні і для редагування, тому потрібно передбачити можливість того, що значення співпаде з попереднім
| period_dict["auctionPeriod"] = {} | ||
| inc_dt += timedelta(minutes=params['intervals']['auction'][0]) | ||
| period_dict["auctionPeriod"]["startDate"] = inc_dt.isoformat() | ||
| print(period_dict["auctionPeriod"]["startDate"]) |
| Звірити відображення поля minNumberOfQualifiedBids тендера для користувача ${viewer} | ||
|
|
||
|
|
||
| Відображення номер лоту замовника |
| ... tender_owner | ||
| ... ${USERS.users['${tender_owner}'].broker} | ||
| ... modify_auction_title | ||
| ... modify_auction_title_after_bidding |
There was a problem hiding this comment.
нагадай, будь ласка, чому тут after_bidding?
There was a problem hiding this comment.
Тому що в процедурі other потрібно перевірити можливість редагування після подачі пропозиції.
| ... ${USERS.users['${tender_owner}'].broker} | ||
| ... add_tender_doc | ||
| [Teardown] Оновити LAST_MODIFICATION_DATE | ||
| ... add_tender_doc_after_bidding |
There was a problem hiding this comment.
чому тут тільки для доків тег змінився, а, наприклад, для add_item і інших ні?
There was a problem hiding this comment.
Тому що цей тест викликається після закінчення періоду редагування лоту, і в такому випадку на процедурі geb він впаде оскільки там можна вантажити документи після даного періоду, а в other ні. Тому цей тест і був виділений окремим тегом і включений в усі сценарії для процедури other.
| data['procurementMethodType'] = "landLease" | ||
| data['lotIdentifier'] = fake.dgfID() | ||
| data['lotHolder'] = fake.procuringEntity() | ||
| data['registrationFee'] = { |
There was a problem hiding this comment.
registrationFee не залежить від value.amount?
Бо в test_tender_data ти генеруєш одне значення, з яким створиш процедуру, а вже registrationFee вираховуєш на основі нового значення, яке генерується в цій функції
| @@ -0,0 +1,51 @@ | |||
| -v MODE:geb | |||
There was a problem hiding this comment.
Подумай, які ще можна додати сценарії. Наприклад для 1 учасника, або щось ще по авардінгу. Бо в нас по суті тільки базовий для 2 ох учасників і цей по дискваліфікації
| -i number_of_awards | ||
| -i add_rejectionProtocol | ||
| -i disqualified_first_award | ||
| -i first_award_status_unsuccessful No newline at end of file |
There was a problem hiding this comment.
тут незаврешений сценарій. Інший ж авард ще активний, з ним можна підписати договір
There was a problem hiding this comment.
В процедурі geb тільки один авард.
| } | ||
| # data['rectificationPeriod'] = { | ||
| # "endDate": (get_now() + timedelta(minutes=(random.randint(5, 19) * 1440) / accelerator)).isoformat(), | ||
| # } |
There was a problem hiding this comment.
для чого цей закоментований код?
There was a problem hiding this comment.
Цей код не потрібний для заведення процедур, вже видалив.
| data = test_tender_data(params, []) | ||
|
|
||
| data['dgfID'] = fake.dgfID() | ||
| # data['dgfID'] = fake.dgfID() |
There was a problem hiding this comment.
Змінилась назва поля в процедурі, і це вже не потрібно геренрувати, також прибрав з коду.
| ${max_amount}= Evaluate ${starting_price}+${starting_price} | ||
| ${amount}= create_fake_amount ${starting_price} ${max_amount} | ||
| Set to dictionary ${USERS.users['${tender_owner}']} amount=${amount} | ||
| Run As ${tender_owner} Редагувати угоду ${TENDER['TENDER_UAID']} -1 value.amount ${amount} |
There was a problem hiding this comment.
краще винести в окреме ключове слово
There was a problem hiding this comment.
Виніс в окремий кейворд, і змінив генерацію значення на початкова вартість угорди + мінімальний крок
| Set To Dictionary ${response['data']} documentType=rejectionProtocol | ||
| ${reply}= Call Method ${USERS.users['${username}'].client} patch_award_document ${tender} ${response} ${award_id} ${response['data'].id} | ||
| Log ${reply} | ||
| [return] ${reply} |
There was a problem hiding this comment.
ключове слово ідентичне до "Завантажити протокол аукціону в авард" відрізняється лише documentType, можливо краще винести окреме ключове слово Завантажити протокол в авард, в аргументах якого передавати documentType і не дублювати код
There was a problem hiding this comment.
Виніс в окреме ключове слово з можливістю вказати тип документа в аргументі
| ... Set To Dictionary ${tender['data']} status=active.rectification | ||
| ... AND | ||
| ... Call Method ${USERS.users['${username}'].client} patch_tender ${tender} | ||
| Log ${tender} |
There was a problem hiding this comment.
лишнє логування для всіх процедур, крім geb
There was a problem hiding this comment.
Виніс в умови яка виконується тільки на процедурі geb
| Log ${reply_active} | ||
| Set To Dictionary ${USERS.users['${username}']} bid_id=${reply['data']['id']} | ||
| Log ${reply} | ||
| [return] ${reply} |
There was a problem hiding this comment.
думаю Орися мала на увазі, що reply логується для того, щоб зберегти відповідь з цбд, а не з того, що ти записав в словник
| \ ${right}= Отримати дані із тендера ${username} ${TENDER['TENDER_UAID']} ${field} ${item_id} | ||
| \ compare_additionalClassifications_description ${right} | ||
| \ Run Keyword If '${MODE}'=='dgfOtherAssets' compare_additionalClassifications_description ${right} | ||
| \ ... ELSE Звірити поле тендера із значенням ${username} ${TENDER['TENDER_UAID']} ${left} ${field} ${item_id} |
There was a problem hiding this comment.
потрібно перейменувати ключове слово 'Звірити поле ${field} тендера усіх предметів для користувача ${username}' на 'звірити відображення опису додаткової класифікаці усіх предметів для користувача ${username}', або щось типу того, в назві треба вказати конкретну дію, яка виконується
There was a problem hiding this comment.
Перейменував на Звірити відображення опису додаткової класифікаці усіх предметів для користувача ${viewer}
| { | ||
| "scheme": "CPVS", | ||
| "id": "PA01-7", | ||
| "description": "Оренда" |
There was a problem hiding this comment.
чому цей класифікатор видалено?
There was a problem hiding this comment.
бо для landLease потрібно kvtspz і cadastralNumber
There was a problem hiding this comment.
бо для landLease потрібно kvtspz і cadastralNumber
| ... modify_auction_registrationFee | ||
| [Setup] Дочекатись синхронізації з майданчиком ${viewer} | ||
| Run Keyword And Ignore Error Remove From Dictionary ${USERS.users['${viewer}'].tender_data.data.registrationFee} amount | ||
| Звірити відображення поля guarantee.amount тендера із ${USERS.users['${tender_owner}'].new_guarantee_value} для користувача ${viewer} |
There was a problem hiding this comment.
для чого видаляти registrationFee.amount, якщо звірення йде для поля guarantee.amount?
There was a problem hiding this comment.
Звірення повинно було бути для registrationFee.amount. Поправив.
| ... modify_auction_budgetSpent | ||
| [Setup] Дочекатись синхронізації з майданчиком ${tender_owner} | ||
| [Teardown] Оновити LAST_MODIFICATION_DATE | ||
| ${new_budgetSpent_amount}= create_fake_value ${USERS.users['${tender_owner}'].tender_data.data.value.amount} |
There was a problem hiding this comment.
не зрозуміло, чого змінюється поле budgetSpent.amount, але дані беруться поля value.amount
| ... ${USERS.users['${viewer}'].broker} ${USERS.users['${tender_owner}'].broker} | ||
| ... modify_asset_description | ||
| Run Keyword And Ignore Error Remove From Dictionary ${USERS.users['${viewer}'].tender_data.data['items'][0]} description | ||
| Звірити відображення поля items[0].description тендера із ${USERS.users['${tender_owner}'].new_description} для користувача ${viewer} |
There was a problem hiding this comment.
чому тут використовується звірення поля тендера, а не звірення поля зміненого предмета?
There was a problem hiding this comment.
Переробив на звірення поля зміненого предмета
| ... ${USERS.users['${tender_owner}'].broker} | ||
| ... add_tender_cancellationDetails | ||
| [Teardown] Оновити LAST_MODIFICATION_DATE | ||
| Можливість завантажити документ до тендера з типом cancellationDetails |
There was a problem hiding this comment.
треба додати хоча б по одному ТК на відображення полів доданих документів, щоб переконатися, що вони справді завантажились
| ... ask_question_to_tender_after_tendering_period_geb | ||
| [Teardown] Оновити LMD і дочекатись синхронізації ${provider} | ||
| [Setup] Дочекатись дати закінчення прийому пропозицій ${viewer} ${TENDER['TENDER_UAID']} | ||
| Можливість задати запитання на тендер користувачем ${provider} |
There was a problem hiding this comment.
є можливість відповісти на запитання після закінчення прийому пропозицій?
There was a problem hiding this comment.
Так, там ще enquiryPeriod триває
There was a problem hiding this comment.
тоді треба додати ТК на відповідь і ТК на перевірку полів питання
|
|
||
|
|
||
| Звірити відображення поля ${field} зміненого предмета ${index} із ${data} для користувача ${username} | ||
| ${item_id}= get_id_from_object ${USERS.users['${tender_owner}'].initial_data.data['items'][${index}]} |
There was a problem hiding this comment.
чи є можливість змінювати description предмета?
| return "P{}M".format(random.choice(month)) | ||
|
|
||
|
|
||
|
|
This change is