Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
__pycache__/
16 changes: 14 additions & 2 deletions tests/level_1/test_five_title.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
from functions.level_1.five_title import change_copy_item


def test_change_copy_item():
pass
def test_title_with_additional_copy_text():
assert change_copy_item('THIS IS TITLE', 100) == 'Copy of THIS IS TITLE'

def test_return_title():
assert change_copy_item('THIS IS TITLE', 10) == 'THIS IS TITLE'

def test_if_has_copy_number_no_space():
assert change_copy_item('Copy of something(17)', 100) == 'Copy of (18)'

def test_if_has_copy_number_with_space():
assert change_copy_item('Copy of something (17)', 100) == 'Copy of something (18)'

def test_if_no_has_copy_number():
assert change_copy_item('Copy of something(1fvd7)', 100) == 'Copy of something(1fvd7) (2)'
18 changes: 17 additions & 1 deletion tests/level_1/test_four_bank_parser.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
from functions.level_1.four_bank_parser import BankCard, SmsMessage, Expense, parse_ineco_expense
import datetime
import decimal
from typing import NamedTuple


def test_parse_ineco_expense():
pass
text = "112.3 $, 40004234 13.05.23 17:23 Shop_name authcode jhtfj"
author = "Masha"
sent_at = datetime.datetime.now().time()
# Входное значение для функции
sms= SmsMessage(text, author, sent_at)

bank_card1 = BankCard(last_digits='0123', owner= 'User1')
bank_card2 = BankCard(last_digits = '4234', owner = 'User2')
# Входное значение для функции
cards = [bank_card1, bank_card2]

expense_result=Expense(amount = decimal.Decimal('112.3'), card = BankCard(last_digits ='4234', owner ='User2'), spent_in = 'Shop_name', spent_at = datetime.datetime(2023, 5, 13, 17, 23))
assert parse_ineco_expense(sms, cards) == expense_result

18 changes: 16 additions & 2 deletions tests/level_1/test_one_gender.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
from functions.level_1.one_gender import genderalize
import pytest


def test_genderalize():
pass
def test__genderalize__gender_is_male():
assert genderalize("verb_male", "VF", "male") == "verb_male"


def test__genderalize__gender_is_female():
assert genderalize("verb_male", "verb_female", "female") == "verb_female"


def test__genderalize__gender_is_other():
assert genderalize("verb_male", "verb_female", '254654') == "verb_female"


def test__genderalize_only_two_parameters_typeerror():
with pytest.raises(TypeError):
genderalize("verb_male", "verb_female")
42 changes: 40 additions & 2 deletions tests/level_1/test_three_url_builder.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,43 @@
from functions.level_1.three_url_builder import build_url
import pytest

def test__build_url__two_parameters():
assert build_url('host_name', 'relative_url') == 'host_name/relative_url'

def test_build_url():
pass

def test__build_url__get_parameters():
get_params = {'k': 'k_str', 'v': 'v_str'}
assert build_url('str1', 'relative_url', get_params) == 'str1/relative_url?k=k_str&v=v_str'


def test__build_url__get_parameters_short():
assert build_url('host_name', 'relative_url', {'k': 'k_str'}) == 'host_name/relative_url?k=k_str'


def tesr__build_url__get_parameters_empty():
assert build_url('host_name', 'relative_url', {}) == 'host_name/relative_url'


def test__build_url_only_host_name_typeerror():
with pytest.raises(TypeError):
build_url('host_name')


def test_build_url_only_get_params_typeerror():
with pytest.raises(TypeError):
build_url({'k': 'k_str'})


def test__build_url_value_error_no_parmeters():
with pytest.raises(TypeError):
build_url()


def test__build_url_bad_key_in_get_params_typeerror():
with pytest.raises(TypeError):
build_url('host_name', 'relative_url', {[1,1]: None})


def test__build_url_bad_key_in_get_params_attributeerror():
with pytest.raises(AttributeError):
build_url('host_name', 'relative_url', [1,1])
22 changes: 20 additions & 2 deletions tests/level_1/test_two_date_parser.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
from functions.level_1.two_date_parser import compose_datetime_from
import datetime
import pytest

def test__compose_datetime_from_date_with_coma():
assert compose_datetime_from("2023,12,15", "19:55") == datetime.datetime(datetime.date.today().year,datetime.date.today().month,datetime.date.today().day,19,55)

def test_compose_datetime_from():
pass

def test__compose_datetime_from_date_is_tomorrow():
assert compose_datetime_from("tomorrow", "19:55") == datetime.datetime(datetime.date.today().year,datetime.date.today().month,datetime.date.today().day+1,19,55)


def test__compose_datetime_from_date_is_chaos():
assert compose_datetime_from("202yhbmj5", "19:33") == datetime.datetime(datetime.date.today().year,datetime.date.today().month,datetime.date.today().day,19,33)


def test__compose_datetime_from_wrong_date():
with pytest.raises(AttributeError):
compose_datetime_from("202yhbmj5", 14645)

def test__compose_datetime_from_no_date_str():
with pytest.raises(TypeError):
compose_datetime_from("19:33")
46 changes: 46 additions & 0 deletions tests/level_1_5/test_five_replace_word.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from functions.level_1_5.five_replace_word import replace_word
import pytest


def test__replace_word__one_word_replaced():
assert replace_word('one two three four', 'two', 'replace_to') == 'one replace_to three four'


def test__replace_word__two_words_replaced():
assert replace_word('one two three Two four', 'two', 'replace_to') == 'one replace_to three replace_to four'


def test__replace_word__replace_with_upper_letters():
assert replace_word('one two three four', 'TWo', 'replace_to') == 'one replace_to three four'


def test__replace_word__not_replaced():
assert replace_word('one two three four', '1234', 'replace_to') == 'one two three four'


def test__replace_word__replace_from_is_empty():
assert replace_word('one two three four', '', 'replace_to') == 'one two three four'


def test__replace_word__replace_to_is_empty():
assert replace_word('one two three four', 'two', '') == 'one three four'


def test__replace_word__replace_to_is_int_typeerror():
with pytest.raises(TypeError):
replace_word('one two three four', 'two', 123)


def test__replace_word__replace_from_is_int_attributeerror():
with pytest.raises(AttributeError):
replace_word('one two three four', 2, '123')


def test__replace_word__text_is_int_attributeerror():
with pytest.raises(AttributeError):
replace_word(123314, 'two', '123')


def test__replace_word__not_enough_params_typeerror():
with pytest.raises(TypeError):
replace_word('123', 'bsrbg')
57 changes: 57 additions & 0 deletions tests/level_1_5/test_four_check_tweet_sentiment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
from functions.level_1_5.four_sentiment import check_tweet_sentiment
import pytest



def test__check_tweet_sentiment__one_length_for_gw_and_bw():
assert check_tweet_sentiment('g1 b1 g2 b2 g3 b3 ', {'g1','g2'}, {'b1', 'b2'}) == 'BAD'


def test__check_tweet_sentiment__not_bw_and_gw_in_text():
assert check_tweet_sentiment('g0 b0 g0 b0 g3 b3 ', {'g1','g2'}, {'b1', 'b2'}) == None


def test__check_tweet_sentiment_gw_equal_to_bw():
assert check_tweet_sentiment('g1 b2 g0 b0 g3 b3 ', {'g1','g2'}, {'g1', 'g2'}) == None


def test__check_tweet_sentiment__gw_longer_than_bw():
assert check_tweet_sentiment('g1 b2 g0 b0 g3 b3 g4 b4', {'g1','g2', 'g3'}, {'g1', 'g2'}) == 'GOOD'


def test__check_tweet_sentiment__no_set_in_gw_and_bw():
assert check_tweet_sentiment('1 2', '5 6 7 4', '2') == 'GOOD'


def test__check_tweet_sentiment__gw_longer_than_bw_and_nothing_in_text():
assert check_tweet_sentiment('g0 b0 g0 b0 g0 b3 g4 b4', {'g1','g2', 'g3'}, {'g1', 'g2'}) == None


def test__check_tweet_sentiment__gw_shorter_than_bw_and_bw_in_text():
assert check_tweet_sentiment('g0 b0 g3 b3 g4 b4', {'g1','g2'}, {'g1', 'g2', 'g3'}) == 'BAD'


def test__check_tweet_sentiment__gw_shorter_than_bw_and_bw_in_text():
assert check_tweet_sentiment('g0 b0 g3 b3 g4 b4', {''}, {'g1', 'g2', 'g3'}) == 'BAD'


def test__check_tweet_sentiment__gw_and_bw_empty():
assert check_tweet_sentiment('g0 b0 g3 b3 g4 b4', {''}, {''}) == None


def test__check_tweet_sentiment__everything_is_empty():
assert check_tweet_sentiment('', {''}, {''}) == None


def test__check_tweet_sentiment__everything_is_str():
assert check_tweet_sentiment('one two', 'one', 'two') == 'BAD'


def test__check_tweet_sentiment__no_bw_typeerror():
with pytest.raises(TypeError):
check_tweet_sentiment('', {''})


def test__check_tweet_sentiment__text_is_int_attributeerror():
with pytest.raises(AttributeError):
check_tweet_sentiment(123, '5 6 7 4', '2')
52 changes: 52 additions & 0 deletions tests/level_1_5/test_one_median.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
from functions.level_1_5.one_median import get_median_value
import pytest

def test__get_median_value__empty_params():
items = ''
get_median_value_result = get_median_value(items)
assert get_median_value_result == None


def test__get_median_value__list_of_three_params():
items = [2,1,5]
get_median_value_result = get_median_value(items)
assert get_median_value_result == 5


def test__get_median__value__list_of_negative_values():
items = [-2,-1,5]
get_median_value_result = get_median_value(items)
assert get_median_value_result == 5


def test__get_median__value__list_of_odd_params():
items = [2,1,3,9, 10]
get_median_value_result = get_median_value(items)
assert get_median_value_result == 9


def test__get_median__value__list_of_even_params():
items = [2,1,1,1,3,3,2,9,9,3,9, 10]
get_median_value_result = get_median_value(items)
assert get_median_value_result == 9


def test__get_median__value__list_of_float_params():
items = [0.6, 99.4, 13.2]
get_median_value_result = get_median_value(items)
assert get_median_value([0.6, 99.4, 13.2])==13.2


def test__get_median_value__no_params_typeerror():
with pytest.raises(TypeError):
get_median_value()


def test__get_median_value__list_of_four_params_indexerror():
with pytest.raises(IndexError):
get_median_value([2,1,3,9])


def test__get_median_value__one_int_in_params_typeerror():
with pytest.raises(TypeError):
get_median_value(1)
54 changes: 54 additions & 0 deletions tests/level_1_5/test_three.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
from functions.level_1_5.three_first import first, NOT_SET
import pytest


def test__first__only_items():
assert first([1,2,3]) == 1


def test__first__items_and_no_set():
assert first([1,2,3], NOT_SET) == 1


def test__first__no_items_empty_list():
assert first([], 'default') == 'default'


def test__first__items_empty():
assert first('', 'default') == 'default'

def test__first__items_is_none():
assert first(None, 'default') == 'default'


def test__first__default_is_int():
assert first(None, 1234) == 1234

def test__first__items_and_defaults_are_none():
assert first(None, None) == None

def test__first__defaults_is_tuple():
assert first(None, (5,56)) == (5, 56)


def test__first__defaults_is_string():
assert first('default') == 'd'


def test__first__defaults_is_not_set():
assert first(NOT_SET) == 'N'


def test__first__items_is_empty_no_defaults_attributeerror():
with pytest.raises(AttributeError):
first([])


def test__first__items_is_empty_attributeerror():
with pytest.raises(AttributeError):
first([], NOT_SET)


def test__first__no_parameters():
with pytest.raises(TypeError):
first()
Loading