Commit b0c4f5d690191e112aa140d763275b5dc4118641

Authored by selurvedu
2 parents d5c06c32 cab15244

Merge pull request #138 from mykhaly/op_faker

Faker
... ... @@ -115,7 +115,7 @@ ${mode} openeu
115 115 ... ${USERS.users['${provider}'].broker}
116 116 [Setup] Дочекатись дати початку прийому пропозицій ${provider}
117 117 [Teardown] Оновити LAST_MODIFICATION_DATE
118   - ${bid}= Підготувати дані для подання пропозиції
  118 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
119 119 Log ${bid}
120 120 ${bidresponses}= Create Dictionary
121 121 Set To Dictionary ${bidresponses} bid=${bid}
... ... @@ -199,7 +199,7 @@ ${mode} openeu
199 199 ... ${USERS.users['${provider1}'].broker}
200 200 [Setup] Дочекатись дати початку прийому пропозицій ${provider1}
201 201 [Teardown] Оновити LAST_MODIFICATION_DATE
202   - ${bid}= Підготувати дані для подання пропозиції
  202 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
203 203 Log ${bid}
204 204 ${bidresponses}= Create Dictionary
205 205 Set To Dictionary ${bidresponses} bid=${bid}
... ... @@ -255,7 +255,7 @@ ${mode} openeu
255 255 ... provider1
256 256 ... ${USERS.users['${provider1}'].broker}
257 257 [Teardown] Оновити LAST_MODIFICATION_DATE
258   - ${bid}= Підготувати дані для подання пропозиції
  258 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
259 259 Log ${bid}
260 260 ${bidresponses}= Create Dictionary
261 261 Set To Dictionary ${bidresponses} bid=${bid}
... ... @@ -384,7 +384,7 @@ ${mode} openeu
384 384 ... provider1
385 385 ... ${USERS.users['${provider1}'].broker}
386 386 [Teardown] Оновити LAST_MODIFICATION_DATE
387   - ${bid}= Підготувати дані для подання пропозиції
  387 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
388 388 Log ${bid}
389 389 ${bidresponses}= Create Dictionary
390 390 Set To Dictionary ${bidresponses} bid=${bid}
... ...
This diff could not be displayed because it is too large.
... ... @@ -4,11 +4,14 @@ from faker import Factory
4 4 from munch import munchify
5 5 from tempfile import NamedTemporaryFile
6 6 from .local_time import get_now
  7 +from .op_faker import OP_Provider
7 8 import random
8 9
  10 +
9 11 fake = Factory.create('uk_UA')
10 12 fake_ru = Factory.create('ru')
11 13 fake_en = Factory.create()
  14 +fake.add_provider(OP_Provider)
12 15
13 16
14 17 def create_fake_sentence():
... ... @@ -16,7 +19,21 @@ def create_fake_sentence():
16 19
17 20
18 21 def field_with_id(prefix, sentence):
19   - return "{}-{}: {}".format(prefix, fake.uuid4()[:8], sentence)
  22 + return u"{}-{}: {}".format(prefix, fake.uuid4()[:8], sentence)
  23 +
  24 +
  25 +def translate_country_en(country):
  26 + if country == u"Україна":
  27 + return "Ukraine"
  28 + else:
  29 + raise Exception(u"Cannot translate country to english: {}".format(country))
  30 +
  31 +
  32 +def translate_country_ru(country):
  33 + if country == u"Україна":
  34 + return u"Украина"
  35 + else:
  36 + raise Exception(u"Cannot translate country to russian: {}".format(country))
20 37
21 38
22 39 def create_fake_doc():
... ... @@ -30,38 +47,17 @@ def create_fake_doc():
30 47
31 48 def test_tender_data(intervals, periods=("enquiry", "tender")):
32 49 now = get_now()
33   - value_amount = 50000.99
34   - t_data = {
35   - "title": u"[ТЕСТУВАННЯ] " + fake.catch_phrase(),
  50 + value_amount = round(random.uniform(3000, 250000000000), 2) #max value equals to budget of Ukraine in hryvnias
  51 + data = {
36 52 "mode": "test",
37 53 "submissionMethodDetails": "quick",
38   - "description": u"Тестовий тендер",
39   - "description_ru": u"Тестовый тендер",
40   - "description_en": "Test tender",
41   - "procuringEntity": {
42   - "name": fake.company(),
43   - "name_ru": fake_ru.company(),
44   - "name_en": fake_en.company(),
45   - "identifier": {
46   - "scheme": u"UA-EDR",
47   - "id": u"{:08d}".format(fake.pyint()),
48   - "uri": fake.image_url(width=None, height=None)
49   - },
50   - "address": {
51   - "countryName": u"Україна",
52   - "countryName_ru": u"Украина",
53   - "countryName_en": "Ukraine",
54   - "postalCode": fake.postalcode(),
55   - "region": u"м. Київ",
56   - "locality": u"м. Київ",
57   - "streetAddress": fake.street_address()
58   - },
59   - "contactPoint": {
60   - "name": fake.name(),
61   - "telephone": fake.phone_number()
62   - },
63   - "kind": "other"
64   - },
  54 + "description": fake.description(),
  55 + "description_en": fake_en.sentence(nb_words=10, variable_nb_words=True),
  56 + "description_ru": fake_ru.sentence(nb_words=10, variable_nb_words=True),
  57 + "title": fake.title(),
  58 + "title_en": fake_en.catch_phrase(),
  59 + "title_ru": fake_ru.catch_phrase(),
  60 + "procuringEntity": fake.procuringEntity(),
65 61 "value": {
66 62 "amount": value_amount,
67 63 "currency": u"UAH",
... ... @@ -73,8 +69,13 @@ def test_tender_data(intervals, periods=("enquiry", "tender")):
73 69 },
74 70 "items": []
75 71 }
  72 + data["procuringEntity"]["kind"] = "other"
76 73 new_item = test_item_data()
77   - t_data['items'].append(new_item)
  74 + data["items"].append(new_item)
  75 + if data.get("mode") == "test":
  76 + data["title"] = u"[ТЕСТУВАННЯ] {}".format(data["title"])
  77 + data["title_en"] = u"[TESTING] {}".format(data["title_en"])
  78 + data["title_ru"] = u"[ТЕСТИРОВАНИЕ] {}".format(data["title_ru"])
78 79 period_dict = {}
79 80 inc_dt = now
80 81 for period_name in periods:
... ... @@ -82,90 +83,18 @@ def test_tender_data(intervals, periods=("enquiry", "tender")):
82 83 for i, j in zip(range(2), ("start", "end")):
83 84 inc_dt += timedelta(minutes=intervals[period_name][i])
84 85 period_dict[period_name + "Period"][j + "Date"] = inc_dt.isoformat()
85   - t_data.update(period_dict)
86   - return t_data
  86 + data.update(period_dict)
  87 + return munchify(data)
87 88
88 89
89 90 def test_tender_data_limited(intervals, procurement_method_type):
90   - now = get_now()
91   - data = {
92   - "items":
93   - [
94   - {
95   - "additionalClassifications":
96   - [
97   - {
98   - "description": u"Послуги щодо забезпечення харчуванням, інші",
99   - "id": "56.29",
100   - "scheme": u"ДКПП"
101   - }
102   - ],
103   - "classification":
104   - {
105   - "description": u"Послуги з організації шкільного харчування",
106   - "id": "55523100-3",
107   - "scheme": "CPV"
108   - },
109   - "description": field_with_id('i', fake.sentence(nb_words=10, variable_nb_words=True)),
110   - "id": "2dc54675d6364e2baffbc0f8e74432ac",
111   - "deliveryDate": {
112   - "endDate": (now + timedelta(days=5)).isoformat()
113   - },
114   - "deliveryLocation": {
115   - "latitude": 49.8500,
116   - "longitude": 24.0167
117   - },
118   - "deliveryAddress": {
119   - "countryName": u"Україна",
120   - "countryName_ru": u"Украина",
121   - "countryName_en": "Ukraine",
122   - "postalCode": fake.postalcode(),
123   - "region": u"м. Київ",
124   - "locality": u"м. Київ",
125   - "streetAddress": fake.street_address()
126   - }
127   - }
128   - ],
129   - "mode": "test",
130   - "procurementMethod": "limited",
131   - "procurementMethodType": procurement_method_type,
132   - "procuringEntity":
133   - {
134   - "address":
135   - {
136   - "countryName": u"Україна",
137   - "locality": u"м. Вінниця",
138   - "postalCode": "21027",
139   - "region": u"м. Вінниця",
140   - "streetAddress": u"вул. Стахурського. 22"
141   - },
142   - "contactPoint":
143   - {
144   - "name": u"Куца Світлана Валентинівна",
145   - "telephone": "+380 (432) 46-53-02",
146   - "url": "http://sch10.edu.vn.ua/"
147   - },
148   - "identifier":
149   - {
150   - "id": "21725150",
151   - "legalName": u"Заклад \"Загальноосвітня школа І-ІІІ ступенів № 10 Вінницької міської ради\"",
152   - "scheme": u"UA-EDR"
153   - },
154   - "name": u"ЗОСШ #10 м.Вінниці",
155   - "kind": "general"
156   - },
157   - "value": {
158   - "amount": 500000,
159   - "currency": "UAH",
160   - "valueAddedTaxIncluded": True
161   - },
162   - "description": fake.sentence(nb_words=10, variable_nb_words=True),
163   - "description_en": fake.sentence(nb_words=10, variable_nb_words=True),
164   - "description_ru": fake.sentence(nb_words=10, variable_nb_words=True),
165   - "title": fake.catch_phrase(),
166   - "title_en": fake.catch_phrase(),
167   - "title_ru": fake.catch_phrase()
168   - }
  91 + data = test_tender_data(intervals)
  92 + del data["submissionMethodDetails"]
  93 + del data["minimalStep"]
  94 + del data["enquiryPeriod"]
  95 + del data["tenderPeriod"]
  96 + data["procuringEntity"]["kind"] = "general"
  97 + data.update({"procurementMethodType": procurement_method_type, "procurementMethod": "limited"})
169 98 if procurement_method_type == "negotiation":
170 99 cause_variants = (
171 100 "artContestIP",
... ... @@ -181,13 +110,12 @@ def test_tender_data_limited(intervals, procurement_method_type):
181 110 cause_variants = ('quick',)
182 111 cause = fake.random_element(cause_variants)
183 112 data.update({"cause": cause})
184   - if procurement_method_type == "negotiation" \
185   - or procurement_method_type == "negotiation.quick":
  113 + if procurement_method_type in ("negotiation", "negotiation.quick"):
186 114 data.update({
187 115 "procurementMethodDetails": "quick, accelerator=1440",
188   - "causeDescription": fake.sentence(nb_words=10, variable_nb_words=True)
  116 + "causeDescription": fake.description()
189 117 })
190   - return data
  118 + return munchify(data)
191 119
192 120
193 121 def test_tender_data_multiple_items(intervals):
... ... @@ -195,16 +123,18 @@ def test_tender_data_multiple_items(intervals):
195 123 for _ in range(4):
196 124 new_item = test_item_data()
197 125 t_data['items'].append(new_item)
198   - return t_data
  126 + return munchify(t_data)
199 127
200 128
201 129 def test_tender_data_multiple_lots(intervals):
202 130 tender = test_tender_data(intervals)
203 131 first_lot_id = "3c8f387879de4c38957402dbdb8b31af"
204 132 tender['items'][0]['relatedLot'] = first_lot_id
205   - tender['lots'] = [test_lot_data()]
  133 + tender['lots'] = [test_lot_data(tender['value']['amount'])]
206 134 tender['lots'][0]['id'] = first_lot_id
207   - return tender
  135 + max_lot_value_amount = max([lot['value']['amount'] for lot in tender['lots']])
  136 + tender['value']['amount'] = max_lot_value_amount
  137 + return munchify(tender)
208 138
209 139
210 140 def test_tender_data_meat(intervals):
... ... @@ -215,24 +145,24 @@ def test_tender_data_meat(intervals):
215 145 {
216 146 "code": "ee3e24bc17234a41bd3e3a04cc28e9c6",
217 147 "featureOf": "tenderer",
218   - "title": field_with_id('f', "Термін оплати"),
219   - "description": "Умови відстрочки платежу після поставки товару",
  148 + "title": field_with_id("f", fake.title()),
  149 + "description": fake.description(),
220 150 "enum": [
221 151 {
222 152 "value": 0.15,
223   - "title": "180 днів та більше"
  153 + "title": fake.word()
224 154 },
225 155 {
226 156 "value": 0.1,
227   - "title": "90-179 днів",
  157 + "title": fake.word()
228 158 },
229 159 {
230 160 "value": 0.05,
231   - "title": "30-89 днів"
  161 + "title": fake.word()
232 162 },
233 163 {
234 164 "value": 0,
235   - "title": "Менше 30 днів"
  165 + "title": fake.word()
236 166 }
237 167 ]
238 168 },
... ... @@ -240,56 +170,35 @@ def test_tender_data_meat(intervals):
240 170 "code": "48cfd91612c04125ab406374d7cc8d93",
241 171 "featureOf": "item",
242 172 "relatedItem": item_id,
243   - "title": field_with_id('f', "Сорт"),
244   - "description": "Сорт продукції",
  173 + "title": field_with_id("f", fake.title()),
  174 + "description": fake.description(),
245 175 "enum": [
246 176 {
247 177 "value": 0.05,
248   - "title": "Вищий"
  178 + "title": fake.word()
249 179 },
250 180 {
251 181 "value": 0.01,
252   - "title": "Перший",
  182 + "title": fake.word()
253 183 },
254 184 {
255 185 "value": 0,
256   - "title": "Другий"
  186 + "title": fake.word()
257 187 }
258 188 ]
259 189 }
260 190 ]
261   - return tender
  191 + return munchify(tender)
262 192
263 193
264 194 def test_question_data():
265   - data = munchify({
  195 + return munchify({
266 196 "data": {
267   - "author": {
268   - "address": {
269   - "countryName": u"Україна",
270   - "countryName_ru": u"Украина",
271   - "countryName_en": "Ukraine",
272   - "locality": u"м. Вінниця",
273   - "postalCode": "21100",
274   - "region": u"Вінницька область",
275   - "streetAddress": fake.street_address()
276   - },
277   - "contactPoint": {
278   - "name": fake.name(),
279   - "telephone": fake.phone_number()
280   - },
281   - "identifier": {
282   - "scheme": u"UA-EDR",
283   - "id": u"{:08d}".format(fake.pyint()),
284   - "uri": fake.image_url(width=None, height=None)
285   - },
286   - "name": fake.company()
287   - },
288   - "description": fake.sentence(nb_words=10, variable_nb_words=True),
289   - "title": field_with_id('q', fake.sentence(nb_words=6, variable_nb_words=True))
  197 + "author": fake.procuringEntity(),
  198 + "description": fake.description(),
  199 + "title": field_with_id("q", fake.title())
290 200 }
291 201 })
292   - return data
293 202
294 203
295 204 def test_question_answer_data():
... ... @@ -302,30 +211,10 @@ def test_question_answer_data():
302 211
303 212 def test_complaint_data(lot=False):
304 213 data = munchify({
305   - "data": {
306   - "author": {
307   - "address": {
308   - "countryName": u"Україна",
309   - "countryName_ru": u"Украина",
310   - "countryName_en": "Ukraine",
311   - "locality": u"м. Вінниця",
312   - "postalCode": "21100",
313   - "region": u"Вінницька область",
314   - "streetAddress": fake.street_address()
315   - },
316   - "contactPoint": {
317   - "name": fake.name(),
318   - "telephone": fake.phone_number()
319   - },
320   - "identifier": {
321   - "scheme": u"UA-EDR",
322   - "id": u"{:08d}".format(fake.pyint()),
323   - "uri": fake.image_url(width=None, height=None)
324   - },
325   - "name": fake.company()
326   - },
327   - "description": fake.sentence(nb_words=10, variable_nb_words=True),
328   - "title": fake.sentence(nb_words=6, variable_nb_words=True)
  214 + "data" : {
  215 + "author": fake.procuringEntity(),
  216 + "description": fake.description(),
  217 + "title": fake.title()
329 218 }
330 219 })
331 220 if lot:
... ... @@ -336,17 +225,6 @@ def test_complaint_data(lot=False):
336 225 test_claim_data = test_complaint_data
337 226
338 227
339   -def test_complaint_answer_data(complaint_id):
340   - return munchify({
341   - "data": {
342   - "id": complaint_id,
343   - "status": "answered",
344   - "resolutionType": "resolved",
345   - "resolution": fake.sentence(nb_words=40, variable_nb_words=True)
346   - }
347   - })
348   -
349   -
350 228 def test_claim_answer_satisfying_data(claim_id):
351 229 return munchify({
352 230 "data": {
... ... @@ -397,14 +275,6 @@ def test_cancel_claim_data(claim_id, cancellation_reason):
397 275 })
398 276
399 277
400   -def test_change_cancellation_document_field_data(key, value):
401   - return munchify({
402   - "data": {
403   - key: value
404   - }
405   - })
406   -
407   -
408 278 def test_confirm_data(id):
409 279 return munchify({
410 280 "data": {
... ... @@ -431,42 +301,25 @@ def test_complaint_reply_data():
431 301 })
432 302
433 303
434   -def test_bid_data(mode):
  304 +def test_bid_data(mode, max_value_amount):
435 305 bid = munchify({
436 306 "data": {
437 307 "tenderers": [
438   - {
439   - "address": {
440   - "countryName": u"Україна",
441   - "countryName_ru": u"Украина",
442   - "countryName_en": "Ukraine",
443   - "locality": u"м. Вінниця",
444   - "postalCode": "21100",
445   - "region": u"Вінницька область",
446   - "streetAddress": fake.street_address()
447   - },
448   - "contactPoint": {
449   - "name": fake.name(),
450   - "telephone": fake.phone_number()
451   - },
452   - "identifier": {
453   - "scheme": u"UA-EDR",
454   - "id": u"{:08d}".format(fake.pyint()),
455   - },
456   - "name": fake.company()
457   - }
  308 + fake.procuringEntity()
458 309 ]
459 310 }
460 311 })
  312 + bid.data.tenderers[0].address.countryName_en = translate_country_en(bid.data.tenderers[0].address.countryName)
  313 + bid.data.tenderers[0].address.countryName_ru = translate_country_ru(bid.data.tenderers[0].address.countryName)
461 314 if 'open' in mode:
462 315 bid.data['selfEligible'] = True
463 316 bid.data['selfQualified'] = True
464 317 if mode == 'multiLot':
465 318 bid.data.lotValues = list()
466 319 for _ in range(2):
467   - bid.data.lotValues.append(test_bid_value())
  320 + bid.data.lotValues.append(test_bid_value(max_value_amount))
468 321 else:
469   - bid.data.update(test_bid_value())
  322 + bid.data.update(test_bid_value(max_value_amount))
470 323 if mode == 'meat':
471 324 bid.data.update(test_bid_params())
472 325 return bid
... ... @@ -486,11 +339,11 @@ def test_bid_params():
486 339 ]
487 340 })
488 341
489   -def test_bid_value():
  342 +def test_bid_value(max_value_amount):
490 343 return munchify({
491 344 "value": {
492 345 "currency": "UAH",
493   - "amount": fake.random_int(max=1999),
  346 + "amount": round(random.uniform(1, max_value_amount), 2),
494 347 "valueAddedTaxIncluded": True
495 348 }
496 349 })
... ... @@ -500,30 +353,10 @@ def test_supplier_data():
500 353 return munchify({
501 354 "data": {
502 355 "suppliers": [
503   - {
504   - "address": {
505   - "countryName": u"Україна",
506   - "locality": u"м. Вінниця",
507   - "postalCode": "21100",
508   - "region": u"м. Вінниця",
509   - "streetAddress": u"вул. Островського, 33"
510   - },
511   - "contactPoint": {
512   - "email": "soleksuk@gmail.com",
513   - "name": u"Сергій Олексюк",
514   - "telephone": "+380 (432) 21-69-30"
515   - },
516   - "identifier": {
517   - "id": "13313462",
518   - "legalName": u"Державне комунальне підприємство громадського харчування «Школяр»",
519   - "scheme": "UA-EDR",
520   - "uri": "http://sch10.edu.vn.ua/"
521   - },
522   - "name": u"ДКП «Школяр»"
523   - }
  356 + fake.procuringEntity()
524 357 ],
525 358 "value": {
526   - "amount": 475000,
  359 + "amount": fake.random_int(min=1),
527 360 "currency": "UAH",
528 361 "valueAddedTaxIncluded": True
529 362 }
... ... @@ -531,52 +364,14 @@ def test_supplier_data():
531 364 })
532 365
533 366
534   -def test_award_data():
535   - return munchify({'data': {}})
536   -
537   -
538   -def test_item_data():
539   - now = get_now()
540   - return munchify({
541   - "description": field_with_id('i', fake.catch_phrase()),
542   - "deliveryDate": {
543   - "endDate": (now + timedelta(days=5)).isoformat()
544   - },
545   - "deliveryLocation": {
546   - "latitude": 49.8500,
547   - "longitude": 24.0167
548   - },
549   - "deliveryAddress": {
550   - "countryName": u"Україна",
551   - "countryName_ru": u"Украина",
552   - "countryName_en": "Ukraine",
553   - "postalCode": fake.postalcode(),
554   - "region": u"м. Київ",
555   - "locality": u"м. Київ",
556   - "streetAddress": fake.street_address()
557   - },
558   - "classification": {
559   - "scheme": u"CPV",
560   - "id": u"44617100-9",
561   - "description": u"Картонні коробки",
562   - "description_ru": u"Большие картонные коробки",
563   - "description_en": u"Cartons"
564   - },
565   - "additionalClassifications": [
566   - {
567   - "scheme": u"ДКПП",
568   - "id": u"17.21.1",
569   - "description": u"Папір і картон гофровані, паперова й картонна тара"
570   - }
571   - ],
572   - "unit": {
573   - "name": u"кілограм",
574   - "name_ru": u"килограмм",
575   - "name_en": "kilogram",
576   - "code": u"KGM"
577   - },
578   - "quantity": fake.pyint()
579   - })
  367 +def test_item_data(cpv=None):
  368 + data = fake.fake_item(cpv)
  369 + data["description"] = field_with_id("i", data["description"])
  370 + days = fake.random_int(min=1, max=30)
  371 + data["deliveryDate"] = {"endDate": (get_now() + timedelta(days=days)).isoformat()}
  372 + data["deliveryAddress"]["countryName_en"] = translate_country_en(data["deliveryAddress"]["countryName"])
  373 + data["deliveryAddress"]["countryName_ru"] = translate_country_ru(data["deliveryAddress"]["countryName"])
  374 + return munchify(data)
580 375
581 376
582 377 def test_invalid_features_data():
... ... @@ -584,16 +379,16 @@ def test_invalid_features_data():
584 379 {
585 380 "code": "ee3e24bc17234a41bd3e3a04cc28e9c6",
586 381 "featureOf": "tenderer",
587   - "title": "Термін оплати",
588   - "description": "Умови відстрочки платежу після поставки товару",
  382 + "title": fake.title(),
  383 + "description": fake.description(),
589 384 "enum": [
590 385 {
591 386 "value": 0.35,
592   - "title": "180 днів та більше"
  387 + "title": fake.word()
593 388 },
594 389 {
595 390 "value": 0,
596   - "title": "Менше 30 днів"
  391 + "title": fake.word()
597 392 }
598 393 ]
599 394 },
... ... @@ -601,35 +396,36 @@ def test_invalid_features_data():
601 396 "code": "48cfd91612c04125ab406374d7cc8d93",
602 397 "featureOf": "item",
603 398 "relatedItem": "edd0032574bf4402877ad5f362df225a",
604   - "title": "Сорт",
605   - "description": "Сорт продукції",
  399 + "title": fake.title(),
  400 + "description": fake.description(),
606 401 "enum": [
607 402 {
608 403 "value": 0.35,
609   - "title": "Вищий"
  404 + "title": fake.word()
610 405 },
611 406 {
612 407 "value": 0,
613   - "title": "Другий"
  408 + "title": fake.word()
614 409 }
615 410 ]
616 411 }
617 412 ]
618 413
619 414
620   -def test_lot_data():
  415 +def test_lot_data(max_value_amount):
  416 + value_amount = round(random.uniform(1, max_value_amount), 2)
621 417 return munchify(
622 418 {
623   - "description": fake.sentence(nb_words=10, variable_nb_words=True),
624   - "title": field_with_id('l', fake.sentence(nb_words=6, variable_nb_words=True)),
  419 + "description": fake.description(),
  420 + "title": field_with_id('l', fake.title()),
625 421 "value": {
626 422 "currency": "UAH",
627   - "amount": 2000 + fake.pyfloat(left_digits=4, right_digits=1, positive=True),
  423 + "amount": value_amount,
628 424 "valueAddedTaxIncluded": True
629 425 },
630 426 "minimalStep": {
631 427 "currency": "UAH",
632   - "amount": 30.0,
  428 + "amount": round(random.uniform(0.005, 0.03) * value_amount, 2),
633 429 "valueAddedTaxIncluded": True
634 430 },
635 431 "status": "active"
... ...
... ... @@ -206,7 +206,8 @@ Get Broker Property By Username
206 206
207 207
208 208 Підготовка даних для створення лоту
209   - ${lot}= test_lot_data
  209 + [Arguments] ${max_lot_value_amount}
  210 + ${lot}= test_lot_data ${max_lot_value_amount}
210 211 ${reply}= Create Dictionary data=${lot}
211 212 [Return] ${reply}
212 213
... ... @@ -238,8 +239,9 @@ Get Broker Property By Username
238 239
239 240
240 241 Підготувати дані для подання пропозиції
241   - ${supplier_data}= test_bid_data ${mode}
242   - [Return] ${supplier_data}
  242 + [Arguments] ${max_value_amount}
  243 + ${bid_data}= test_bid_data ${mode} ${max_value_amount}
  244 + [Return] ${bid_data}
243 245
244 246
245 247 Підготувати дані про постачальника
... ...
... ... @@ -95,7 +95,7 @@ ${mode} meat
95 95 ... provider
96 96 ... ${USERS.users['${provider}'].broker}
97 97 [Teardown] Оновити LAST_MODIFICATION_DATE
98   - ${bid}= Підготувати дані для подання пропозиції
  98 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
99 99 ${bidresponses}= Create Dictionary bid=${bid}
100 100 Set To Dictionary ${USERS.users['${provider}']} bidresponses=${bidresponses}
101 101 ${resp}= Викликати для учасника ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid}
... ... @@ -129,7 +129,7 @@ ${mode} meat
129 129 ... ${USERS.users['${provider1}'].broker}
130 130 [Setup] Дочекатись дати початку прийому пропозицій ${provider1}
131 131 [Teardown] Оновити LAST_MODIFICATION_DATE
132   - ${bid}= Підготувати дані для подання пропозиції
  132 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
133 133 Log ${bid}
134 134 ${bidresponses}= Create Dictionary
135 135 Set To Dictionary ${bidresponses} bid ${bid}
... ...
... ... @@ -80,7 +80,7 @@ ${complaint_id} 1
80 80 ... ${USERS.users['${tender_owner}'].broker}
81 81 [Setup] Дочекатись синхронізації з майданчиком ${tender_owner}
82 82 [Teardown] Оновити LAST_MODIFICATION_DATE
83   - ${lot}= Підготовка даних для створення лоту
  83 + ${lot}= Підготовка даних для створення лоту ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
84 84 ${lot_resp}= Run As ${tender_owner} Створити лот ${TENDER['TENDER_UAID']} ${lot}
85 85 ${lot_id}= get_id_from_object ${lot.data}
86 86 ${lot_data}= Create Dictionary lot=${lot} lot_resp=${lot_resp} lot_id=${lot_id}
... ... @@ -238,7 +238,7 @@ ${complaint_id} 1
238 238 ... ${USERS.users['${provider}'].broker}
239 239 [Setup] Дочекатись синхронізації з майданчиком ${provider}
240 240 @{lots_ids}= Отримати ідентифікатори об’єктів ${provider} lots
241   - ${bid}= Підготувати дані для подання пропозиції
  241 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
242 242 ${bid_before_bidperiod_resp}= Require Failure ${provider} Подати цінову пропозицію на лоти ${TENDER['TENDER_UAID']} ${bid} ${lots_ids}
243 243 log ${bid_before_bidperiod_resp}
244 244
... ... @@ -249,7 +249,7 @@ ${complaint_id} 1
249 249 ... provider
250 250 ... ${USERS.users['${provider}'].broker}
251 251 [Setup] Дочекатись дати початку прийому пропозицій ${provider}
252   - ${bid}= Підготувати дані для подання пропозиції
  252 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
253 253 ${no_lot_bid_resp}= Require Failure ${provider} Подати цінову пропозицію ${TENDER['TENDER_UAID']} ${bid}
254 254 log ${no_lot_bid_resp}
255 255
... ... @@ -259,7 +259,7 @@ ${complaint_id} 1
259 259 ... ${USERS.users['${provider}'].broker}
260 260 [Teardown] Оновити LAST_MODIFICATION_DATE
261 261 @{lots_ids}= Отримати ідентифікатори об’єктів ${provider} lots
262   - ${bid}= Підготувати дані для подання пропозиції
  262 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
263 263 ${bidresponses}= Create Dictionary bid=${bid}
264 264 Set To Dictionary ${USERS.users['${provider}']} bidresponses=${bidresponses}
265 265 ${resp}= Run As ${provider} Подати цінову пропозицію на лоти ${TENDER['TENDER_UAID']} ${bid} ${lots_ids}
... ... @@ -281,7 +281,7 @@ ${complaint_id} 1
281 281 [Teardown] Оновити LAST_MODIFICATION_DATE
282 282 Дочекатись дати початку прийому пропозицій ${provider}
283 283 @{lots_ids}= Отримати ідентифікатори об’єктів ${provider} lots
284   - ${bid}= Підготувати дані для подання пропозиції
  284 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
285 285 ${bidresponses}= Create Dictionary bid=${bid}
286 286 Set To Dictionary ${USERS.users['${provider}']} bidresponses=${bidresponses}
287 287 ${resp}= Run As ${provider} Подати цінову пропозицію на лоти ${TENDER['TENDER_UAID']} ${bid} ${lots_ids}
... ... @@ -311,7 +311,7 @@ ${complaint_id} 1
311 311 [Teardown] Оновити LAST_MODIFICATION_DATE
312 312 Дочекатись дати початку прийому пропозицій ${provider1}
313 313 @{lots_ids}= Отримати ідентифікатори об’єктів ${provider1} lots
314   - ${bid}= Підготувати дані для подання пропозиції
  314 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
315 315 ${bidresponses}= Create Dictionary bid=${bid}
316 316 Set To Dictionary ${USERS.users['${provider1}']} bidresponses=${bidresponses}
317 317 ${resp}= Run As ${provider1} Подати цінову пропозицію на лоти ${TENDER['TENDER_UAID']} ${bid} ${lots_ids}
... ...
  1 +# -*- coding: utf-8 -*-
  2 +from faker import Faker
  3 +from faker.providers import BaseProvider
  4 +from munch import Munch
  5 +from json import load
  6 +import os
  7 +
  8 +
  9 +def load_data_from_file(file_name):
  10 + if not os.path.exists(file_name):
  11 + file_name = os.path.join(os.path.dirname(__file__), 'data', file_name)
  12 + with open(file_name) as file_obj:
  13 + if file_name.endswith(".json"):
  14 + return Munch.fromDict(load(file_obj))
  15 + elif file_name.endswith(".yaml"):
  16 + return fromYAML(file_obj)
  17 +
  18 +
  19 +class OP_Provider(BaseProvider):
  20 + __fake_data = load_data_from_file("faker_data.json")
  21 + word_list = __fake_data.words
  22 + procuringEntities = __fake_data.procuringEntities
  23 + addresses = __fake_data.addresses
  24 + classifications = __fake_data.classifications
  25 + units = __fake_data.units
  26 + cpvs = __fake_data.cpvs
  27 + items_base_data = __fake_data.items_base_data
  28 +
  29 +
  30 + @classmethod
  31 + def randomize_nb_elements(self, number=10, le=60, ge=140):
  32 + """
  33 + Returns a random value near number.
  34 +
  35 + :param number: value to which the result must be near
  36 + :param le: lower limit of randomizing (percents). Default - 60
  37 + :param ge: upper limit of randomizing (percents). Default - 140
  38 + :returns: a random int in range [le * number / 100, ge * number / 100]
  39 + with minimum of 1
  40 + """
  41 + if le > ge:
  42 + raise Exception("Lower bound: {} is greater then upper: {}.".format(le, ge))
  43 + return int(number * self.random_int(min=le, max=ge) / 100) + 1
  44 +
  45 +
  46 + @classmethod
  47 + def word(self):
  48 + """
  49 + :example 'Курка'
  50 + """
  51 + return self.random_element(self.word_list)
  52 +
  53 +
  54 + @classmethod
  55 + def words(self, nb=3):
  56 + """
  57 + Generate an array of random words
  58 + :example: array('Надіньте', 'фуражка', 'зелено')
  59 + :param nb: how many words to return
  60 + """
  61 + return [self.word() for _ in range(0, nb)]
  62 +
  63 +
  64 + @classmethod
  65 + def sentence(self, nb_words=5, variable_nb_words=True):
  66 + """
  67 + Generate a random sentence
  68 + :example: 'Курка надіньте пречудовий зелено на.'
  69 + :param nb_words: how many words the sentence should contain
  70 + :param variable_nb_words: set to false if you want exactly $nbWords returned,
  71 + otherwise $nbWords may vary by +/-40% with a minimum of 1
  72 + """
  73 + if nb_words <= 0:
  74 + return ''
  75 +
  76 + if variable_nb_words:
  77 + nb_words = self.randomize_nb_elements(number=nb_words)
  78 +
  79 + words = self.words(nb_words)
  80 + words[0] = words[0].title()
  81 +
  82 + return " ".join(words) + '.'
  83 +
  84 +
  85 + @classmethod
  86 + def title(self):
  87 + return self.sentence(nb_words = 3)
  88 +
  89 +
  90 + @classmethod
  91 + def description(self):
  92 + return self.sentence(nb_words = 10)
  93 +
  94 +
  95 + @classmethod
  96 + def procuringEntity(self):
  97 + return self.random_element(self.procuringEntities)
  98 +
  99 +
  100 + @classmethod
  101 + def cpv(self):
  102 + return self.random_element(self.cpvs)
  103 +
  104 +
  105 + @classmethod
  106 + def fake_item(self, cpv_group=None):
  107 + """
  108 + Generate a random item for openprocurement tenders
  109 +
  110 + :param cpv_group: gives possibility to generate items
  111 + from one cpv group. Cpv group is three digits in the beginning
  112 + of each cpv id.
  113 + """
  114 + if cpv_group is None:
  115 + item_base_data = self.random_element(self.items_base_data)
  116 + else:
  117 + cpv_group = str(cpv_group)
  118 + similar_cpvs = []
  119 + for cpv_element in self.cpvs:
  120 + if cpv_element.startswith(cpv_group):
  121 + similar_cpvs.append(cpv_element)
  122 + cpv = self.random_element(similar_cpvs)
  123 + for entity in self.items_base_data:
  124 + if entity["cpv_id"] == cpv:
  125 + item_base_data = entity
  126 + break
  127 +
  128 + # choose appropriate dkpp classification for item_base_data's cpv
  129 + for entity in self.classifications:
  130 + if entity["classification"]["id"] == item_base_data["cpv_id"]:
  131 + classification = entity
  132 + break
  133 +
  134 + address = self.random_element(self.addresses)
  135 + unit = self.random_element(self.units)
  136 + item = {
  137 + "description": item_base_data["description"],
  138 + "classification": classification["classification"],
  139 + "additionalClassifications": classification["additionalClassifications"],
  140 + "deliveryAddress": address["deliveryAddress"],
  141 + "deliveryLocation": address["deliveryLocation"],
  142 + "unit": item_base_data["unit"],
  143 + "quantity": self.randomize_nb_elements(number=item_base_data["quantity"], le=80, ge=120)
  144 + }
  145 + return item
... ...
... ... @@ -20,15 +20,12 @@ from math import radians, cos, sin, asin, sqrt
20 20 from .initial_data import (
21 21 create_fake_doc,
22 22 create_fake_sentence,
23   - test_award_data,
24 23 test_bid_data,
25 24 test_cancel_claim_data,
26 25 test_cancel_tender_data,
27   - test_change_cancellation_document_field_data,
28 26 test_claim_answer_data,
29 27 test_claim_answer_satisfying_data,
30 28 test_claim_data,
31   - test_complaint_answer_data,
32 29 test_complaint_data,
33 30 test_complaint_reply_data,
34 31 test_confirm_data,
... ...
... ... @@ -369,7 +369,7 @@ ${mode} single
369 369 ... provider
370 370 ... ${USERS.users['${provider}'].broker}
371 371 [Setup] Дочекатись синхронізації з майданчиком ${provider}
372   - ${bid}= Підготувати дані для подання пропозиції
  372 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
373 373 Log ${bid}
374 374 ${bidresponses}= Create Dictionary bid=${bid}
375 375 Set To Dictionary ${USERS.users['${provider}']} bidresponses=${bidresponses}
... ... @@ -420,7 +420,7 @@ ${mode} single
420 420 ... ${USERS.users['${provider}'].broker}
421 421 [Setup] Дочекатись дати початку прийому пропозицій ${provider}
422 422 [Teardown] Оновити LAST_MODIFICATION_DATE
423   - ${bid}= Підготувати дані для подання пропозиції
  423 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
424 424 Log ${bid}
425 425 ${bidresponses}= Create Dictionary bid=${bid}
426 426 Set To Dictionary ${USERS.users['${provider}']} bidresponses=${bidresponses}
... ... @@ -445,7 +445,7 @@ ${mode} single
445 445 ... minimal
446 446 [Setup] Дочекатись дати початку прийому пропозицій ${provider}
447 447 [Teardown] Оновити LAST_MODIFICATION_DATE
448   - ${bid}= Підготувати дані для подання пропозиції
  448 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
449 449 Log ${bid}
450 450 ${bidresponses}= Create Dictionary bid=${bid}
451 451 Set To Dictionary ${USERS.users['${provider}']} bidresponses=${bidresponses}
... ... @@ -516,7 +516,7 @@ ${mode} single
516 516 ... minimal
517 517 [Setup] Дочекатись дати початку прийому пропозицій ${provider1}
518 518 [Teardown] Оновити LAST_MODIFICATION_DATE
519   - ${bid}= Підготувати дані для подання пропозиції
  519 + ${bid}= Підготувати дані для подання пропозиції ${USERS.users['${tender_owner}'].initial_data.data.value.amount}
520 520 Log ${bid}
521 521 ${bidresponses}= Create Dictionary bid=${bid}
522 522 Set To Dictionary ${USERS.users['${provider1}']} bidresponses=${bidresponses}
... ...
Please register or login to post a comment