diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..2d5e4102 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +env +**/__pycache__/ diff --git a/tests/level_1/test_five_title.py b/tests/level_1/test_five_title.py index fe767004..72ce1818 100644 --- a/tests/level_1/test_five_title.py +++ b/tests/level_1/test_five_title.py @@ -2,4 +2,7 @@ def test_change_copy_item(): - pass + assert change_copy_item('Banana') == 'Copy of Banana' + assert change_copy_item('Copy of Banana') == 'Copy of Banana (2)' + assert change_copy_item('Copy of Banana (7)') == 'Copy of Banana (8)' + assert change_copy_item('Banana', 5) == 'Banana' \ No newline at end of file diff --git a/tests/level_1/test_four_bank_parser.py b/tests/level_1/test_four_bank_parser.py index df6c1b41..c17d6798 100644 --- a/tests/level_1/test_four_bank_parser.py +++ b/tests/level_1/test_four_bank_parser.py @@ -1,5 +1,25 @@ +import datetime +import decimal + from functions.level_1.four_bank_parser import BankCard, SmsMessage, Expense, parse_ineco_expense def test_parse_ineco_expense(): - pass + sms = SmsMessage( + text="Вы купили 0.23 Эфира, *1234 18.05.23 23:59 MEWWALLET authcode 5005", + author="MewWallet", + sent_at=datetime.datetime.now(), + ) + + cards = [ + BankCard("1234", "Pavel Mager"), + BankCard("5678", "Pavel Mager"), + ] + + expected_output = Expense( + amount=decimal.Decimal("0.23"), + card=cards[0], + spent_in="MEWWALLET", + spent_at=datetime.datetime.strptime("18.05.23 23:59", "%d.%m.%y %H:%M"), + ) + assert parse_ineco_expense(sms, cards) == expected_output \ 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..fdb4df1d 100644 --- a/tests/level_1/test_one_gender.py +++ b/tests/level_1/test_one_gender.py @@ -2,4 +2,6 @@ def test_genderalize(): - pass + assert genderalize('Ходил', 'Ходила', 'male') == 'Ходил' + assert genderalize('Ходил', 'Ходила', 'female') == 'Ходила' + assert genderalize('Ходил', 'Ходила', 'banana') == 'Ходила' diff --git a/tests/level_1/test_three_url_builder.py b/tests/level_1/test_three_url_builder.py index bb7b54d2..94c94059 100644 --- a/tests/level_1/test_three_url_builder.py +++ b/tests/level_1/test_three_url_builder.py @@ -2,4 +2,6 @@ def test_build_url(): - pass + assert build_url('https://www.youtube.com', 'watch', get_params={'v':'dQw4w9WgXcQ'}) == 'https://www.youtube.com/watch?v=dQw4w9WgXcQ' + assert build_url('https://github.com', 'MagerOK/testing_exercises') == 'https://github.com/MagerOK/testing_exercises' + diff --git a/tests/level_1/test_two_date_parser.py b/tests/level_1/test_two_date_parser.py index b0247049..5a80e705 100644 --- a/tests/level_1/test_two_date_parser.py +++ b/tests/level_1/test_two_date_parser.py @@ -1,5 +1,11 @@ from functions.level_1.two_date_parser import compose_datetime_from +from datetime import datetime def test_compose_datetime_from(): - pass + date = compose_datetime_from('Bla-bla', '11:15') + today = datetime.today() + assert date == datetime(today.year, today.month, today.day, int(date.hour), int(date.minute)) + date = compose_datetime_from('tomorrow', '13:40') + assert date == datetime(today.year, today.month, today.day + 1, int(date.hour), int(date.minute)) + \ No newline at end of file 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..84bf9d3f --- /dev/null +++ b/tests/level_1_5/test_five_replace_word.py @@ -0,0 +1,15 @@ +from functions.level_1_5.five_replace_word import replace_word + + +def test__replace_word__with_replaces(): + text = 'I have the power that my father never dreamed of! NEVER !!!' + replace_from = 'never' + replace_to = 'always' + exp_output = 'I have the power that my father always dreamed of! always !!!' + assert replace_word(text, replace_from, replace_to) == exp_output + +def test__replace_word__without_replaces(): + text = 'I have the power that my father never dreamed of! NEVER !!!' + replace_from = 'Sponge' + replace_to = 'Bob' + assert replace_word(text, replace_from, replace_to) == text \ No newline at end of file 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..9609cb5d --- /dev/null +++ b/tests/level_1_5/test_four_sentiment.py @@ -0,0 +1,26 @@ +from functions.level_1_5.four_sentiment import check_tweet_sentiment + + +def test__check_tweet_sentiment__without_any_bad_or_good_words(): + text = "This is an ordinary text, without any emotional expressions." + good_words = set() + bad_words = set() + assert check_tweet_sentiment(text, good_words, bad_words) == None + +def test__check_tweet_sentiment__with_the_same_number_of_words(): + text = "Very good, so good, it'so good, Jesus! But I hate it! It's disgusting! I hate it! I FUCKING HATE IT YOU HEAR ME?" + good_words = {'good,', 'jesus!'} + bad_words = {'hate', 'fucking'} + assert check_tweet_sentiment(text, good_words, bad_words) == None + +def test__check_tweet_sentiment__normal_expecting_BAD_response(): + text = "You motherfucker, come on, you little ass… fuck with me, eh?! You fucking little asshole, dickhead, cocksucker… You fuckin’ — come on, come fuck with me! I’ll get your ass, you jerk! Oh, you fuckhead, motherfucker! Fuck all you and your family! Come on, you cocksucker, slime bucket, shitface, turdball! Come on, you scum sucker, you fucking with me?! Come on, you asshole!" + good_words = {'family!', 'handsome', 'smart'} + bad_words = {'fuck', 'fucking', 'ass...'} + assert check_tweet_sentiment(text, good_words, bad_words) == 'BAD' + +def test__check_tweet_sentiment__normal_expecting_GOOD_response(): + text = "I love this place! it's perfect to suicide for sure. i love it!" + good_words = {'love'} + bad_words = {'suicide'} + assert check_tweet_sentiment(text, good_words, bad_words) == 'GOOD' \ 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..4d6884d6 --- /dev/null +++ b/tests/level_1_5/test_one_median.py @@ -0,0 +1,21 @@ +from functions.level_1_5.one_median import get_median_value +import pytest + + +"""Хотелось бы сразу заметить, что функция и нормальные тесты невозможны""" +def test__get_median_value__empty_list(): + assert get_median_value([]) is None + +def test__get_median_value__list_with_odd_numbers_elem(): + assert get_median_value([3, 7, 4]) == 4 + +def test__get_median_value__list_with_even_numbers_elem(): + with pytest.raises(IndexError): + get_median_value([1, 3, 5, 7]) + +def test__get_median_value__list_with_1_elem(): + with pytest.raises(IndexError): + get_median_value([1]) + +def test__get_median_value__list_with_negative_numb(): + assert get_median_value([-5, -10, -1, -6, -8]) == -6 \ No newline at end of file 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..47b65196 --- /dev/null +++ b/tests/level_1_5/test_three_first.py @@ -0,0 +1,16 @@ +from functions.level_1_5.three_first import first +import pytest + +def test__first__list_of_numbers(): + assert first([1, 2, 3, 4, 5]) == 1 + +def test__first__list_of_numbers_with_default_value(): + assert first([1, 2, 3, 4, 5], 10) == 1 + +def test__first__empty_list_with_default_value(): + assert first([], 'There is no numbers') == 'There is no numbers' + +def test__first__empty_list_without_default_value(): + with pytest.raises(AttributeError): + first([]) + 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..0e04e1bd --- /dev/null +++ b/tests/level_1_5/test_two_square_equation.py @@ -0,0 +1,14 @@ +from functions.level_1_5.two_square_equation import solve_square_equation + + +def test__solve_square_equation__no_roots(): + assert solve_square_equation(1.0, 0.0, 1.0) == (None, None) + +def test__solve_square_equation__one_root(): + assert solve_square_equation(1, -2, 1) == (1.0, 1.0) + +def test__solve_square_equation__two_roots(): + assert solve_square_equation(1, -3, 2) == (1.0, 2.0) + +def test__solve_square_equation__linear(): + assert solve_square_equation(0, 2, -1) == (0.5, None)