Commit c81d7647a8166e9ef7c30d26f144f3c81ea10423
Committed by
mykhaly
1 parent
34dd7c34
Optimization initial_data and upd belowThreshold mods
Showing
3 changed files
with
102 additions
and
159 deletions
... | ... | @@ -2,6 +2,7 @@ |
2 | 2 | from datetime import timedelta |
3 | 3 | from faker import Factory |
4 | 4 | from munch import munchify |
5 | +from uuid import uuid4 | |
5 | 6 | from tempfile import NamedTemporaryFile |
6 | 7 | from .local_time import get_now |
7 | 8 | from op_faker import OP_Provider |
... | ... | @@ -46,7 +47,7 @@ def create_fake_doc(): |
46 | 47 | return tf.name |
47 | 48 | |
48 | 49 | |
49 | -def test_tender_data(intervals, periods=("enquiry", "tender")): | |
50 | +def test_tender_data(intervals, periods=("enquiry", "tender"), number_of_lots=0, meat=False): | |
50 | 51 | now = get_now() |
51 | 52 | value_amount = round(random.uniform(3000, 99999999999.99), 2) # max value equals to budget of Ukraine in hryvnias |
52 | 53 | data = { |
... | ... | @@ -71,8 +72,6 @@ def test_tender_data(intervals, periods=("enquiry", "tender")): |
71 | 72 | "items": [] |
72 | 73 | } |
73 | 74 | data["procuringEntity"]["kind"] = "other" |
74 | - new_item = test_item_data() | |
75 | - data["items"].append(new_item) | |
76 | 75 | if data.get("mode") == "test": |
77 | 76 | data["title"] = u"[ТЕСТУВАННЯ] {}".format(data["title"]) |
78 | 77 | data["title_en"] = u"[TESTING] {}".format(data["title_en"]) |
... | ... | @@ -85,6 +84,54 @@ def test_tender_data(intervals, periods=("enquiry", "tender")): |
85 | 84 | inc_dt += timedelta(minutes=intervals[period_name][i]) |
86 | 85 | period_dict[period_name + "Period"][j + "Date"] = inc_dt.isoformat() |
87 | 86 | data.update(period_dict) |
87 | + number_of_lots = int(number_of_lots) | |
88 | + cpv_group = fake.cpv()[:3] | |
89 | + if number_of_lots: | |
90 | + data['lots'] = [] | |
91 | + for lot_number in range(number_of_lots): | |
92 | + lot_id = uuid4().hex | |
93 | + new_lot = test_lot_data(data['value']['amount']) | |
94 | + data['lots'].append(new_lot) | |
95 | + data['lots'][lot_number]['id'] = lot_id | |
96 | + for i in range(fake.random_int(min=1, max=5)): | |
97 | + new_item = test_item_data(cpv_group) | |
98 | + data['items'].append(new_item) | |
99 | + data['items'][lot_number]['relatedLot'] = lot_id | |
100 | + value_amount = sum(lot['value']['amount'] for lot in data['lots']) | |
101 | + minimalStep = min(lot['minimalStep']['amount'] for lot in data['lots']) | |
102 | + data['value']['amount'] = value_amount | |
103 | + data['minimalStep']['amount'] = minimalStep | |
104 | + else: | |
105 | + for i in range(fake.random_int(min=1, max=5)): | |
106 | + new_item = test_item_data(cpv_group) | |
107 | + data['items'].append(new_item) | |
108 | + if meat: | |
109 | + data['features'] = [ | |
110 | + { | |
111 | + "code": uuid4().hex, | |
112 | + "featureOf": "tenderer", | |
113 | + "title": field_with_id("f", fake.title()), | |
114 | + "description": fake.description(), | |
115 | + "enum": [ | |
116 | + { | |
117 | + "value": 0.15, | |
118 | + "title": fake.word() | |
119 | + }, | |
120 | + { | |
121 | + "value": 0.10, | |
122 | + "title": fake.word() | |
123 | + }, | |
124 | + { | |
125 | + "value": 0.05, | |
126 | + "title": fake.word() | |
127 | + }, | |
128 | + { | |
129 | + "value": 0, | |
130 | + "title": fake.word() | |
131 | + } | |
132 | + ] | |
133 | + } | |
134 | + ] | |
88 | 135 | return munchify(data) |
89 | 136 | |
90 | 137 | |
... | ... | @@ -119,79 +166,6 @@ def test_tender_data_limited(intervals, procurement_method_type): |
119 | 166 | return munchify(data) |
120 | 167 | |
121 | 168 | |
122 | -def test_tender_data_multiple_items(intervals): | |
123 | - t_data = test_tender_data(intervals) | |
124 | - for _ in range(4): | |
125 | - new_item = test_item_data() | |
126 | - t_data['items'].append(new_item) | |
127 | - return munchify(t_data) | |
128 | - | |
129 | - | |
130 | -def test_tender_data_multiple_lots(intervals): | |
131 | - tender = test_tender_data(intervals) | |
132 | - first_lot_id = "3c8f387879de4c38957402dbdb8b31af" | |
133 | - tender['items'][0]['relatedLot'] = first_lot_id | |
134 | - tender['lots'] = [test_lot_data(tender['value']['amount'])] | |
135 | - tender['lots'][0]['id'] = first_lot_id | |
136 | - max_lot_value_amount = max([lot['value']['amount'] for lot in tender['lots']]) | |
137 | - tender['value']['amount'] = max_lot_value_amount | |
138 | - return munchify(tender) | |
139 | - | |
140 | - | |
141 | -def test_tender_data_meat(intervals): | |
142 | - tender = munchify(test_tender_data(intervals)) | |
143 | - item_id = "edd0032574bf4402877ad5f362df225a" | |
144 | - tender['items'][0].id = item_id | |
145 | - tender.features = [ | |
146 | - { | |
147 | - "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", | |
148 | - "featureOf": "tenderer", | |
149 | - "title": field_with_id("f", fake.title()), | |
150 | - "description": fake.description(), | |
151 | - "enum": [ | |
152 | - { | |
153 | - "value": 0.15, | |
154 | - "title": fake.word() | |
155 | - }, | |
156 | - { | |
157 | - "value": 0.1, | |
158 | - "title": fake.word() | |
159 | - }, | |
160 | - { | |
161 | - "value": 0.05, | |
162 | - "title": fake.word() | |
163 | - }, | |
164 | - { | |
165 | - "value": 0, | |
166 | - "title": fake.word() | |
167 | - } | |
168 | - ] | |
169 | - }, | |
170 | - { | |
171 | - "code": "48cfd91612c04125ab406374d7cc8d93", | |
172 | - "featureOf": "item", | |
173 | - "relatedItem": item_id, | |
174 | - "title": field_with_id("f", fake.title()), | |
175 | - "description": fake.description(), | |
176 | - "enum": [ | |
177 | - { | |
178 | - "value": 0.05, | |
179 | - "title": fake.word() | |
180 | - }, | |
181 | - { | |
182 | - "value": 0.01, | |
183 | - "title": fake.word() | |
184 | - }, | |
185 | - { | |
186 | - "value": 0, | |
187 | - "title": fake.word() | |
188 | - } | |
189 | - ] | |
190 | - } | |
191 | - ] | |
192 | - return munchify(tender) | |
193 | - | |
194 | - | |
195 | 169 | def test_question_data(): |
196 | 170 | return munchify({ |
197 | 171 | "data": { |
... | ... | @@ -202,6 +176,11 @@ def test_question_data(): |
202 | 176 | }) |
203 | 177 | |
204 | 178 | |
179 | +def test_related_question(question, relation, obj_id): | |
180 | + question.data.update({"questionOf": relation, "relatedItem": obj_id}) | |
181 | + return munchify(question) | |
182 | + | |
183 | + | |
205 | 184 | def test_question_answer_data(): |
206 | 185 | return munchify({ |
207 | 186 | "data": { |
... | ... | @@ -263,7 +242,7 @@ def test_complaint_reply_data(): |
263 | 242 | }) |
264 | 243 | |
265 | 244 | |
266 | -def test_bid_data(mode, max_value_amount): | |
245 | +def test_bid_data(): | |
267 | 246 | bid = munchify({ |
268 | 247 | "data": { |
269 | 248 | "tenderers": [ |
... | ... | @@ -273,35 +252,9 @@ def test_bid_data(mode, max_value_amount): |
273 | 252 | }) |
274 | 253 | bid.data.tenderers[0].address.countryName_en = translate_country_en(bid.data.tenderers[0].address.countryName) |
275 | 254 | bid.data.tenderers[0].address.countryName_ru = translate_country_ru(bid.data.tenderers[0].address.countryName) |
276 | - if 'open' in mode: | |
277 | - bid.data['selfEligible'] = True | |
278 | - bid.data['selfQualified'] = True | |
279 | - if mode == 'multiLot': | |
280 | - bid.data.lotValues = list() | |
281 | - for _ in range(2): | |
282 | - bid.data.lotValues.append(test_bid_value(max_value_amount)) | |
283 | - else: | |
284 | - bid.data.update(test_bid_value(max_value_amount)) | |
285 | - if mode == 'meat': | |
286 | - bid.data.update(test_bid_params()) | |
287 | 255 | return bid |
288 | 256 | |
289 | 257 | |
290 | -def test_bid_params(): | |
291 | - return munchify({ | |
292 | - "parameters": [ | |
293 | - { | |
294 | - "code": "ee3e24bc17234a41bd3e3a04cc28e9c6", | |
295 | - "value": fake.random_element(elements=(0.15, 0.1, 0.05, 0)) | |
296 | - }, | |
297 | - { | |
298 | - "code": "48cfd91612c04125ab406374d7cc8d93", | |
299 | - "value": fake.random_element(elements=(0.05, 0.01, 0)) | |
300 | - } | |
301 | - ] | |
302 | - }) | |
303 | - | |
304 | - | |
305 | 258 | def test_bid_value(max_value_amount): |
306 | 259 | return munchify({ |
307 | 260 | "value": { |
... | ... | @@ -354,23 +307,6 @@ def test_invalid_features_data(): |
354 | 307 | "title": fake.word() |
355 | 308 | } |
356 | 309 | ] |
357 | - }, | |
358 | - { | |
359 | - "code": "48cfd91612c04125ab406374d7cc8d93", | |
360 | - "featureOf": "item", | |
361 | - "relatedItem": "edd0032574bf4402877ad5f362df225a", | |
362 | - "title": fake.title(), | |
363 | - "description": fake.description(), | |
364 | - "enum": [ | |
365 | - { | |
366 | - "value": 0.35, | |
367 | - "title": fake.word() | |
368 | - }, | |
369 | - { | |
370 | - "value": 0, | |
371 | - "title": fake.word() | |
372 | - } | |
373 | - ] | |
374 | 310 | } |
375 | 311 | ] |
376 | 312 | |
... | ... | @@ -400,11 +336,6 @@ def test_lot_document_data(document, lot_id): |
400 | 336 | return munchify(document) |
401 | 337 | |
402 | 338 | |
403 | -def test_lot_question_data(question, lot_id): | |
404 | - question.data.update({"questionOf": "lot", "relatedItem": lot_id}) | |
405 | - return munchify(question) | |
406 | - | |
407 | - | |
408 | 339 | def test_lot_complaint_data(complaint, lot_id): |
409 | 340 | complaint.data.update({"complaintOf": "lot", "relatedItem": lot_id}) |
410 | 341 | return munchify(complaint) |
... | ... | @@ -418,12 +349,12 @@ def test_tender_data_openua(intervals): |
418 | 349 | # We should not provide any values for `enquiryPeriod` when creating |
419 | 350 | # an openUA or openEU procedure. That field should not be present at all. |
420 | 351 | # Therefore, we pass a nondefault list of periods to `test_tender_data()`. |
421 | - t_data = test_tender_data(intervals, periods=('tender',)) | |
422 | - t_data['procurementMethodType'] = 'aboveThresholdUA' | |
423 | - t_data['procurementMethodDetails'] = 'quick, ' \ | |
352 | + data = test_tender_data(intervals, periods=('tender',)) | |
353 | + data['procurementMethodType'] = 'aboveThresholdUA' | |
354 | + data['procurementMethodDetails'] = 'quick, ' \ | |
424 | 355 | 'accelerator={}'.format(accelerator) |
425 | - t_data['procuringEntity']['kind'] = 'general' | |
426 | - return t_data | |
356 | + data['procuringEntity']['kind'] = 'general' | |
357 | + return data | |
427 | 358 | |
428 | 359 | |
429 | 360 | def test_tender_data_openeu(intervals): |
... | ... | @@ -434,15 +365,15 @@ def test_tender_data_openeu(intervals): |
434 | 365 | # We should not provide any values for `enquiryPeriod` when creating |
435 | 366 | # an openUA or openEU procedure. That field should not be present at all. |
436 | 367 | # Therefore, we pass a nondefault list of periods to `test_tender_data()`. |
437 | - t_data = test_tender_data(intervals, periods=('tender',)) | |
438 | - t_data['procurementMethodType'] = 'aboveThresholdEU' | |
439 | - t_data['procurementMethodDetails'] = 'quick, ' \ | |
368 | + data = test_tender_data(intervals, periods=('tender',)) | |
369 | + data['procurementMethodType'] = 'aboveThresholdEU' | |
370 | + data['procurementMethodDetails'] = 'quick, ' \ | |
440 | 371 | 'accelerator={}'.format(accelerator) |
441 | - t_data['title_en'] = "[TESTING]" | |
442 | - for item_number, item in enumerate(t_data['items']): | |
372 | + data['title_en'] = "[TESTING]" | |
373 | + for item_number, item in enumerate(data['items']): | |
443 | 374 | item['description_en'] = "Test item #{}".format(item_number) |
444 | - t_data['procuringEntity']['contactPoint']['name_en'] = fake_en.name() | |
445 | - t_data['procuringEntity']['contactPoint']['availableLanguage'] = "en" | |
446 | - t_data['procuringEntity']['identifier']['legalName_en'] = "Institution \"Vinnytsia City Council primary and secondary general school № 10\"" | |
447 | - t_data['procuringEntity']['kind'] = 'general' | |
448 | - return t_data | |
375 | + data['procuringEntity']['contactPoint']['name_en'] = fake_en.name() | |
376 | + data['procuringEntity']['contactPoint']['availableLanguage'] = "en" | |
377 | + data['procuringEntity']['identifier']['legalName_en'] = "Institution \"Vinnytsia City Council primary and secondary general school № 10\"" | |
378 | + data['procuringEntity']['kind'] = 'general' | |
379 | + return data | ... | ... |
... | ... | @@ -240,9 +240,9 @@ Get Broker Property By Username |
240 | 240 | |
241 | 241 | |
242 | 242 | Підготувати дані для подання пропозиції |
243 | - [Arguments] ${max_value_amount} | |
244 | - ${bid_data}= test_bid_data ${mode} ${max_value_amount} | |
245 | - [Return] ${bid_data} | |
243 | + [Arguments] ${username} | |
244 | + ${bid}= generate_test_bid_data ${USERS.users['${username}'].tender_data} | |
245 | + [Return] ${bid} | |
246 | 246 | |
247 | 247 | |
248 | 248 | Підготувати дані про постачальника | ... | ... |
... | ... | @@ -19,7 +19,9 @@ from robot.output.loggerhelper import Message |
19 | 19 | from .initial_data import ( |
20 | 20 | create_fake_doc, |
21 | 21 | create_fake_sentence, |
22 | + fake, | |
22 | 23 | test_bid_data, |
24 | + test_bid_value, | |
23 | 25 | test_claim_answer_data, |
24 | 26 | test_claim_data, |
25 | 27 | test_complaint_data, |
... | ... | @@ -30,17 +32,14 @@ from .initial_data import ( |
30 | 32 | test_lot_complaint_data, |
31 | 33 | test_lot_data, |
32 | 34 | test_lot_document_data, |
33 | - test_lot_question_data, | |
35 | + test_related_question, | |
34 | 36 | test_question_answer_data, |
35 | 37 | test_question_data, |
36 | 38 | test_supplier_data, |
37 | 39 | test_tender_data, |
38 | 40 | test_tender_data_limited, |
39 | - test_tender_data_meat, | |
40 | - test_tender_data_multiple_items, | |
41 | - test_tender_data_multiple_lots, | |
42 | 41 | test_tender_data_openeu, |
43 | - test_tender_data_openua | |
42 | + test_tender_data_openua, | |
44 | 43 | ) |
45 | 44 | from barbecue import chef |
46 | 45 | from restkit import request |
... | ... | @@ -263,7 +262,7 @@ def compute_intrs(brokers_data, used_brokers): |
263 | 262 | return result |
264 | 263 | |
265 | 264 | |
266 | -def prepare_test_tender_data(procedure_intervals, mode): | |
265 | +def prepare_test_tender_data(procedure_intervals, mode, number_of_lots=0, meat=False): | |
267 | 266 | # Get actual intervals by mode name |
268 | 267 | if mode in procedure_intervals: |
269 | 268 | intervals = procedure_intervals[mode] |
... | ... | @@ -281,14 +280,7 @@ def prepare_test_tender_data(procedure_intervals, mode): |
281 | 280 | else: |
282 | 281 | assert 'accelerator' not in intervals.keys(), \ |
283 | 282 | "Accelerator is not available for mode '{0}'".format(mode) |
284 | - | |
285 | - if mode == 'meat': | |
286 | - return munchify({'data': test_tender_data_meat(intervals)}) | |
287 | - elif mode == 'multiItem': | |
288 | - return munchify({'data': test_tender_data_multiple_items(intervals)}) | |
289 | - elif mode == 'multiLot': | |
290 | - return munchify({'data': test_tender_data_multiple_lots(intervals)}) | |
291 | - elif mode == 'negotiation': | |
283 | + if mode == 'negotiation': | |
292 | 284 | return munchify({'data': test_tender_data_limited(intervals, 'negotiation')}) |
293 | 285 | elif mode == 'negotiation.quick': |
294 | 286 | return munchify({'data': test_tender_data_limited(intervals, 'negotiation.quick')}) |
... | ... | @@ -298,8 +290,8 @@ def prepare_test_tender_data(procedure_intervals, mode): |
298 | 290 | return munchify({'data': test_tender_data_openua(intervals)}) |
299 | 291 | elif mode == 'reporting': |
300 | 292 | return munchify({'data': test_tender_data_limited(intervals, 'reporting')}) |
301 | - elif mode == 'single': | |
302 | - return munchify({'data': test_tender_data(intervals)}) | |
293 | + elif mode == 'belowThreshold': | |
294 | + return munchify({'data': test_tender_data(intervals, number_of_lots=number_of_lots, meat=meat)}) | |
303 | 295 | raise ValueError("Invalid mode for prepare_test_tender_data") |
304 | 296 | |
305 | 297 | |
... | ... | @@ -432,6 +424,26 @@ def get_document_index_by_id(data, document_id): |
432 | 424 | raise IndexError |
433 | 425 | |
434 | 426 | |
427 | +def generate_test_bid_data(tender_data): | |
428 | + bid = test_bid_data() | |
429 | + if 'open' in tender_data['data']['mode']: | |
430 | + bid.data.selfEligible = True | |
431 | + bid.data.selfQualified = True | |
432 | + if 'lots' in tender_data['data']: | |
433 | + bid.data.lotValues = [] | |
434 | + for lot in tender_data['data']['lots']: | |
435 | + value = test_bid_value(lot['value']['amount']) | |
436 | + value['relatedLot'] = lot['id'] | |
437 | + bid.data.lotValues.append(value) | |
438 | + else: | |
439 | + bid.data.update(test_bid_value(tender_data['data']['value']['amount'])) | |
440 | + if 'features' in tender_data['data']: | |
441 | + bid.data.parameters = [] | |
442 | + for feature in tender_data['data']['features']: | |
443 | + parameter = {"value": fake.random_element(elements=(0.15, 0.1, 0.05, 0)), "code": feature['code']} | |
444 | + bid.data.parameters.append(parameter) | |
445 | + return bid | |
446 | + | |
435 | 447 | |
436 | 448 | # GUI Frontends common |
437 | 449 | def add_data_for_gui_frontends(tender_data): | ... | ... |
Please
register
or
login
to post a comment