From e9904222ff7b44f4780bca5521253e570bd1de8e Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Thu, 18 May 2023 19:50:27 +0400 Subject: [PATCH 01/13] done --- .gitignore | 1 + tests/level_1/test_five_title.py | 6 +++++- tests/level_1/test_four_bank_parser.py | 8 ++++++-- tests/level_1/test_one_gender.py | 3 ++- tests/level_1/test_three_url_builder.py | 5 ++++- tests/level_1/test_two_date_parser.py | 3 ++- 6 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..ae412d6a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +env/ \ No newline at end of file diff --git a/tests/level_1/test_five_title.py b/tests/level_1/test_five_title.py index fe767004..99fc359b 100644 --- a/tests/level_1/test_five_title.py +++ b/tests/level_1/test_five_title.py @@ -2,4 +2,8 @@ def test_change_copy_item(): - pass + title = 'Hello World!' + + assert change_copy_item(title, 20) == title + assert change_copy_item(title, 100) == 'Copy of Hello World!' + assert change_copy_item('Copy of Hello World! (3)', 100) == 'Copy of Hello World! (4)' diff --git a/tests/level_1/test_four_bank_parser.py b/tests/level_1/test_four_bank_parser.py index df6c1b41..a6a4171d 100644 --- a/tests/level_1/test_four_bank_parser.py +++ b/tests/level_1/test_four_bank_parser.py @@ -1,5 +1,9 @@ from functions.level_1.four_bank_parser import BankCard, SmsMessage, Expense, parse_ineco_expense - +from datetime import datetime def test_parse_ineco_expense(): - pass + message = SmsMessage('100 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) + cards = [BankCard('1234', 'KONSTANTIN MISHAKOV'), BankCard('5678', 'KONSTANTIN MISHAKOV')] + + assert parse_ineco_expense(message, cards) + \ No newline at end of file diff --git a/tests/level_1/test_one_gender.py b/tests/level_1/test_one_gender.py index 31d0bc7f..8f8117e0 100644 --- a/tests/level_1/test_one_gender.py +++ b/tests/level_1/test_one_gender.py @@ -2,4 +2,5 @@ def test_genderalize(): - pass + assert genderalize('сказал', 'сказала', "male") == 'сказал' + assert not genderalize('сказал', 'сказала', "male") == 'сказала' \ No newline at end of file diff --git a/tests/level_1/test_three_url_builder.py b/tests/level_1/test_three_url_builder.py index bb7b54d2..35b70342 100644 --- a/tests/level_1/test_three_url_builder.py +++ b/tests/level_1/test_three_url_builder.py @@ -2,4 +2,7 @@ def test_build_url(): - pass + assert build_url('https://yandex.ru', 'search/', {'text':'kinopoisk', + 'search_source' : 'yaru_desktop_common', + 'src' : 'suggest_Pers'}) == 'https://yandex.ru/search/?text=kinopoisk&search_source=yaru_desktop_common&src=suggest_Pers' + \ No newline at end of file diff --git a/tests/level_1/test_two_date_parser.py b/tests/level_1/test_two_date_parser.py index b0247049..0a19ea2a 100644 --- a/tests/level_1/test_two_date_parser.py +++ b/tests/level_1/test_two_date_parser.py @@ -2,4 +2,5 @@ def test_compose_datetime_from(): - pass + assert compose_datetime_from('today', "17:15") + assert compose_datetime_from('tomorrow', "17:15") From 4bdd4ecc5bef6f1b23b1bde1845b624e84eb13b1 Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Sat, 20 May 2023 19:41:12 +0400 Subject: [PATCH 02/13] new iteration --- .gitignore | 4 +++- tests/level_1/test_five_title.py | 10 ++++++++-- tests/level_1/test_four_bank_parser.py | 14 ++++++++++++-- tests/level_1/test_one_gender.py | 17 ++++++++++++++--- tests/level_1/test_three_url_builder.py | 14 +++++++++++--- tests/level_1/test_two_date_parser.py | 25 ++++++++++++++++++++++--- 6 files changed, 70 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index ae412d6a..44b720ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -env/ \ No newline at end of file +env/ +functions +__\pycache__ \ No newline at end of file diff --git a/tests/level_1/test_five_title.py b/tests/level_1/test_five_title.py index 99fc359b..11a46ec6 100644 --- a/tests/level_1/test_five_title.py +++ b/tests/level_1/test_five_title.py @@ -1,9 +1,15 @@ from functions.level_1.five_title import change_copy_item -def test_change_copy_item(): +def test__change_copy_item__max_length_20(): title = 'Hello World!' - assert change_copy_item(title, 20) == title + + +def test__change_copy_item__max_length_100(): + title = 'Hello World!' assert change_copy_item(title, 100) == 'Copy of Hello World!' + + +def test__change_copy_item__title_with_copy_and_index(): assert change_copy_item('Copy of Hello World! (3)', 100) == 'Copy of Hello World! (4)' diff --git a/tests/level_1/test_four_bank_parser.py b/tests/level_1/test_four_bank_parser.py index a6a4171d..33a76534 100644 --- a/tests/level_1/test_four_bank_parser.py +++ b/tests/level_1/test_four_bank_parser.py @@ -1,9 +1,19 @@ from functions.level_1.four_bank_parser import BankCard, SmsMessage, Expense, parse_ineco_expense from datetime import datetime +from decimal import Decimal + def test_parse_ineco_expense(): - message = SmsMessage('100 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) + message = SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) cards = [BankCard('1234', 'KONSTANTIN MISHAKOV'), BankCard('5678', 'KONSTANTIN MISHAKOV')] + expense = Expense( + amount=Decimal("99.99"), + card=cards[0], + spent_in="nenaprasno.ru", + spent_at=datetime.strptime("12.04.23 16:00", "%d.%m.%y %H:%M"), + ) + + result = parse_ineco_expense(message, cards) - assert parse_ineco_expense(message, cards) + assert result == expense \ No newline at end of file diff --git a/tests/level_1/test_one_gender.py b/tests/level_1/test_one_gender.py index 8f8117e0..75bbcfa7 100644 --- a/tests/level_1/test_one_gender.py +++ b/tests/level_1/test_one_gender.py @@ -1,6 +1,17 @@ from functions.level_1.one_gender import genderalize -def test_genderalize(): - assert genderalize('сказал', 'сказала', "male") == 'сказал' - assert not genderalize('сказал', 'сказала', "male") == 'сказала' \ No newline at end of file +def test__genderalize__male(): + gender = 'male' + + result = genderalize('сказал', 'сказала', gender) + + assert result == 'сказал' + + +def test__genderalize__male(): + gender = 'female' + + result = genderalize('сказал', 'сказала', gender) + + assert result == 'сказала' \ No newline at end of file diff --git a/tests/level_1/test_three_url_builder.py b/tests/level_1/test_three_url_builder.py index 35b70342..c004c92a 100644 --- a/tests/level_1/test_three_url_builder.py +++ b/tests/level_1/test_three_url_builder.py @@ -2,7 +2,15 @@ def test_build_url(): - assert build_url('https://yandex.ru', 'search/', {'text':'kinopoisk', - 'search_source' : 'yaru_desktop_common', - 'src' : 'suggest_Pers'}) == 'https://yandex.ru/search/?text=kinopoisk&search_source=yaru_desktop_common&src=suggest_Pers' + host_name = 'https://yandex.ru' + relative_url = 'search/' + get_params={'text':'kinopoisk', + 'search_source' : 'yaru_desktop_common', + 'src' : 'suggest_Pers' + } + exprcted_result = 'https://yandex.ru/search/?text=kinopoisk&search_source=yaru_desktop_common&src=suggest_Pers' + + result = build_url(host_name, relative_url, get_params) + + assert result == exprcted_result \ No newline at end of file diff --git a/tests/level_1/test_two_date_parser.py b/tests/level_1/test_two_date_parser.py index 0a19ea2a..42b6fc48 100644 --- a/tests/level_1/test_two_date_parser.py +++ b/tests/level_1/test_two_date_parser.py @@ -1,6 +1,25 @@ from functions.level_1.two_date_parser import compose_datetime_from +import datetime -def test_compose_datetime_from(): - assert compose_datetime_from('today', "17:15") - assert compose_datetime_from('tomorrow', "17:15") +def test__compose_datetime_from__today(): + today = datetime.date.today() + hour_str = '17' + minute_str = '15' + expected_today = datetime(today.year, today.month, today.day, int(hour_str), int(minute_str), ) + + result = compose_datetime_from('today', "17:15") + + assert result == expected_today + + +def test__compose_datetime_from__tomorrow(): + today = datetime.date.today() + hour_str = '17' + minute_str = '15' + tomorrow = today + datetime.timedelta(1) + expected_tomorrow = datetime(tomorrow.year, tomorrow.month, tomorrow.day, int(hour_str), int(minute_str), ) + + result = compose_datetime_from('tomorrow', "17:15") + + assert result == expected_tomorrow From 61d355cf4a93e882f078d14c4f4412a38ff1b7c8 Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Sat, 20 May 2023 19:46:47 +0400 Subject: [PATCH 03/13] small fix --- tests/level_1/test_two_date_parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/level_1/test_two_date_parser.py b/tests/level_1/test_two_date_parser.py index 42b6fc48..44a577cf 100644 --- a/tests/level_1/test_two_date_parser.py +++ b/tests/level_1/test_two_date_parser.py @@ -6,7 +6,7 @@ def test__compose_datetime_from__today(): today = datetime.date.today() hour_str = '17' minute_str = '15' - expected_today = datetime(today.year, today.month, today.day, int(hour_str), int(minute_str), ) + expected_today = datetime.datetime(today.year, today.month, today.day, int(hour_str), int(minute_str), ) result = compose_datetime_from('today', "17:15") @@ -18,7 +18,7 @@ def test__compose_datetime_from__tomorrow(): hour_str = '17' minute_str = '15' tomorrow = today + datetime.timedelta(1) - expected_tomorrow = datetime(tomorrow.year, tomorrow.month, tomorrow.day, int(hour_str), int(minute_str), ) + expected_tomorrow = datetime.datetime(tomorrow.year, tomorrow.month, tomorrow.day, int(hour_str), int(minute_str), ) result = compose_datetime_from('tomorrow', "17:15") From 018234f436fbedd0dbc0280b925523efc4ef5c7a Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Sun, 21 May 2023 10:04:09 +0400 Subject: [PATCH 04/13] new try --- tests/level_1/test_five_title.py | 4 ++-- tests/level_1/test_one_gender.py | 8 ++------ tests/level_1/test_three_url_builder.py | 6 +++--- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/tests/level_1/test_five_title.py b/tests/level_1/test_five_title.py index 11a46ec6..0261c4e7 100644 --- a/tests/level_1/test_five_title.py +++ b/tests/level_1/test_five_title.py @@ -1,12 +1,12 @@ from functions.level_1.five_title import change_copy_item -def test__change_copy_item__max_length_20(): +def test__change_copy_item__normal_case_success(): title = 'Hello World!' assert change_copy_item(title, 20) == title -def test__change_copy_item__max_length_100(): +def test__change_copy_item__long_title(): title = 'Hello World!' assert change_copy_item(title, 100) == 'Copy of Hello World!' diff --git a/tests/level_1/test_one_gender.py b/tests/level_1/test_one_gender.py index 75bbcfa7..47de2270 100644 --- a/tests/level_1/test_one_gender.py +++ b/tests/level_1/test_one_gender.py @@ -4,14 +4,10 @@ def test__genderalize__male(): gender = 'male' - result = genderalize('сказал', 'сказала', gender) - - assert result == 'сказал' + assert genderalize('сказал', 'сказала', gender) == 'сказал' def test__genderalize__male(): gender = 'female' - result = genderalize('сказал', 'сказала', gender) - - assert result == 'сказала' \ No newline at end of file + assert genderalize('сказал', 'сказала', gender) == 'сказала' \ No newline at end of file diff --git a/tests/level_1/test_three_url_builder.py b/tests/level_1/test_three_url_builder.py index c004c92a..ab5f072a 100644 --- a/tests/level_1/test_three_url_builder.py +++ b/tests/level_1/test_three_url_builder.py @@ -5,9 +5,9 @@ def test_build_url(): host_name = 'https://yandex.ru' relative_url = 'search/' get_params={'text':'kinopoisk', - 'search_source' : 'yaru_desktop_common', - 'src' : 'suggest_Pers' - } + 'search_source' : 'yaru_desktop_common', + 'src' : 'suggest_Pers' + } exprcted_result = 'https://yandex.ru/search/?text=kinopoisk&search_source=yaru_desktop_common&src=suggest_Pers' result = build_url(host_name, relative_url, get_params) From 043bea6a4c0a1e7e5cd22ed230726c25afdc85e2 Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Sun, 21 May 2023 12:51:53 +0400 Subject: [PATCH 05/13] small fix --- tests/level_1/test_three_url_builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/level_1/test_three_url_builder.py b/tests/level_1/test_three_url_builder.py index ab5f072a..56db4095 100644 --- a/tests/level_1/test_three_url_builder.py +++ b/tests/level_1/test_three_url_builder.py @@ -4,7 +4,7 @@ def test_build_url(): host_name = 'https://yandex.ru' relative_url = 'search/' - get_params={'text':'kinopoisk', + get_params = {'text':'kinopoisk', 'search_source' : 'yaru_desktop_common', 'src' : 'suggest_Pers' } From 1f9e4827238f88e0aef221e36955da256d9e1d45 Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Mon, 22 May 2023 22:58:01 +0400 Subject: [PATCH 06/13] another try) --- tests/level_1/test_five_title.py | 6 ++---- tests/level_1/test_four_bank_parser.py | 2 +- tests/level_1/test_one_gender.py | 8 ++------ tests/level_1/test_three_url_builder.py | 2 +- tests/level_1/test_two_date_parser.py | 8 ++------ 5 files changed, 8 insertions(+), 18 deletions(-) diff --git a/tests/level_1/test_five_title.py b/tests/level_1/test_five_title.py index 0261c4e7..712d5a11 100644 --- a/tests/level_1/test_five_title.py +++ b/tests/level_1/test_five_title.py @@ -2,13 +2,11 @@ def test__change_copy_item__normal_case_success(): - title = 'Hello World!' - assert change_copy_item(title, 20) == title + assert change_copy_item('Hello World!', 20) == title def test__change_copy_item__long_title(): - title = 'Hello World!' - assert change_copy_item(title, 100) == 'Copy of Hello World!' + assert change_copy_item('Hello World!', 100) == 'Copy of Hello World!' def test__change_copy_item__title_with_copy_and_index(): diff --git a/tests/level_1/test_four_bank_parser.py b/tests/level_1/test_four_bank_parser.py index 33a76534..0cfd725a 100644 --- a/tests/level_1/test_four_bank_parser.py +++ b/tests/level_1/test_four_bank_parser.py @@ -3,7 +3,7 @@ from decimal import Decimal -def test_parse_ineco_expense(): +def test__parse_ineco_expense__success(): message = SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) cards = [BankCard('1234', 'KONSTANTIN MISHAKOV'), BankCard('5678', 'KONSTANTIN MISHAKOV')] expense = Expense( diff --git a/tests/level_1/test_one_gender.py b/tests/level_1/test_one_gender.py index 47de2270..0bd38ca6 100644 --- a/tests/level_1/test_one_gender.py +++ b/tests/level_1/test_one_gender.py @@ -2,12 +2,8 @@ def test__genderalize__male(): - gender = 'male' - - assert genderalize('сказал', 'сказала', gender) == 'сказал' + assert genderalize('сказал', 'сказала', 'male') == 'сказал' def test__genderalize__male(): - gender = 'female' - - assert genderalize('сказал', 'сказала', gender) == 'сказала' \ No newline at end of file + assert genderalize('сказал', 'сказала', 'female') == 'сказала' \ No newline at end of file diff --git a/tests/level_1/test_three_url_builder.py b/tests/level_1/test_three_url_builder.py index 56db4095..367e4915 100644 --- a/tests/level_1/test_three_url_builder.py +++ b/tests/level_1/test_three_url_builder.py @@ -6,7 +6,7 @@ def test_build_url(): relative_url = 'search/' get_params = {'text':'kinopoisk', 'search_source' : 'yaru_desktop_common', - 'src' : 'suggest_Pers' + 'src' : 'suggest_Pers', } exprcted_result = 'https://yandex.ru/search/?text=kinopoisk&search_source=yaru_desktop_common&src=suggest_Pers' diff --git a/tests/level_1/test_two_date_parser.py b/tests/level_1/test_two_date_parser.py index 44a577cf..7d686ba4 100644 --- a/tests/level_1/test_two_date_parser.py +++ b/tests/level_1/test_two_date_parser.py @@ -4,9 +4,7 @@ def test__compose_datetime_from__today(): today = datetime.date.today() - hour_str = '17' - minute_str = '15' - expected_today = datetime.datetime(today.year, today.month, today.day, int(hour_str), int(minute_str), ) + expected_today = datetime.datetime(today.year, today.month, today.day, 17, 15) result = compose_datetime_from('today', "17:15") @@ -15,10 +13,8 @@ def test__compose_datetime_from__today(): def test__compose_datetime_from__tomorrow(): today = datetime.date.today() - hour_str = '17' - minute_str = '15' tomorrow = today + datetime.timedelta(1) - expected_tomorrow = datetime.datetime(tomorrow.year, tomorrow.month, tomorrow.day, int(hour_str), int(minute_str), ) + expected_tomorrow = datetime.datetime(tomorrow.year, tomorrow.month, tomorrow.day, 17, 15) result = compose_datetime_from('tomorrow', "17:15") From 1e33d32bf945e4ee26331eab7bc493ad339083bd Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Sat, 27 May 2023 01:19:57 +0400 Subject: [PATCH 07/13] first try --- .gitignore | 2 ++ tests/level_1.5/test_five_replace_word.py | 32 +++++++++++++++++++ tests/level_1.5/test_four_sentiment.py | 34 +++++++++++++++++++++ tests/level_1.5/test_one_median.py | 18 +++++++++++ tests/level_1.5/test_three_first.py | 32 +++++++++++++++++++ tests/level_1.5/test_two_square_equation.py | 17 +++++++++++ 6 files changed, 135 insertions(+) create mode 100644 .gitignore create mode 100644 tests/level_1.5/test_five_replace_word.py create mode 100644 tests/level_1.5/test_four_sentiment.py create mode 100644 tests/level_1.5/test_one_median.py create mode 100644 tests/level_1.5/test_three_first.py create mode 100644 tests/level_1.5/test_two_square_equation.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..06a47c53 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +env/ +__pycache__/ diff --git a/tests/level_1.5/test_five_replace_word.py b/tests/level_1.5/test_five_replace_word.py new file mode 100644 index 00000000..fb0a61e0 --- /dev/null +++ b/tests/level_1.5/test_five_replace_word.py @@ -0,0 +1,32 @@ +from functions.level_1_5.five_replace_word import replace_word +import pytest + + +def test__replace_word__success(): + text = 'Установите последнюю версию PowerShell для новых функций и улучшения!' + replace_from = 'Установите' + replace_to = 'Удалите' + expected_result = 'Удалите последнюю версию PowerShell для новых функций и улучшения!' + + result = replace_word(text, replace_from, replace_to) + + assert result == expected_result + + +def test__replace_word__empty_original_string(): + assert replace_word('', 'PowerShell', 'WinRar') == '' + + +def test__replace_word__no_matches(): + assert replace_word('Установите', 'PowerShell', 'WinRar') == 'Установите' + + +def test__replace_word__attribute_error(): + with pytest.raises(AttributeError): + replace_word(1111, 'PowerShell', 'WinRar') + + +def test__replace_word__type_error(): + with pytest.raises(TypeError): + replace_word('Установите последнюю версию PowerShell', 'Установите', 1111) + diff --git a/tests/level_1.5/test_four_sentiment.py b/tests/level_1.5/test_four_sentiment.py new file mode 100644 index 00000000..ba3ac16c --- /dev/null +++ b/tests/level_1.5/test_four_sentiment.py @@ -0,0 +1,34 @@ +from functions.level_1_5.four_sentiment import check_tweet_sentiment + + +def test__check_tweet_sentiment__good(): + text = 'I love this movie' + good_words = {'love', 'great', 'awesome'} + bad_words = {'hate', 'terrible', 'awful'} + exp_result = 'GOOD' + + result = check_tweet_sentiment(text, good_words, bad_words) + + assert result == exp_result + + +def test__check_tweet_sentiment__bad(): + text = 'This pizza is disgusting' + good_words = {'love', 'great', 'awesome'} + bad_words = {'disgusting', 'terrible', 'awful'} + exp_result = 'BAD' + + result = check_tweet_sentiment(text, good_words, bad_words) + + assert result == exp_result + + +def test__check_tweet_sentiment__none(): + text = 'The product has good features, but the customer support is bad' + good_words = {'good', 'excellent', 'impressive'} + bad_words = {'bad', 'poor', 'disappointing'} + exp_result = None + + result = check_tweet_sentiment(text, good_words, bad_words) + + assert result == exp_result \ No newline at end of file diff --git a/tests/level_1.5/test_one_median.py b/tests/level_1.5/test_one_median.py new file mode 100644 index 00000000..b4dc9011 --- /dev/null +++ b/tests/level_1.5/test_one_median.py @@ -0,0 +1,18 @@ +from functions.level_1_5.one_median import get_median_value +import pytest + +def test__get_median_value__empty_list(): + assert get_median_value([]) == None + + +def test__get_median_value__multiple_of_two(): + assert get_median_value([8, 1, 3, 2, 5, 7]) == 6 + + +def test__get_median_value__not_multiple_of_two(): + assert get_median_value([8, 1, 3, 2, 5]) == 2 + + +def test__get_median_value__index_error(): + with pytest.raises(IndexError): + get_median_value([8, 1, 3, 2]) diff --git a/tests/level_1.5/test_three_first.py b/tests/level_1.5/test_three_first.py new file mode 100644 index 00000000..85f68668 --- /dev/null +++ b/tests/level_1.5/test_three_first.py @@ -0,0 +1,32 @@ +from functions.level_1_5.three_first import first +import pytest + + +def test__first__success_normal(): + assert first([1, 2, 3, 4]) == 1 + + +def test__first__attribute_error(): + with pytest.raises(AttributeError): + first([]) + + +def test__first__success_default_none(): + assert first([], None) is None + + +def test__first__success_list_of_string(): + assert first(['88', '2', '3', '4']) == '88' + + +def test__first__success_default_string(): + assert first([], 'def') == 'def' + + +def test__first__success_default_tuple(): + assert first([], (1, 5)) == (1, 5) + + +def test__first__attribute_error(): + with pytest.raises(KeyError): + first({'a': 'b'}) diff --git a/tests/level_1.5/test_two_square_equation.py b/tests/level_1.5/test_two_square_equation.py new file mode 100644 index 00000000..8551c91f --- /dev/null +++ b/tests/level_1.5/test_two_square_equation.py @@ -0,0 +1,17 @@ +from functions.level_1_5.two_square_equation import solve_square_equation + + +def test__salve_square_equation__discriminant_less_than_zero(): + assert solve_square_equation(2.12, 4.5, 8.55) == (None, None) + + +def test__salve_square_equation__square_coefficient_not_eq_zero(): + assert solve_square_equation(1, 3, 2) == (-2.0, -1.0) + + +def test__salve_square_equation__square_coef_eq_zero(): + assert solve_square_equation(0, 2, 2) == (-1.0, None) + + +def test__salve_square_equation__square_linear_eq_zero(): + assert solve_square_equation(0, 0, 2) == (None, None) \ No newline at end of file From 8dc0b15d60eb7a7ae7e298f7d95b09ec2954c694 Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Sat, 27 May 2023 02:14:17 +0400 Subject: [PATCH 08/13] tests_1_try_3 --- tests/level_1/test_five_title.py | 2 +- tests/level_1/test_four_bank_parser.py | 10 ++++++++++ tests/level_1/test_one_gender.py | 6 +++++- tests/level_1/test_three_url_builder.py | 23 ++++++++++++++++++++++- 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/tests/level_1/test_five_title.py b/tests/level_1/test_five_title.py index 712d5a11..aeeee3dc 100644 --- a/tests/level_1/test_five_title.py +++ b/tests/level_1/test_five_title.py @@ -2,7 +2,7 @@ def test__change_copy_item__normal_case_success(): - assert change_copy_item('Hello World!', 20) == title + assert change_copy_item('Hello World!', 20) == 'Hello World!' def test__change_copy_item__long_title(): diff --git a/tests/level_1/test_four_bank_parser.py b/tests/level_1/test_four_bank_parser.py index 0cfd725a..8ae25afa 100644 --- a/tests/level_1/test_four_bank_parser.py +++ b/tests/level_1/test_four_bank_parser.py @@ -1,6 +1,7 @@ from functions.level_1.four_bank_parser import BankCard, SmsMessage, Expense, parse_ineco_expense from datetime import datetime from decimal import Decimal +import pytest def test__parse_ineco_expense__success(): @@ -16,4 +17,13 @@ def test__parse_ineco_expense__success(): result = parse_ineco_expense(message, cards) assert result == expense + + +def test__parse_ineco_expense__invalid_format(): + message = SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) + cards = [BankCard('5678', 'KONSTANTIN MISHAKOV')] + + with pytest.raises(IndexError): + result = parse_ineco_expense(message, cards) + \ No newline at end of file diff --git a/tests/level_1/test_one_gender.py b/tests/level_1/test_one_gender.py index 0bd38ca6..284649ee 100644 --- a/tests/level_1/test_one_gender.py +++ b/tests/level_1/test_one_gender.py @@ -6,4 +6,8 @@ def test__genderalize__male(): def test__genderalize__male(): - assert genderalize('сказал', 'сказала', 'female') == 'сказала' \ No newline at end of file + assert genderalize('сказал', 'сказала', 'female') == 'сказала' + + +def test__genderalize__male(): + assert genderalize('сказал', 'сказала', 'none') == 'сказала' \ No newline at end of file diff --git a/tests/level_1/test_three_url_builder.py b/tests/level_1/test_three_url_builder.py index 367e4915..d19e3e72 100644 --- a/tests/level_1/test_three_url_builder.py +++ b/tests/level_1/test_three_url_builder.py @@ -1,7 +1,7 @@ from functions.level_1.three_url_builder import build_url -def test_build_url(): +def test__build_url__with_params(): host_name = 'https://yandex.ru' relative_url = 'search/' get_params = {'text':'kinopoisk', @@ -13,4 +13,25 @@ def test_build_url(): result = build_url(host_name, relative_url, get_params) assert result == exprcted_result + + +def test__build_url__no_params(): + host_name = 'https://yandex.ru' + relative_url = 'search/' + expected_result = 'https://yandex.ru/search/' + + result = build_url(host_name, relative_url) + + assert result == expected_result + + +def test_build_url_empty_params(): + host_name = 'https://yandex.ru' + relative_url = 'search/' + get_params = {} + expected_result = 'https://yandex.ru/search/' + + result = build_url(host_name, relative_url, get_params) + + assert result == expected_result \ No newline at end of file From 35f6a33c08eb113fff6625914fc644bade4ddd5d Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Sun, 28 May 2023 15:24:25 +0400 Subject: [PATCH 09/13] the fourth try --- .coverage | Bin 0 -> 69632 bytes tests/level_1/test_five_title.py | 8 +++++++- tests/level_1/test_three_url_builder.py | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 .coverage diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..088a9c1f0bd5bae7653f6c8561d15c70045a4f81 GIT binary patch literal 69632 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 Kk`)yN{eJ*7tYKOJ literal 0 HcmV?d00001 diff --git a/tests/level_1/test_five_title.py b/tests/level_1/test_five_title.py index aeeee3dc..0de5656b 100644 --- a/tests/level_1/test_five_title.py +++ b/tests/level_1/test_five_title.py @@ -1,5 +1,5 @@ from functions.level_1.five_title import change_copy_item - +import pytest def test__change_copy_item__normal_case_success(): assert change_copy_item('Hello World!', 20) == 'Hello World!' @@ -11,3 +11,9 @@ def test__change_copy_item__long_title(): def test__change_copy_item__title_with_copy_and_index(): assert change_copy_item('Copy of Hello World! (3)', 100) == 'Copy of Hello World! (4)' + + +def test__change_copy_item__int_in_title(): + with pytest.raises(AttributeError): + change_copy_item(123, 100) + diff --git a/tests/level_1/test_three_url_builder.py b/tests/level_1/test_three_url_builder.py index d19e3e72..63310d1e 100644 --- a/tests/level_1/test_three_url_builder.py +++ b/tests/level_1/test_three_url_builder.py @@ -25,7 +25,7 @@ def test__build_url__no_params(): assert result == expected_result -def test_build_url_empty_params(): +def test__build_url__empty_params(): host_name = 'https://yandex.ru' relative_url = 'search/' get_params = {} From 553a0666e85ec0c7e13e1e36eaa5d32ab8d4a6f5 Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Mon, 12 Jun 2023 15:37:47 +0400 Subject: [PATCH 10/13] parametrize_try_1 --- .gitignore | 3 +- setup.cfg | 2 + tests/level_1.5/test_five_replace_word.py | 52 +++++++--------- tests/level_1.5/test_four_sentiment.py | 61 +++++++++--------- tests/level_1.5/test_one_median.py | 29 ++++----- tests/level_1.5/test_three_first.py | 48 ++++++-------- tests/level_1.5/test_two_square_equation.py | 30 +++++---- tests/level_1/test_five_title.py | 46 +++++++++----- tests/level_1/test_four_bank_parser.py | 49 ++++++++------- tests/level_1/test_one_gender.py | 25 ++++---- tests/level_1/test_three_url_builder.py | 69 ++++++++++----------- tests/level_1/test_two_date_parser.py | 47 +++++++++----- 12 files changed, 238 insertions(+), 223 deletions(-) create mode 100644 setup.cfg diff --git a/.gitignore b/.gitignore index 757ecb33..c7d1a8b9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ env/ -__pycache__/ \ No newline at end of file +__pycache__/ +settings.json diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 00000000..c836869e --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[flake8] +max-line-length = 110 diff --git a/tests/level_1.5/test_five_replace_word.py b/tests/level_1.5/test_five_replace_word.py index fb0a61e0..e04d404d 100644 --- a/tests/level_1.5/test_five_replace_word.py +++ b/tests/level_1.5/test_five_replace_word.py @@ -2,31 +2,27 @@ import pytest -def test__replace_word__success(): - text = 'Установите последнюю версию PowerShell для новых функций и улучшения!' - replace_from = 'Установите' - replace_to = 'Удалите' - expected_result = 'Удалите последнюю версию PowerShell для новых функций и улучшения!' - - result = replace_word(text, replace_from, replace_to) - - assert result == expected_result - - -def test__replace_word__empty_original_string(): - assert replace_word('', 'PowerShell', 'WinRar') == '' - - -def test__replace_word__no_matches(): - assert replace_word('Установите', 'PowerShell', 'WinRar') == 'Установите' - - -def test__replace_word__attribute_error(): - with pytest.raises(AttributeError): - replace_word(1111, 'PowerShell', 'WinRar') - - -def test__replace_word__type_error(): - with pytest.raises(TypeError): - replace_word('Установите последнюю версию PowerShell', 'Установите', 1111) - +@pytest.mark.parametrize( + 'text, replace_from, replace_to, expected_result', + [ + ( + 'Установите последнюю версию PowerShell для новых функций и улучшения!', + 'Установите', + 'Удалите', + 'Удалите последнюю версию PowerShell для новых функций и улучшения!', + ), + ('', 'PowerShell', 'WinRar', ''), + ('Установите', 'PowerShell', 'WinRar', 'Установите'), + (1111, 'PowerShell', 'WinRar', AttributeError), + ('Установите последнюю версию PowerShell', 'Установите', 1111, TypeError), + ], +) +def test__replace_word(text, replace_from, replace_to, expected_result): + if expected_result == AttributeError: + with pytest.raises(AttributeError): + replace_word(text, replace_from, replace_to) + elif expected_result == TypeError: + with pytest.raises(TypeError): + replace_word(text, replace_from, replace_to) + else: + assert replace_word(text, replace_from, replace_to) == expected_result diff --git a/tests/level_1.5/test_four_sentiment.py b/tests/level_1.5/test_four_sentiment.py index ba3ac16c..4812e898 100644 --- a/tests/level_1.5/test_four_sentiment.py +++ b/tests/level_1.5/test_four_sentiment.py @@ -1,34 +1,29 @@ from functions.level_1_5.four_sentiment import check_tweet_sentiment - - -def test__check_tweet_sentiment__good(): - text = 'I love this movie' - good_words = {'love', 'great', 'awesome'} - bad_words = {'hate', 'terrible', 'awful'} - exp_result = 'GOOD' - - result = check_tweet_sentiment(text, good_words, bad_words) - - assert result == exp_result - - -def test__check_tweet_sentiment__bad(): - text = 'This pizza is disgusting' - good_words = {'love', 'great', 'awesome'} - bad_words = {'disgusting', 'terrible', 'awful'} - exp_result = 'BAD' - - result = check_tweet_sentiment(text, good_words, bad_words) - - assert result == exp_result - - -def test__check_tweet_sentiment__none(): - text = 'The product has good features, but the customer support is bad' - good_words = {'good', 'excellent', 'impressive'} - bad_words = {'bad', 'poor', 'disappointing'} - exp_result = None - - result = check_tweet_sentiment(text, good_words, bad_words) - - assert result == exp_result \ No newline at end of file +import pytest + + +@pytest.mark.parametrize( + 'text, good_words, bad_words, expected_result', + [ + ( + 'I love this movie', + {'love', 'great', 'awesome'}, + {'hate', 'terrible', 'awful'}, + 'GOOD', + ), + ( + 'This pizza is disgusting', + {'love', 'great', 'awesome'}, + {'disgusting', 'terrible', 'awful'}, + 'BAD', + ), + ( + 'The product has good features, but the customer support is bad', + {'good', 'excellent', 'impressive'}, + {'bad', 'poor', 'disappointing'}, + None, + ), + ], +) +def test__check_tweet_sentiment(text, good_words, bad_words, expected_result): + assert check_tweet_sentiment(text, good_words, bad_words) == expected_result diff --git a/tests/level_1.5/test_one_median.py b/tests/level_1.5/test_one_median.py index b4dc9011..cf8f104f 100644 --- a/tests/level_1.5/test_one_median.py +++ b/tests/level_1.5/test_one_median.py @@ -1,18 +1,19 @@ from functions.level_1_5.one_median import get_median_value import pytest -def test__get_median_value__empty_list(): - assert get_median_value([]) == None - -def test__get_median_value__multiple_of_two(): - assert get_median_value([8, 1, 3, 2, 5, 7]) == 6 - - -def test__get_median_value__not_multiple_of_two(): - assert get_median_value([8, 1, 3, 2, 5]) == 2 - - -def test__get_median_value__index_error(): - with pytest.raises(IndexError): - get_median_value([8, 1, 3, 2]) +@pytest.mark.parametrize( + 'items, expected_result', + [ + ([], None), + ([8, 1, 3, 2, 5, 7], 6), + ([8, 1, 3, 2, 5], 2), + ([8, 1, 3, 2], IndexError), + ], +) +def test__get_median_value(items, expected_result): + if expected_result == IndexError: + with pytest.raises(IndexError): + get_median_value(items) + else: + assert get_median_value(items) == expected_result diff --git a/tests/level_1.5/test_three_first.py b/tests/level_1.5/test_three_first.py index 85f68668..0412fda6 100644 --- a/tests/level_1.5/test_three_first.py +++ b/tests/level_1.5/test_three_first.py @@ -2,31 +2,23 @@ import pytest -def test__first__success_normal(): - assert first([1, 2, 3, 4]) == 1 - - -def test__first__attribute_error(): - with pytest.raises(AttributeError): - first([]) - - -def test__first__success_default_none(): - assert first([], None) is None - - -def test__first__success_list_of_string(): - assert first(['88', '2', '3', '4']) == '88' - - -def test__first__success_default_string(): - assert first([], 'def') == 'def' - - -def test__first__success_default_tuple(): - assert first([], (1, 5)) == (1, 5) - - -def test__first__attribute_error(): - with pytest.raises(KeyError): - first({'a': 'b'}) +@pytest.mark.parametrize( + 'items, default, expected_result', + [ + ([1, 2, 3, 4], None, 1), + ([], None, AttributeError), + (['88', '2', '3', '4'], None, '88'), + ([], 'def', 'def'), + ([], (1, 5), (1, 5)), + ({'a': 'b'}, None, KeyError), + ], +) +def test__first(items, default, expected_result): + if expected_result == AttributeError: + with pytest.raises(AttributeError): + first(items) + elif expected_result == KeyError: + with pytest.raises(KeyError): + first(items) + else: + assert first(items, default) == expected_result diff --git a/tests/level_1.5/test_two_square_equation.py b/tests/level_1.5/test_two_square_equation.py index 8551c91f..dddbf51f 100644 --- a/tests/level_1.5/test_two_square_equation.py +++ b/tests/level_1.5/test_two_square_equation.py @@ -1,17 +1,15 @@ from functions.level_1_5.two_square_equation import solve_square_equation - - -def test__salve_square_equation__discriminant_less_than_zero(): - assert solve_square_equation(2.12, 4.5, 8.55) == (None, None) - - -def test__salve_square_equation__square_coefficient_not_eq_zero(): - assert solve_square_equation(1, 3, 2) == (-2.0, -1.0) - - -def test__salve_square_equation__square_coef_eq_zero(): - assert solve_square_equation(0, 2, 2) == (-1.0, None) - - -def test__salve_square_equation__square_linear_eq_zero(): - assert solve_square_equation(0, 0, 2) == (None, None) \ No newline at end of file +import pytest + + +@pytest.mark.parametrize( + 'square_coefficient, linear_coefficient, const_coefficient, expected_result', + [ + (2.12, 4.5, 8.55, (None, None)), + (1, 3, 2, (-2.0, -1.0)), + (0, 2, 2, (-1.0, None)), + (0, 0, 2, (None, None)), + ], +) +def test__salve_square_equation(square_coefficient, linear_coefficient, const_coefficient, expected_result): + assert solve_square_equation(square_coefficient, linear_coefficient, const_coefficient) == expected_result diff --git a/tests/level_1/test_five_title.py b/tests/level_1/test_five_title.py index 0de5656b..38120f12 100644 --- a/tests/level_1/test_five_title.py +++ b/tests/level_1/test_five_title.py @@ -1,19 +1,35 @@ from functions.level_1.five_title import change_copy_item import pytest -def test__change_copy_item__normal_case_success(): - assert change_copy_item('Hello World!', 20) == 'Hello World!' - - -def test__change_copy_item__long_title(): - assert change_copy_item('Hello World!', 100) == 'Copy of Hello World!' - - -def test__change_copy_item__title_with_copy_and_index(): - assert change_copy_item('Copy of Hello World! (3)', 100) == 'Copy of Hello World! (4)' - - -def test__change_copy_item__int_in_title(): - with pytest.raises(AttributeError): - change_copy_item(123, 100) +@pytest.mark.parametrize( + 'title, max_main_item_title_length, expected_result', + [ + ( + 'Hello World!', + 20, + 'Hello World!', + ), + ( + 'Hello World!', + 100, + 'Copy of Hello World!', + ), + ( + 'Copy of Hello World! (3)', + 100, + 'Copy of Hello World! (4)', + ), + ( + 123, + 100, + AttributeError, + ), + ], +) +def test__change_copy_item(title, max_main_item_title_length, expected_result): + if expected_result == AttributeError: + with pytest.raises(AttributeError): + change_copy_item(title, max_main_item_title_length) + else: + assert change_copy_item(title, max_main_item_title_length) == expected_result diff --git a/tests/level_1/test_four_bank_parser.py b/tests/level_1/test_four_bank_parser.py index 8ae25afa..cfe37182 100644 --- a/tests/level_1/test_four_bank_parser.py +++ b/tests/level_1/test_four_bank_parser.py @@ -4,26 +4,29 @@ import pytest -def test__parse_ineco_expense__success(): - message = SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) - cards = [BankCard('1234', 'KONSTANTIN MISHAKOV'), BankCard('5678', 'KONSTANTIN MISHAKOV')] - expense = Expense( - amount=Decimal("99.99"), - card=cards[0], - spent_in="nenaprasno.ru", - spent_at=datetime.strptime("12.04.23 16:00", "%d.%m.%y %H:%M"), - ) - - result = parse_ineco_expense(message, cards) - - assert result == expense - - -def test__parse_ineco_expense__invalid_format(): - message = SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) - cards = [BankCard('5678', 'KONSTANTIN MISHAKOV')] - - with pytest.raises(IndexError): - result = parse_ineco_expense(message, cards) - - \ No newline at end of file +@pytest.mark.parametrize( + 'message, cards, expected_result', + [ + ( + SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()), + [BankCard('1234', 'KONSTANTIN MISHAKOV'), BankCard('5678', 'KONSTANTIN MISHAKOV')], + Expense( + amount=Decimal("99.99"), + card=[BankCard('1234', 'KONSTANTIN MISHAKOV'), BankCard('5678', 'KONSTANTIN MISHAKOV')][0], + spent_in="nenaprasno.ru", + spent_at=datetime.strptime("12.04.23 16:00", "%d.%m.%y %H:%M"), + ), + ), + ( + SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()), + [BankCard('5678', 'KONSTANTIN MISHAKOV')], + IndexError, + ), + ], +) +def test__parse_ineco_expense(message, cards, expected_result): + if expected_result == IndexError: + with pytest.raises(IndexError): + parse_ineco_expense(message, cards) + else: + assert parse_ineco_expense(message, cards) == expected_result diff --git a/tests/level_1/test_one_gender.py b/tests/level_1/test_one_gender.py index 284649ee..6ecee71e 100644 --- a/tests/level_1/test_one_gender.py +++ b/tests/level_1/test_one_gender.py @@ -1,13 +1,14 @@ from functions.level_1.one_gender import genderalize - - -def test__genderalize__male(): - assert genderalize('сказал', 'сказала', 'male') == 'сказал' - - -def test__genderalize__male(): - assert genderalize('сказал', 'сказала', 'female') == 'сказала' - - -def test__genderalize__male(): - assert genderalize('сказал', 'сказала', 'none') == 'сказала' \ No newline at end of file +import pytest + + +@pytest.mark.parametrize( + 'verb_male, verb_female, gender, expected_result', + [ + ('сказал', 'сказала', 'male', 'сказал'), + ('сказал', 'сказала', 'female', 'сказала'), + ('сказал', 'сказала', 'none', 'сказала'), + ], +) +def test__genderalize(verb_male, verb_female, gender, expected_result): + assert genderalize(verb_male, verb_female, gender) == expected_result diff --git a/tests/level_1/test_three_url_builder.py b/tests/level_1/test_three_url_builder.py index 63310d1e..731fa329 100644 --- a/tests/level_1/test_three_url_builder.py +++ b/tests/level_1/test_three_url_builder.py @@ -1,37 +1,34 @@ from functions.level_1.three_url_builder import build_url - - -def test__build_url__with_params(): - host_name = 'https://yandex.ru' - relative_url = 'search/' - get_params = {'text':'kinopoisk', - 'search_source' : 'yaru_desktop_common', - 'src' : 'suggest_Pers', - } - exprcted_result = 'https://yandex.ru/search/?text=kinopoisk&search_source=yaru_desktop_common&src=suggest_Pers' - - result = build_url(host_name, relative_url, get_params) - - assert result == exprcted_result - - -def test__build_url__no_params(): - host_name = 'https://yandex.ru' - relative_url = 'search/' - expected_result = 'https://yandex.ru/search/' - - result = build_url(host_name, relative_url) - - assert result == expected_result - - -def test__build_url__empty_params(): - host_name = 'https://yandex.ru' - relative_url = 'search/' - get_params = {} - expected_result = 'https://yandex.ru/search/' - - result = build_url(host_name, relative_url, get_params) - - assert result == expected_result - \ No newline at end of file +import pytest + + +@pytest.mark.parametrize( + 'host_name, relative_url, get_params, expected_result', + [ + ( + 'https://yandex.ru', + 'search/', + { + 'text': 'kinopoisk', + 'search_source': 'yaru_desktop_common', + 'src': 'suggest_Pers', + }, + 'https://yandex.ru/search/?text=kinopoisk&search_source=yaru_desktop_common&src=suggest_Pers', + ), + ( + 'https://yandex.ru', + 'search/', + None, + 'https://yandex.ru/search/', + + ), + ( + 'https://yandex.ru', + 'search/', + {}, + 'https://yandex.ru/search/', + ), + ], +) +def test__build_url(host_name, relative_url, get_params, expected_result): + assert build_url(host_name, relative_url, get_params) == expected_result diff --git a/tests/level_1/test_two_date_parser.py b/tests/level_1/test_two_date_parser.py index 7d686ba4..e33c5ccd 100644 --- a/tests/level_1/test_two_date_parser.py +++ b/tests/level_1/test_two_date_parser.py @@ -1,21 +1,34 @@ from functions.level_1.two_date_parser import compose_datetime_from import datetime +import pytest -def test__compose_datetime_from__today(): - today = datetime.date.today() - expected_today = datetime.datetime(today.year, today.month, today.day, 17, 15) - - result = compose_datetime_from('today', "17:15") - - assert result == expected_today - - -def test__compose_datetime_from__tomorrow(): - today = datetime.date.today() - tomorrow = today + datetime.timedelta(1) - expected_tomorrow = datetime.datetime(tomorrow.year, tomorrow.month, tomorrow.day, 17, 15) - - result = compose_datetime_from('tomorrow', "17:15") - - assert result == expected_tomorrow +@pytest.mark.parametrize( + 'date_str, time_str, expected_result', + [ + ( + 'today', + "17:15", + datetime.datetime( + datetime.date.today().year, + datetime.date.today().month, + datetime.date.today().day, + 17, + 15, + ) + ), + ( + 'tomorrow', + "17:15", + datetime.datetime( + (datetime.date.today() + datetime.timedelta(1)).year, + (datetime.date.today() + datetime.timedelta(1)).month, + (datetime.date.today() + datetime.timedelta(1)).day, + 17, + 15, + ) + ), + ], +) +def test__compose_datetime_from(date_str, time_str, expected_result): + assert compose_datetime_from(date_str, time_str) == expected_result From 625e2ad48bf9a5176222dc4c7f825fda0aa743ec Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Sun, 18 Jun 2023 00:09:50 +0400 Subject: [PATCH 11/13] after cr --- tests/level_1.5/test_five_replace_word.py | 47 +++++++++++---------- tests/level_1.5/test_four_sentiment.py | 42 +++++++++--------- tests/level_1.5/test_one_median.py | 18 +++++--- tests/level_1.5/test_three_first.py | 39 +++++++++-------- tests/level_1.5/test_two_square_equation.py | 14 +++--- tests/level_1/test_five_title.py | 18 +++++--- tests/level_1/test_four_bank_parser.py | 18 +++++--- 7 files changed, 110 insertions(+), 86 deletions(-) diff --git a/tests/level_1.5/test_five_replace_word.py b/tests/level_1.5/test_five_replace_word.py index e04d404d..85fe7532 100644 --- a/tests/level_1.5/test_five_replace_word.py +++ b/tests/level_1.5/test_five_replace_word.py @@ -3,26 +3,29 @@ @pytest.mark.parametrize( - 'text, replace_from, replace_to, expected_result', - [ - ( - 'Установите последнюю версию PowerShell для новых функций и улучшения!', - 'Установите', - 'Удалите', - 'Удалите последнюю версию PowerShell для новых функций и улучшения!', - ), - ('', 'PowerShell', 'WinRar', ''), - ('Установите', 'PowerShell', 'WinRar', 'Установите'), - (1111, 'PowerShell', 'WinRar', AttributeError), - ('Установите последнюю версию PowerShell', 'Установите', 1111, TypeError), - ], + 'text, replace_from, replace_to, expected_result', + [ + ( + 'Установите последнюю версию PowerShell для новых функций и улучшения!', + 'Установите', + 'Удалите', + 'Удалите последнюю версию PowerShell для новых функций и улучшения!', + ), + ('', 'PowerShell', 'WinRar', ''), + ('Установите', 'PowerShell', 'WinRar', 'Установите'), + ], ) -def test__replace_word(text, replace_from, replace_to, expected_result): - if expected_result == AttributeError: - with pytest.raises(AttributeError): - replace_word(text, replace_from, replace_to) - elif expected_result == TypeError: - with pytest.raises(TypeError): - replace_word(text, replace_from, replace_to) - else: - assert replace_word(text, replace_from, replace_to) == expected_result +def test__replace_word__success(text, replace_from, replace_to, expected_result): + assert replace_word(text, replace_from, replace_to) == expected_result + + +@pytest.mark.parametrize( + 'text, replace_from, replace_to, exception_type', + [ + (1111, 'PowerShell', 'WinRar', AttributeError), + ('Установите последнюю версию PowerShell', 'Установите', 1111, TypeError), + ], +) +def test__replace_word__exceptions(text, replace_from, replace_to, exception_type): + with pytest.raises(exception_type): + replace_word(text, replace_from, replace_to) diff --git a/tests/level_1.5/test_four_sentiment.py b/tests/level_1.5/test_four_sentiment.py index 4812e898..1e65a82f 100644 --- a/tests/level_1.5/test_four_sentiment.py +++ b/tests/level_1.5/test_four_sentiment.py @@ -3,27 +3,27 @@ @pytest.mark.parametrize( - 'text, good_words, bad_words, expected_result', - [ - ( - 'I love this movie', - {'love', 'great', 'awesome'}, - {'hate', 'terrible', 'awful'}, - 'GOOD', - ), - ( - 'This pizza is disgusting', - {'love', 'great', 'awesome'}, - {'disgusting', 'terrible', 'awful'}, - 'BAD', - ), - ( - 'The product has good features, but the customer support is bad', - {'good', 'excellent', 'impressive'}, - {'bad', 'poor', 'disappointing'}, - None, - ), - ], + 'text, good_words, bad_words, expected_result', + [ + ( + 'I love this movie', + {'love', 'great', 'awesome'}, + {'hate', 'terrible', 'awful'}, + 'GOOD', + ), + ( + 'This pizza is disgusting', + {'love', 'great', 'awesome'}, + {'disgusting', 'terrible', 'awful'}, + 'BAD', + ), + ( + 'The product has good features, but the customer support is bad', + {'good', 'excellent', 'impressive'}, + {'bad', 'poor', 'disappointing'}, + None, + ), + ], ) def test__check_tweet_sentiment(text, good_words, bad_words, expected_result): assert check_tweet_sentiment(text, good_words, bad_words) == expected_result diff --git a/tests/level_1.5/test_one_median.py b/tests/level_1.5/test_one_median.py index cf8f104f..7b98b0b4 100644 --- a/tests/level_1.5/test_one_median.py +++ b/tests/level_1.5/test_one_median.py @@ -8,12 +8,18 @@ ([], None), ([8, 1, 3, 2, 5, 7], 6), ([8, 1, 3, 2, 5], 2), + ], +) +def test__get_median_value__success(items, expected_result): + assert get_median_value(items) == expected_result + + +@pytest.mark.parametrize( + 'items, exception_type', + [ ([8, 1, 3, 2], IndexError), ], ) -def test__get_median_value(items, expected_result): - if expected_result == IndexError: - with pytest.raises(IndexError): - get_median_value(items) - else: - assert get_median_value(items) == expected_result +def test__get_median_value__exception(items, exception_type): + with pytest.raises(exception_type): + get_median_value(items) diff --git a/tests/level_1.5/test_three_first.py b/tests/level_1.5/test_three_first.py index 0412fda6..456a73e0 100644 --- a/tests/level_1.5/test_three_first.py +++ b/tests/level_1.5/test_three_first.py @@ -3,22 +3,25 @@ @pytest.mark.parametrize( - 'items, default, expected_result', - [ - ([1, 2, 3, 4], None, 1), - ([], None, AttributeError), - (['88', '2', '3', '4'], None, '88'), - ([], 'def', 'def'), - ([], (1, 5), (1, 5)), - ({'a': 'b'}, None, KeyError), - ], + 'items, default, expected_result', + [ + ([1, 2, 3, 4], None, 1), + (['88', '2', '3', '4'], None, '88'), + ([], 'def', 'def'), + ([], (1, 5), (1, 5)), + ], ) -def test__first(items, default, expected_result): - if expected_result == AttributeError: - with pytest.raises(AttributeError): - first(items) - elif expected_result == KeyError: - with pytest.raises(KeyError): - first(items) - else: - assert first(items, default) == expected_result +def test__first__success(items, default, expected_result): + assert first(items, default) == expected_result + + +@pytest.mark.parametrize( + 'items, default, exception_type', + [ + ([], None, AttributeError), + ({'a': 'b'}, None, KeyError), + ], +) +def test__first__exceptions(items, default, exception_type): + with pytest.raises(exception_type): + first(items) diff --git a/tests/level_1.5/test_two_square_equation.py b/tests/level_1.5/test_two_square_equation.py index dddbf51f..b04d0afe 100644 --- a/tests/level_1.5/test_two_square_equation.py +++ b/tests/level_1.5/test_two_square_equation.py @@ -3,13 +3,13 @@ @pytest.mark.parametrize( - 'square_coefficient, linear_coefficient, const_coefficient, expected_result', - [ - (2.12, 4.5, 8.55, (None, None)), - (1, 3, 2, (-2.0, -1.0)), - (0, 2, 2, (-1.0, None)), - (0, 0, 2, (None, None)), - ], + 'square_coefficient, linear_coefficient, const_coefficient, expected_result', + [ + (2.12, 4.5, 8.55, (None, None)), + (1, 3, 2, (-2.0, -1.0)), + (0, 2, 2, (-1.0, None)), + (0, 0, 2, (None, None)), + ], ) def test__salve_square_equation(square_coefficient, linear_coefficient, const_coefficient, expected_result): assert solve_square_equation(square_coefficient, linear_coefficient, const_coefficient) == expected_result diff --git a/tests/level_1/test_five_title.py b/tests/level_1/test_five_title.py index 38120f12..8a31ce0e 100644 --- a/tests/level_1/test_five_title.py +++ b/tests/level_1/test_five_title.py @@ -20,6 +20,15 @@ 100, 'Copy of Hello World! (4)', ), + ], +) +def test__change_copy_item__success(title, max_main_item_title_length, expected_result): + assert change_copy_item(title, max_main_item_title_length) == expected_result + + +@pytest.mark.parametrize( + 'title, max_main_item_title_length, exception_type', + [ ( 123, 100, @@ -27,9 +36,6 @@ ), ], ) -def test__change_copy_item(title, max_main_item_title_length, expected_result): - if expected_result == AttributeError: - with pytest.raises(AttributeError): - change_copy_item(title, max_main_item_title_length) - else: - assert change_copy_item(title, max_main_item_title_length) == expected_result +def test__change_copy_item__exception(title, max_main_item_title_length, exception_type): + with pytest.raises(exception_type): + change_copy_item(title, max_main_item_title_length) diff --git a/tests/level_1/test_four_bank_parser.py b/tests/level_1/test_four_bank_parser.py index cfe37182..be61480b 100644 --- a/tests/level_1/test_four_bank_parser.py +++ b/tests/level_1/test_four_bank_parser.py @@ -17,6 +17,15 @@ spent_at=datetime.strptime("12.04.23 16:00", "%d.%m.%y %H:%M"), ), ), + ], +) +def test__parse_ineco_expense_success(message, cards, expected_result): + assert parse_ineco_expense(message, cards) == expected_result + + +@pytest.mark.parametrize( + 'message, cards, exception_type', + [ ( SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()), [BankCard('5678', 'KONSTANTIN MISHAKOV')], @@ -24,9 +33,6 @@ ), ], ) -def test__parse_ineco_expense(message, cards, expected_result): - if expected_result == IndexError: - with pytest.raises(IndexError): - parse_ineco_expense(message, cards) - else: - assert parse_ineco_expense(message, cards) == expected_result +def test__parse_ineco_expense__exception(message, cards, exception_type): + with pytest.raises(exception_type): + parse_ineco_expense(message, cards) From 60231dc18f1c1f9432e5895c42e2f48458e15af6 Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Mon, 19 Jun 2023 23:04:51 +0400 Subject: [PATCH 12/13] removed unnecessary parametrize --- setup.cfg | 2 +- tests/level_1.5/test_one_median.py | 12 ++----- tests/level_1/test_five_title.py | 16 ++------- tests/level_1/test_four_bank_parser.py | 47 ++++++++++---------------- 4 files changed, 25 insertions(+), 52 deletions(-) diff --git a/setup.cfg b/setup.cfg index c836869e..6deafc26 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,2 +1,2 @@ [flake8] -max-line-length = 110 +max-line-length = 120 diff --git a/tests/level_1.5/test_one_median.py b/tests/level_1.5/test_one_median.py index 7b98b0b4..d5718b1d 100644 --- a/tests/level_1.5/test_one_median.py +++ b/tests/level_1.5/test_one_median.py @@ -14,12 +14,6 @@ def test__get_median_value__success(items, expected_result): assert get_median_value(items) == expected_result -@pytest.mark.parametrize( - 'items, exception_type', - [ - ([8, 1, 3, 2], IndexError), - ], -) -def test__get_median_value__exception(items, exception_type): - with pytest.raises(exception_type): - get_median_value(items) +def test__get_median_value__index_error(): + with pytest.raises(IndexError): + get_median_value([8, 1, 3, 2]) diff --git a/tests/level_1/test_five_title.py b/tests/level_1/test_five_title.py index 8a31ce0e..360351c2 100644 --- a/tests/level_1/test_five_title.py +++ b/tests/level_1/test_five_title.py @@ -26,16 +26,6 @@ def test__change_copy_item__success(title, max_main_item_title_length, expected_ assert change_copy_item(title, max_main_item_title_length) == expected_result -@pytest.mark.parametrize( - 'title, max_main_item_title_length, exception_type', - [ - ( - 123, - 100, - AttributeError, - ), - ], -) -def test__change_copy_item__exception(title, max_main_item_title_length, exception_type): - with pytest.raises(exception_type): - change_copy_item(title, max_main_item_title_length) +def test__change_copy_item__exception(): + with pytest.raises(AttributeError): + change_copy_item(123, 100) diff --git a/tests/level_1/test_four_bank_parser.py b/tests/level_1/test_four_bank_parser.py index be61480b..2b658ff7 100644 --- a/tests/level_1/test_four_bank_parser.py +++ b/tests/level_1/test_four_bank_parser.py @@ -4,35 +4,24 @@ import pytest -@pytest.mark.parametrize( - 'message, cards, expected_result', - [ - ( - SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()), - [BankCard('1234', 'KONSTANTIN MISHAKOV'), BankCard('5678', 'KONSTANTIN MISHAKOV')], - Expense( - amount=Decimal("99.99"), - card=[BankCard('1234', 'KONSTANTIN MISHAKOV'), BankCard('5678', 'KONSTANTIN MISHAKOV')][0], - spent_in="nenaprasno.ru", - spent_at=datetime.strptime("12.04.23 16:00", "%d.%m.%y %H:%M"), - ), - ), - ], -) -def test__parse_ineco_expense_success(message, cards, expected_result): - assert parse_ineco_expense(message, cards) == expected_result +def test__parse_ineco_expense__success(): + message = SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) + cards = [BankCard('1234', 'KONSTANTIN MISHAKOV'), BankCard('5678', 'KONSTANTIN MISHAKOV')] + expense = Expense( + amount=Decimal("99.99"), + card=cards[0], + spent_in="nenaprasno.ru", + spent_at=datetime.strptime("12.04.23 16:00", "%d.%m.%y %H:%M"), + ) + result = parse_ineco_expense(message, cards) -@pytest.mark.parametrize( - 'message, cards, exception_type', - [ - ( - SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()), - [BankCard('5678', 'KONSTANTIN MISHAKOV')], - IndexError, - ), - ], -) -def test__parse_ineco_expense__exception(message, cards, exception_type): - with pytest.raises(exception_type): + assert result == expense + + +def test__parse_ineco_expense__invalid_format(): + message = SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) + cards = [BankCard('5678', 'KONSTANTIN MISHAKOV')] + + with pytest.raises(IndexError): parse_ineco_expense(message, cards) From 4bede8ce711a9f44794df48edf171c5d3e93093b Mon Sep 17 00:00:00 2001 From: Konstantin Mishakov Date: Sat, 1 Jul 2023 00:43:10 +0400 Subject: [PATCH 13/13] added fixtures level 1 --- tests/level_1/conftest.py | 41 ++++++++++++++++++++++++++ tests/level_1/test_four_bank_parser.py | 24 +++++---------- 2 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 tests/level_1/conftest.py diff --git a/tests/level_1/conftest.py b/tests/level_1/conftest.py new file mode 100644 index 00000000..5a3b5747 --- /dev/null +++ b/tests/level_1/conftest.py @@ -0,0 +1,41 @@ +import pytest +from datetime import datetime +from decimal import Decimal +from functions.level_1.four_bank_parser import BankCard, Expense, SmsMessage + + +@pytest.fixture +def bank_card_1234(): + return BankCard('1234', 'KONSTANTIN MISHAKOV') + + +@pytest.fixture +def bank_card_5678(): + return BankCard('5678', 'KONSTANTIN MISHAKOV') + + +@pytest.fixture +def expense_amount(): + return Decimal("99.99") + + +@pytest.fixture +def spent_in(): + return "nenaprasno.ru" + + +@pytest.fixture +def sms_message(): + return SmsMessage( + f'{expense_amount} руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now() + ) + + +@pytest.fixture +def expense(): + return Expense( + amount=expense_amount, + card=bank_card_1234, + spent_in=spent_in, + spent_at=datetime.strptime("12.04.23 16:00", "%d.%m.%y %H:%M"), + ) diff --git a/tests/level_1/test_four_bank_parser.py b/tests/level_1/test_four_bank_parser.py index 2b658ff7..81fe9902 100644 --- a/tests/level_1/test_four_bank_parser.py +++ b/tests/level_1/test_four_bank_parser.py @@ -1,27 +1,17 @@ -from functions.level_1.four_bank_parser import BankCard, SmsMessage, Expense, parse_ineco_expense -from datetime import datetime -from decimal import Decimal +from functions.level_1.four_bank_parser import parse_ineco_expense import pytest -def test__parse_ineco_expense__success(): - message = SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) - cards = [BankCard('1234', 'KONSTANTIN MISHAKOV'), BankCard('5678', 'KONSTANTIN MISHAKOV')] - expense = Expense( - amount=Decimal("99.99"), - card=cards[0], - spent_in="nenaprasno.ru", - spent_at=datetime.strptime("12.04.23 16:00", "%d.%m.%y %H:%M"), - ) +def test__parse_ineco_expense__success(bank_card_1234, bank_card_5678, sms_message, expense): + cards = [bank_card_1234, bank_card_5678] - result = parse_ineco_expense(message, cards) + result = parse_ineco_expense(sms_message, cards) assert result == expense -def test__parse_ineco_expense__invalid_format(): - message = SmsMessage('99.99 руб, *1234 12.04.23 16:00 nenaprasno.ru authcode 0000', "Tinkoff", datetime.now()) - cards = [BankCard('5678', 'KONSTANTIN MISHAKOV')] +def test__parse_ineco_expense__invalid_format(bank_card_5678, sms_message): + cards = [bank_card_5678] with pytest.raises(IndexError): - parse_ineco_expense(message, cards) + parse_ineco_expense(sms_message, cards)