Skip to content
Closed
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
47 changes: 47 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import datetime
import pytest

from decimal import Decimal
from functions.level_1.four_bank_parser import BankCard, Expense, SmsMessage


@pytest.fixture
def valid_ineco_expense_sms_text():
return "10000 RUR, 5555444433332222 18.02.23 21:15 ZOO_BAR authcode 3456"


@pytest.fixture
def sms(valid_ineco_expense_sms_text):
return SmsMessage(
text=valid_ineco_expense_sms_text,
author="ARTEM",
sent_at=datetime.datetime.now(),
)


@pytest.fixture
def bank_card_artem():
return BankCard(last_digits="1111", owner="ARTEM")


@pytest.fixture
def bank_card_cat():
return BankCard(last_digits="2222", owner="CAT")


@pytest.fixture
def cards(bank_card_artem, bank_card_cat):
return [
bank_card_artem,
bank_card_cat,
]


@pytest.fixture
def expense(bank_card_cat):
return Expense(
amount=Decimal('10000'),
card=bank_card_cat,
spent_in="ZOO_BAR",
spent_at=datetime.datetime(2023, 2, 18, 21, 15),
)
2 changes: 0 additions & 2 deletions functions/level_1/two_date_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,3 @@ def compose_datetime_from(date_str: str, time_str: str) -> datetime.datetime:
int(hour_str),
int(minute_str),
)


2 changes: 2 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
pytest==7.2.1
pytest-lazy-fixture==0.6.3
Faker==17.0.0
20 changes: 20 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[flake8]
ignore = W503, P103, D
max-line-length = 120
use_class_attributes_order_strict_mode = True
max_function_length = 50
max-complexity = 8
max-cognitive-complexity = 8
max-annotations-complexity = 4
exclude = node_modules,env,venv,venv36
var_names_exclude_pathes = node_modules,env,venv,venv36
assert_allowed_in_pathes = tests,migrations,env,venv,venv36
adjustable-default-max-complexity = 8
per-file-ignores =
__init__.py: F401
tests/*: TAE001
ban-relative-imports = True

[mypy]
ignore_missing_imports = True
allow_redefinition = True
3 changes: 3 additions & 0 deletions tests/files/config.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[tool:app-config]
extra_fields =
test: str
Empty file added tests/files/empty_file.txt
Empty file.
6 changes: 6 additions & 0 deletions tests/files/five_lines_file.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#no line
1 line
2 line
3 line
4 line
5 line
20 changes: 18 additions & 2 deletions tests/level_1/test_five_title.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
import pytest

from faker import Faker
from functions.level_1.five_title import change_copy_item

fake = Faker()

long_title = fake.text()


def test_change_copy_item():
pass
@pytest.mark.parametrize(
"title, max_main_item_title_length, expected",
[
(long_title, 100, long_title),
(f"{long_title} (9)", 50, f"{long_title} (9)"),
("short_title", 100, "Copy of short_title"),
("Copy of short_title (5)", 100, "Copy of short_title (6)"),
],
)
def test__change_copy_item(title: str, max_main_item_title_length: int, expected: str):
assert change_copy_item(title, max_main_item_title_length) == expected
4 changes: 2 additions & 2 deletions tests/level_1/test_four_bank_parser.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from functions.level_1.four_bank_parser import BankCard, SmsMessage, Expense, parse_ineco_expense


def test_parse_ineco_expense():
pass
def test__parse_ineco_expense(sms: SmsMessage, cards: list[BankCard], expense: Expense):
assert parse_ineco_expense(sms, cards) == expense
13 changes: 11 additions & 2 deletions tests/level_1/test_one_gender.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
import pytest

from functions.level_1.one_gender import genderalize


def test_genderalize():
pass
@pytest.mark.parametrize(
"verb_male, verb_female, gender, expected",
[
("Делал", "Делала", "male", "Делал"),
("Делал", "Делала", "female", "Делала"),
],
)
def test__genderalize(verb_male: str, verb_female: str, gender: str, expected: str):
assert genderalize(verb_male, verb_female, gender) == expected
38 changes: 36 additions & 2 deletions tests/level_1/test_three_url_builder.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,39 @@
import pytest

from functions.level_1.three_url_builder import build_url
from typing import Mapping


def test_build_url():
pass
@pytest.mark.parametrize(
"expected, host_name, relative_url, get_params",
[
(
"https://market.yandex.ru/catalog",
"https://market.yandex.ru",
"catalog",
None,
),
(
"https://market.yandex.ru/catalog",
"https://market.yandex.ru",
"catalog",
{},
),
(
"https://market.yandex.ru/catalog?product_id=1&color=red",
"https://market.yandex.ru",
"catalog",
{
"product_id": "1",
"color": "red",
},
),
],
)
def test__build_url(
expected: str,
host_name: str,
relative_url: str,
get_params: Mapping[str, str],
):
assert build_url(host_name, relative_url, get_params) == expected
23 changes: 21 additions & 2 deletions tests/level_1/test_two_date_parser.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
import datetime
import pytest

from functions.level_1.two_date_parser import compose_datetime_from


def test_compose_datetime_from():
pass
def datetime_midday_from_today(add_days=0):
today = datetime.date.today()
return datetime.datetime(today.year, today.month, today.day + add_days, 12, 0)


datetime_today_midday = datetime_midday_from_today()
datetime_tomorrow_midday = datetime_midday_from_today(1)


@pytest.mark.parametrize(
"date_str, time_str, expected",
[
("today", "12:00", datetime_today_midday),
("tomorrow", "12:00", datetime_tomorrow_midday),
],
)
def test__compose_datetime_from(date_str: str, time_str: str, expected: datetime.datetime):
assert compose_datetime_from(date_str, time_str) == expected
26 changes: 26 additions & 0 deletions tests/level_2/test_five_extra_fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import pytest

from functions.level_2.five_extra_fields import fetch_extra_fields_configuration, fetch_app_config_field


@pytest.mark.parametrize(
"config_file_path, field_name, expected",
[
("tests/files/config.ini", "extra_fields", "\ntest: str"),
("tests/files/config.ini", "no_fields", None),
("tests/files/no_config.ini", "no_fields", None),
],
)
def test__fetch_app_config_field(config_file_path: str, field_name: str, expected):
assert fetch_app_config_field(config_file_path, field_name) == expected


@pytest.mark.parametrize(
"config_file_path, expected",
[
("tests/files/config.ini", {"test": str}),
("tests/files/no_config.ini", {}),
],
)
def test__fetch_extra_fields_configuration(config_file_path: str, expected):
assert fetch_extra_fields_configuration(config_file_path) == expected
15 changes: 15 additions & 0 deletions tests/level_2/test_four_lines_counter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import pytest

from functions.level_2.four_lines_counter import count_lines_in


@pytest.mark.parametrize(
"filepath, expected",
[
("tests/files/no_file.txt", None),
("tests/files/empty_file.txt", 0),
("tests/files/five_lines_file.txt", 5),
],
)
def test__count_lines_in(filepath: str, expected):
assert count_lines_in(filepath) == expected
14 changes: 14 additions & 0 deletions tests/level_2/test_one_brackets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import pytest

from functions.level_2.one_brackets import delete_remove_brackets_quotes


@pytest.mark.parametrize(
'name, expected',
[
('{"test_name"}', 'test_name'),
('test_name', 'test_name'),
],
)
def test__delete_remove_brackets_quotes(name: str, expected: str) -> None:
assert delete_remove_brackets_quotes(name) == expected
9 changes: 9 additions & 0 deletions tests/level_2/test_three_promocodes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import re

from functions.level_2.three_promocodes import generate_promocode


def test__generate_promocode():
promocode = generate_promocode()
match_result = re.match(r"^[A-Z]{" + str(len(promocode)) + "}", promocode)
assert match_result.group(0) is not None
19 changes: 19 additions & 0 deletions tests/level_2/test_two_students.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import pytest

from functions.level_2.two_students import get_student_by_tg_nickname, Student

STUDENTS = [
Student("Ivan", "Ivanov", "@ivan"),
Student("Petr", "Petrov", None),
]


@pytest.mark.parametrize(
"telegram_username, expected",
[
("ivan", Student("Ivan", "Ivanov", "@ivan")),
("petr", None),
],
)
def test__get_student_by_tg_nickname(telegram_username: str, expected: Student):
assert get_student_by_tg_nickname(telegram_username, STUDENTS) == expected