-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_main_func.py
More file actions
121 lines (77 loc) · 3.31 KB
/
test_main_func.py
File metadata and controls
121 lines (77 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import pytest
from main import CurrencyConverterApp
@pytest.fixture
def app():
app_instance = CurrencyConverterApp()
yield app_instance
def test_calculate_loan_success(app):
app.loan_var.set(10000)
app.loan_time_var.set(12)
app.annual_interest_var.set(12)
app.calculate_loan()
assert 'Ежемесячный платёж: ' in app.monthly_label['text']
assert 'Сумма всех платежей: ' in app.loan_sum_label['text']
assert 'Начисленные проценты: ' in app.interest_label['text']
logged_text = app.log_text.get('1.0', 'end')
assert 'Вычислен ежемесячный платёж' in logged_text
def test_calculate_loan_invalid_loan_amount(app):
app.loan_var.set(0)
app.loan_time_var.set(12)
app.annual_interest_var.set(12)
app.calculate_loan()
logged_text = app.log_text.get('1.0', 'end')
assert 'Сумма кредита должно быть больше 0' in logged_text
assert app.monthly_label['text'] == 'Ежемесячный платёж: 0 RUB'
def test_convert_success(monkeypatch, app):
def mock_get_saved_rate(currency):
return 75.0
monkeypatch.setattr('main.get_saved_rate', mock_get_saved_rate)
app.loan_var.set(100)
app.target_var.set('USD')
app.convert()
assert 'Результат конвертации: 7500.00 USD' == app.result_label['text']
logged_text = app.log_text.get('1.0', 'end')
assert 'Конвертировано 100.0 RUB в USD по курсу 75.0000' in logged_text
def test_convert_none_rate(monkeypatch, app):
def mock_get_saved_rate(currency):
return None
monkeypatch.setattr('main.get_saved_rate', mock_get_saved_rate)
app.loan_var.set(100)
app.target_var.set('EUR')
app.convert()
logged_text = app.log_text.get('1.0', 'end')
assert 'Курс валюты EUR не найден в базе данных' in logged_text
def test_convert_exception(app):
app.loan_var.set(100)
app.target_var.set('')
app.convert()
logged_text = app.log_text.get('1.0', 'end')
assert 'Не выбрана валюта для конвертации' in logged_text
def test_update_db_success(monkeypatch, app):
def mock_fetch_rates():
return {
'USD': {'Value': 75.0},
'EUR': {'Value': 85.0},
}
calls = []
def mock_save_rate(id, code, value):
calls.append((id, code, value))
monkeypatch.setattr('main.fetch_rates', mock_fetch_rates)
monkeypatch.setattr('main.save_rate', mock_save_rate)
app.update_db()
assert (1, 'USD', 75.0) in calls
assert (2, 'EUR', 85.0) in calls
assert app.target_entry['values'] == ('USD', 'EUR')
logged_text = app.log_text.get('1.0', 'end')
assert 'Курсы валют обновлены' in logged_text
def test_update_db_empty_rates(monkeypatch, app):
def mock_fetch_rates():
return {}
def mock_save_rate(id, code, value):
pytest.fail("save_rate should not be called")
monkeypatch.setattr('main.fetch_rates', mock_fetch_rates)
monkeypatch.setattr('main.save_rate', mock_save_rate)
app.update_db()
assert app.target_entry['values'] == ('')
logged_text = app.log_text.get('1.0', 'end')
assert 'Курсы валют обновлены' in logged_text