1import unittest
2from unittest.mock import mock_open, patch
3from itertools import product
4from secret import validate_recipe, RuinedNikuldenDinnerError
5
6
7def permute(word):
8 """Permute all case variations of a word."""
9 letter_options = [(char.lower(), char.upper()) for char in word]
10 permutations = list(map(''.join, product(*letter_options)))
11 return permutations
12
13
14class TestNikuldenValidator(unittest.TestCase):
15 def setUp(self):
16 """Set up valid and invalid mock recipes."""
17 keywords = ['риба', 'рибена', 'шаран', 'сьонга']
18
19 self.mock_valid_recipes = []
20 for keyword in keywords:
21 self.mock_valid_recipes.extend(permute(keyword))
22
23 self.mock_invalid_recipes = list(
24 map(lambda x: 'a' + x + 'a', self.mock_valid_recipes)
25 )
26
27 def test_valid_recipe(self):
28 for mock_recipe in self.mock_valid_recipes:
29 with patch("builtins.open", mock_open(read_data=mock_recipe)):
30 self.assertTrue(validate_recipe("hacknah_vi.txt"))
31
32 def test_invalid_recipe(self):
33 mock_invalid_recipe = (
34 """Всеки ми казва – спри да я чакаш
35 Ако обича те, ще бъде тук
36 Месеци минаха, даже година
37 Може би има си друг
38 Всеки ми казва – не настоявай
39 И да умираш, дишай напук
40 Живея и дишам с тази надежда
41 Някога пак да си тук"""
42 )
43
44 self.mock_invalid_recipes.append(mock_invalid_recipe) #нямаше как
45
46 for mock_recipe in self.mock_invalid_recipes:
47 with patch("builtins.open", mock_open(read_data=mock_recipe)):
48 self.assertFalse(validate_recipe("hacknah_vi.txt"))
49
50 def test_bad_recipe_file(self):
51 with patch("builtins.open", side_effect=OSError("File error!")):
52 with self.assertRaises(RuinedNikuldenDinnerError):
53 validate_recipe("pak_vi_hacknah.txt")
54
55 with patch("builtins.open", side_effect=IOError("File error!")):
56 with self.assertRaises(RuinedNikuldenDinnerError):
57 validate_recipe("pak_vi_hacknah.txt")
58
59
60if __name__ == "__main__":
61 unittest.main()
Timed out.
Виктор Бечев
07.12.2024 13:18Пуснах ти тестовете ръчно, защото имаме сложен timeout за да не ни хаквате. Минават всичките.
|
| f | 1 | import unittest | f | 1 | import unittest |
| 2 | from unittest.mock import mock_open, patch | 2 | from unittest.mock import mock_open, patch | ||
| 3 | from itertools import product | 3 | from itertools import product | ||
| 4 | from secret import validate_recipe, RuinedNikuldenDinnerError | 4 | from secret import validate_recipe, RuinedNikuldenDinnerError | ||
| 5 | 5 | ||||
| n | n | 6 | |||
| 6 | def permute(word): | 7 | def permute(word): | ||
| 7 | """Permute all case variations of a word.""" | 8 | """Permute all case variations of a word.""" | ||
| n | 8 | n | |||
| 9 | letter_options = [(char.lower(), char.upper()) for char in word] | 9 | letter_options = [(char.lower(), char.upper()) for char in word] | ||
| 10 | permutations = list(map(''.join, product(*letter_options))) | 10 | permutations = list(map(''.join, product(*letter_options))) | ||
| 11 | return permutations | 11 | return permutations | ||
| 12 | 12 | ||||
| n | n | 13 | |||
| 13 | class TestNikuldenValidator(unittest.TestCase): | 14 | class TestNikuldenValidator(unittest.TestCase): | ||
| n | 14 | n | |||
| 15 | def setUp(self): | 15 | def setUp(self): | ||
| n | n | 16 | """Set up valid and invalid mock recipes.""" | ||
| 16 | keywords = ['риба', 'рибена', 'шаран', 'сьонга'] | 17 | keywords = ['риба', 'рибена', 'шаран', 'сьонга'] | ||
| n | 17 | n | 18 | ||
| 18 | self.mock_valid_recipes = [] | 19 | self.mock_valid_recipes = [] | ||
| 19 | for keyword in keywords: | 20 | for keyword in keywords: | ||
| n | 20 | self.mock_valid_recipes.extend(permute(keyword)) | n | 21 | self.mock_valid_recipes.extend(permute(keyword)) |
| 21 | |||||
| 22 | self.mock_invalid_recipes = list(map(lambda x: 'a' + x + 'a', self.mock_valid_recipes)) | ||||
| 23 | 22 | ||||
| n | n | 23 | self.mock_invalid_recipes = list( | ||
| 24 | map(lambda x: 'a' + x + 'a', self.mock_valid_recipes) | ||||
| 25 | ) | ||||
| 24 | 26 | ||||
| 25 | def test_valid_recipe(self): | 27 | def test_valid_recipe(self): | ||
| 26 | for mock_recipe in self.mock_valid_recipes: | 28 | for mock_recipe in self.mock_valid_recipes: | ||
| 27 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | 29 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | ||
| 28 | self.assertTrue(validate_recipe("hacknah_vi.txt")) | 30 | self.assertTrue(validate_recipe("hacknah_vi.txt")) | ||
| 29 | 31 | ||||
| 30 | def test_invalid_recipe(self): | 32 | def test_invalid_recipe(self): | ||
| 31 | mock_invalid_recipe = ( | 33 | mock_invalid_recipe = ( | ||
| 32 | """Всеки ми казва – спри да я чакаш | 34 | """Всеки ми казва – спри да я чакаш | ||
| 33 | Ако обича те, ще бъде тук | 35 | Ако обича те, ще бъде тук | ||
| 34 | Месеци минаха, даже година | 36 | Месеци минаха, даже година | ||
| 35 | Може би има си друг | 37 | Може би има си друг | ||
| 36 | Всеки ми казва – не настоявай | 38 | Всеки ми казва – не настоявай | ||
| 37 | И да умираш, дишай напук | 39 | И да умираш, дишай напук | ||
| 38 | Живея и дишам с тази надежда | 40 | Живея и дишам с тази надежда | ||
| 39 | Някога пак да си тук""" | 41 | Някога пак да си тук""" | ||
| 40 | ) | 42 | ) | ||
| n | 41 | n | 43 | ||
| 42 | self.mock_invalid_recipes.append(mock_invalid_recipe) #нямаше как | 44 | self.mock_invalid_recipes.append(mock_invalid_recipe) #нямаше как | ||
| n | n | 45 | |||
| 43 | for mock_recipe in self.mock_invalid_recipes: | 46 | for mock_recipe in self.mock_invalid_recipes: | ||
| 44 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | 47 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | ||
| 45 | self.assertFalse(validate_recipe("hacknah_vi.txt")) | 48 | self.assertFalse(validate_recipe("hacknah_vi.txt")) | ||
| n | 46 | n | 49 | ||
| 47 | |||||
| 48 | def test_bad_recipe_file(self): | 50 | def test_bad_recipe_file(self): | ||
| n | 49 | with patch("builtins.open", side_effect=OSError("Тук ви шаня, пазя си шарана!")): | n | 51 | with patch("builtins.open", side_effect=OSError("File error!")): |
| 50 | with self.assertRaises(RuinedNikuldenDinnerError): | 52 | with self.assertRaises(RuinedNikuldenDinnerError): | ||
| 51 | validate_recipe("pak_vi_hacknah.txt") | 53 | validate_recipe("pak_vi_hacknah.txt") | ||
| t | 52 | t | 54 | ||
| 53 | with patch("builtins.open", side_effect=IOError("Тук ви шаня, пазя си шарана!")): | 55 | with patch("builtins.open", side_effect=IOError("File error!")): | ||
| 54 | with self.assertRaises(RuinedNikuldenDinnerError): | 56 | with self.assertRaises(RuinedNikuldenDinnerError): | ||
| 55 | validate_recipe("pak_vi_hacknah.txt") | 57 | validate_recipe("pak_vi_hacknah.txt") | ||
| 56 | 58 | ||||
| 57 | 59 | ||||
| 58 | if __name__ == "__main__": | 60 | if __name__ == "__main__": | ||
| 59 | unittest.main() | 61 | unittest.main() |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
| f | 1 | import unittest | f | 1 | import unittest |
| 2 | from unittest.mock import mock_open, patch | 2 | from unittest.mock import mock_open, patch | ||
| 3 | from itertools import product | 3 | from itertools import product | ||
| 4 | from secret import validate_recipe, RuinedNikuldenDinnerError | 4 | from secret import validate_recipe, RuinedNikuldenDinnerError | ||
| 5 | 5 | ||||
| 6 | def permute(word): | 6 | def permute(word): | ||
| 7 | """Permute all case variations of a word.""" | 7 | """Permute all case variations of a word.""" | ||
| 8 | 8 | ||||
| 9 | letter_options = [(char.lower(), char.upper()) for char in word] | 9 | letter_options = [(char.lower(), char.upper()) for char in word] | ||
| 10 | permutations = list(map(''.join, product(*letter_options))) | 10 | permutations = list(map(''.join, product(*letter_options))) | ||
| 11 | return permutations | 11 | return permutations | ||
| 12 | 12 | ||||
| 13 | class TestNikuldenValidator(unittest.TestCase): | 13 | class TestNikuldenValidator(unittest.TestCase): | ||
| n | n | 14 | |||
| 15 | def setUp(self): | ||||
| 16 | keywords = ['риба', 'рибена', 'шаран', 'сьонга'] | ||||
| 17 | |||||
| 18 | self.mock_valid_recipes = [] | ||||
| 19 | for keyword in keywords: | ||||
| 20 | self.mock_valid_recipes.extend(permute(keyword)) | ||||
| 21 | |||||
| 22 | self.mock_invalid_recipes = list(map(lambda x: 'a' + x + 'a', self.mock_valid_recipes)) | ||||
| 23 | |||||
| 24 | |||||
| 14 | def test_valid_recipe(self): | 25 | def test_valid_recipe(self): | ||
| n | 15 | keywords = ['риба', 'рибена', 'шаран', 'сьонга'] | n | ||
| 16 | mock_valid_recipes = [] | ||||
| 17 | for keyword in keywords: | ||||
| 18 | mock_valid_recipes.extend(permute(keyword)) | ||||
| 19 | |||||
| 20 | for mock_recipe in mock_valid_recipes: | 26 | for mock_recipe in self.mock_valid_recipes: | ||
| 21 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | 27 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | ||
| 22 | self.assertTrue(validate_recipe("hacknah_vi.txt")) | 28 | self.assertTrue(validate_recipe("hacknah_vi.txt")) | ||
| 23 | 29 | ||||
| 24 | def test_invalid_recipe(self): | 30 | def test_invalid_recipe(self): | ||
| 25 | mock_invalid_recipe = ( | 31 | mock_invalid_recipe = ( | ||
| 26 | """Всеки ми казва – спри да я чакаш | 32 | """Всеки ми казва – спри да я чакаш | ||
| 27 | Ако обича те, ще бъде тук | 33 | Ако обича те, ще бъде тук | ||
| 28 | Месеци минаха, даже година | 34 | Месеци минаха, даже година | ||
| 29 | Може би има си друг | 35 | Може би има си друг | ||
| 30 | Всеки ми казва – не настоявай | 36 | Всеки ми казва – не настоявай | ||
| 31 | И да умираш, дишай напук | 37 | И да умираш, дишай напук | ||
| 32 | Живея и дишам с тази надежда | 38 | Живея и дишам с тази надежда | ||
| 33 | Някога пак да си тук""" | 39 | Някога пак да си тук""" | ||
| 34 | ) | 40 | ) | ||
| n | 35 | n | 41 | ||
| 42 | self.mock_invalid_recipes.append(mock_invalid_recipe) #нямаше как | ||||
| 43 | for mock_recipe in self.mock_invalid_recipes: | ||||
| 36 | with patch("builtins.open", mock_open(read_data=mock_invalid_recipe)): | 44 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | ||
| 37 | self.assertFalse(validate_recipe("pak_hacknah_vi.txt")) | 45 | self.assertFalse(validate_recipe("hacknah_vi.txt")) | ||
| 38 | 46 | ||||
| 47 | |||||
| 39 | def test_bad_recipe_file(self): | 48 | def test_bad_recipe_file(self): | ||
| 40 | with patch("builtins.open", side_effect=OSError("Тук ви шаня, пазя си шарана!")): | 49 | with patch("builtins.open", side_effect=OSError("Тук ви шаня, пазя си шарана!")): | ||
| 41 | with self.assertRaises(RuinedNikuldenDinnerError): | 50 | with self.assertRaises(RuinedNikuldenDinnerError): | ||
| n | 42 | validate_recipe("pak_pak_vi_hacknah.txt") | n | 51 | validate_recipe("pak_vi_hacknah.txt") |
| 43 | 52 | ||||
| 44 | with patch("builtins.open", side_effect=IOError("Тук ви шаня, пазя си шарана!")): | 53 | with patch("builtins.open", side_effect=IOError("Тук ви шаня, пазя си шарана!")): | ||
| 45 | with self.assertRaises(RuinedNikuldenDinnerError): | 54 | with self.assertRaises(RuinedNikuldenDinnerError): | ||
| t | 46 | validate_recipe("pak_pak_vi_hacknah.txt") | t | 55 | validate_recipe("pak_vi_hacknah.txt") |
| 47 | 56 | ||||
| 48 | 57 | ||||
| 49 | if __name__ == "__main__": | 58 | if __name__ == "__main__": | ||
| 50 | unittest.main() | 59 | unittest.main() |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
| f | 1 | import unittest | f | 1 | import unittest |
| 2 | from unittest.mock import mock_open, patch | 2 | from unittest.mock import mock_open, patch | ||
| 3 | from itertools import product | 3 | from itertools import product | ||
| 4 | from secret import validate_recipe, RuinedNikuldenDinnerError | 4 | from secret import validate_recipe, RuinedNikuldenDinnerError | ||
| 5 | 5 | ||||
| 6 | def permute(word): | 6 | def permute(word): | ||
| 7 | """Permute all case variations of a word.""" | 7 | """Permute all case variations of a word.""" | ||
| 8 | 8 | ||||
| 9 | letter_options = [(char.lower(), char.upper()) for char in word] | 9 | letter_options = [(char.lower(), char.upper()) for char in word] | ||
| 10 | permutations = list(map(''.join, product(*letter_options))) | 10 | permutations = list(map(''.join, product(*letter_options))) | ||
| 11 | return permutations | 11 | return permutations | ||
| 12 | 12 | ||||
| 13 | class TestNikuldenValidator(unittest.TestCase): | 13 | class TestNikuldenValidator(unittest.TestCase): | ||
| 14 | def test_valid_recipe(self): | 14 | def test_valid_recipe(self): | ||
| t | 15 | # mock_valid_recipes = [ | t | ||
| 16 | # "За една сьоНГА продадох си душата,", | ||||
| 17 | # "за РИбеНа глава загубих свободата.", | ||||
| 18 | # "Сляп в самота в плен на шаран", | ||||
| 19 | # "да съм риба на света.", | ||||
| 20 | # ] | ||||
| 21 | |||||
| 22 | keywords = ['риба', 'рибена', 'шаран', 'сьонга'] | 15 | keywords = ['риба', 'рибена', 'шаран', 'сьонга'] | ||
| 23 | mock_valid_recipes = [] | 16 | mock_valid_recipes = [] | ||
| 24 | for keyword in keywords: | 17 | for keyword in keywords: | ||
| 25 | mock_valid_recipes.extend(permute(keyword)) | 18 | mock_valid_recipes.extend(permute(keyword)) | ||
| 26 | 19 | ||||
| 27 | for mock_recipe in mock_valid_recipes: | 20 | for mock_recipe in mock_valid_recipes: | ||
| 28 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | 21 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | ||
| 29 | self.assertTrue(validate_recipe("hacknah_vi.txt")) | 22 | self.assertTrue(validate_recipe("hacknah_vi.txt")) | ||
| 30 | 23 | ||||
| 31 | def test_invalid_recipe(self): | 24 | def test_invalid_recipe(self): | ||
| 32 | mock_invalid_recipe = ( | 25 | mock_invalid_recipe = ( | ||
| 33 | """Всеки ми казва – спри да я чакаш | 26 | """Всеки ми казва – спри да я чакаш | ||
| 34 | Ако обича те, ще бъде тук | 27 | Ако обича те, ще бъде тук | ||
| 35 | Месеци минаха, даже година | 28 | Месеци минаха, даже година | ||
| 36 | Може би има си друг | 29 | Може би има си друг | ||
| 37 | Всеки ми казва – не настоявай | 30 | Всеки ми казва – не настоявай | ||
| 38 | И да умираш, дишай напук | 31 | И да умираш, дишай напук | ||
| 39 | Живея и дишам с тази надежда | 32 | Живея и дишам с тази надежда | ||
| 40 | Някога пак да си тук""" | 33 | Някога пак да си тук""" | ||
| 41 | ) | 34 | ) | ||
| 42 | 35 | ||||
| 43 | with patch("builtins.open", mock_open(read_data=mock_invalid_recipe)): | 36 | with patch("builtins.open", mock_open(read_data=mock_invalid_recipe)): | ||
| 44 | self.assertFalse(validate_recipe("pak_hacknah_vi.txt")) | 37 | self.assertFalse(validate_recipe("pak_hacknah_vi.txt")) | ||
| 45 | 38 | ||||
| 46 | def test_bad_recipe_file(self): | 39 | def test_bad_recipe_file(self): | ||
| 47 | with patch("builtins.open", side_effect=OSError("Тук ви шаня, пазя си шарана!")): | 40 | with patch("builtins.open", side_effect=OSError("Тук ви шаня, пазя си шарана!")): | ||
| 48 | with self.assertRaises(RuinedNikuldenDinnerError): | 41 | with self.assertRaises(RuinedNikuldenDinnerError): | ||
| 49 | validate_recipe("pak_pak_vi_hacknah.txt") | 42 | validate_recipe("pak_pak_vi_hacknah.txt") | ||
| 50 | 43 | ||||
| 51 | with patch("builtins.open", side_effect=IOError("Тук ви шаня, пазя си шарана!")): | 44 | with patch("builtins.open", side_effect=IOError("Тук ви шаня, пазя си шарана!")): | ||
| 52 | with self.assertRaises(RuinedNikuldenDinnerError): | 45 | with self.assertRaises(RuinedNikuldenDinnerError): | ||
| 53 | validate_recipe("pak_pak_vi_hacknah.txt") | 46 | validate_recipe("pak_pak_vi_hacknah.txt") | ||
| 54 | 47 | ||||
| 55 | 48 | ||||
| 56 | if __name__ == "__main__": | 49 | if __name__ == "__main__": | ||
| 57 | unittest.main() | 50 | unittest.main() |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
| f | 1 | import unittest | f | 1 | import unittest |
| 2 | from unittest.mock import mock_open, patch | 2 | from unittest.mock import mock_open, patch | ||
| n | n | 3 | from itertools import product | ||
| 3 | from secret import validate_recipe, RuinedNikuldenDinnerError | 4 | from secret import validate_recipe, RuinedNikuldenDinnerError | ||
| 4 | 5 | ||||
| n | n | 6 | def permute(word): | ||
| 7 | """Permute all case variations of a word.""" | ||||
| 8 | |||||
| 9 | letter_options = [(char.lower(), char.upper()) for char in word] | ||||
| 10 | permutations = list(map(''.join, product(*letter_options))) | ||||
| 11 | return permutations | ||||
| 5 | 12 | ||||
| 6 | class TestNikuldenValidator(unittest.TestCase): | 13 | class TestNikuldenValidator(unittest.TestCase): | ||
| 7 | def test_valid_recipe(self): | 14 | def test_valid_recipe(self): | ||
| n | n | 15 | # mock_valid_recipes = [ | ||
| 16 | # "За една сьоНГА продадох си душата,", | ||||
| 17 | # "за РИбеНа глава загубих свободата.", | ||||
| 18 | # "Сляп в самота в плен на шаран", | ||||
| 19 | # "да съм риба на света.", | ||||
| 20 | # ] | ||||
| 21 | |||||
| 22 | keywords = ['риба', 'рибена', 'шаран', 'сьонга'] | ||||
| 8 | mock_valid_recipes = [ | 23 | mock_valid_recipes = [] | ||
| 9 | "За една сьоНГА продадох си душата,", | 24 | for keyword in keywords: | ||
| 10 | "за РИбеНа глава загубих свободата.", | 25 | mock_valid_recipes.extend(permute(keyword)) | ||
| 11 | "Сляп в самота в плен на шаран", | ||||
| 12 | "да съм риба на света.", | ||||
| 13 | ] | ||||
| 14 | 26 | ||||
| 15 | for mock_recipe in mock_valid_recipes: | 27 | for mock_recipe in mock_valid_recipes: | ||
| 16 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | 28 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | ||
| 17 | self.assertTrue(validate_recipe("hacknah_vi.txt")) | 29 | self.assertTrue(validate_recipe("hacknah_vi.txt")) | ||
| 18 | 30 | ||||
| 19 | def test_invalid_recipe(self): | 31 | def test_invalid_recipe(self): | ||
| 20 | mock_invalid_recipe = ( | 32 | mock_invalid_recipe = ( | ||
| 21 | """Всеки ми казва – спри да я чакаш | 33 | """Всеки ми казва – спри да я чакаш | ||
| 22 | Ако обича те, ще бъде тук | 34 | Ако обича те, ще бъде тук | ||
| 23 | Месеци минаха, даже година | 35 | Месеци минаха, даже година | ||
| 24 | Може би има си друг | 36 | Може би има си друг | ||
| 25 | Всеки ми казва – не настоявай | 37 | Всеки ми казва – не настоявай | ||
| 26 | И да умираш, дишай напук | 38 | И да умираш, дишай напук | ||
| 27 | Живея и дишам с тази надежда | 39 | Живея и дишам с тази надежда | ||
| 28 | Някога пак да си тук""" | 40 | Някога пак да си тук""" | ||
| 29 | ) | 41 | ) | ||
| 30 | 42 | ||||
| 31 | with patch("builtins.open", mock_open(read_data=mock_invalid_recipe)): | 43 | with patch("builtins.open", mock_open(read_data=mock_invalid_recipe)): | ||
| 32 | self.assertFalse(validate_recipe("pak_hacknah_vi.txt")) | 44 | self.assertFalse(validate_recipe("pak_hacknah_vi.txt")) | ||
| 33 | 45 | ||||
| 34 | def test_bad_recipe_file(self): | 46 | def test_bad_recipe_file(self): | ||
| 35 | with patch("builtins.open", side_effect=OSError("Тук ви шаня, пазя си шарана!")): | 47 | with patch("builtins.open", side_effect=OSError("Тук ви шаня, пазя си шарана!")): | ||
| 36 | with self.assertRaises(RuinedNikuldenDinnerError): | 48 | with self.assertRaises(RuinedNikuldenDinnerError): | ||
| 37 | validate_recipe("pak_pak_vi_hacknah.txt") | 49 | validate_recipe("pak_pak_vi_hacknah.txt") | ||
| 38 | 50 | ||||
| 39 | with patch("builtins.open", side_effect=IOError("Тук ви шаня, пазя си шарана!")): | 51 | with patch("builtins.open", side_effect=IOError("Тук ви шаня, пазя си шарана!")): | ||
| 40 | with self.assertRaises(RuinedNikuldenDinnerError): | 52 | with self.assertRaises(RuinedNikuldenDinnerError): | ||
| 41 | validate_recipe("pak_pak_vi_hacknah.txt") | 53 | validate_recipe("pak_pak_vi_hacknah.txt") | ||
| 42 | 54 | ||||
| t | t | 55 | |||
| 43 | if __name__ == "__main__": | 56 | if __name__ == "__main__": | ||
| 44 | unittest.main() | 57 | unittest.main() |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
| f | 1 | import unittest | f | 1 | import unittest |
| 2 | from unittest.mock import mock_open, patch | 2 | from unittest.mock import mock_open, patch | ||
| 3 | from secret import validate_recipe, RuinedNikuldenDinnerError | 3 | from secret import validate_recipe, RuinedNikuldenDinnerError | ||
| 4 | 4 | ||||
| 5 | 5 | ||||
| 6 | class TestNikuldenValidator(unittest.TestCase): | 6 | class TestNikuldenValidator(unittest.TestCase): | ||
| 7 | def test_valid_recipe(self): | 7 | def test_valid_recipe(self): | ||
| 8 | mock_valid_recipes = [ | 8 | mock_valid_recipes = [ | ||
| 9 | "За една сьоНГА продадох си душата,", | 9 | "За една сьоНГА продадох си душата,", | ||
| 10 | "за РИбеНа глава загубих свободата.", | 10 | "за РИбеНа глава загубих свободата.", | ||
| 11 | "Сляп в самота в плен на шаран", | 11 | "Сляп в самота в плен на шаран", | ||
| 12 | "да съм риба на света.", | 12 | "да съм риба на света.", | ||
| 13 | ] | 13 | ] | ||
| 14 | 14 | ||||
| 15 | for mock_recipe in mock_valid_recipes: | 15 | for mock_recipe in mock_valid_recipes: | ||
| 16 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | 16 | with patch("builtins.open", mock_open(read_data=mock_recipe)): | ||
| 17 | self.assertTrue(validate_recipe("hacknah_vi.txt")) | 17 | self.assertTrue(validate_recipe("hacknah_vi.txt")) | ||
| 18 | 18 | ||||
| 19 | def test_invalid_recipe(self): | 19 | def test_invalid_recipe(self): | ||
| 20 | mock_invalid_recipe = ( | 20 | mock_invalid_recipe = ( | ||
| 21 | """Всеки ми казва – спри да я чакаш | 21 | """Всеки ми казва – спри да я чакаш | ||
| 22 | Ако обича те, ще бъде тук | 22 | Ако обича те, ще бъде тук | ||
| 23 | Месеци минаха, даже година | 23 | Месеци минаха, даже година | ||
| 24 | Може би има си друг | 24 | Може би има си друг | ||
| 25 | Всеки ми казва – не настоявай | 25 | Всеки ми казва – не настоявай | ||
| 26 | И да умираш, дишай напук | 26 | И да умираш, дишай напук | ||
| 27 | Живея и дишам с тази надежда | 27 | Живея и дишам с тази надежда | ||
| 28 | Някога пак да си тук""" | 28 | Някога пак да си тук""" | ||
| 29 | ) | 29 | ) | ||
| 30 | 30 | ||||
| 31 | with patch("builtins.open", mock_open(read_data=mock_invalid_recipe)): | 31 | with patch("builtins.open", mock_open(read_data=mock_invalid_recipe)): | ||
| 32 | self.assertFalse(validate_recipe("pak_hacknah_vi.txt")) | 32 | self.assertFalse(validate_recipe("pak_hacknah_vi.txt")) | ||
| 33 | 33 | ||||
| 34 | def test_bad_recipe_file(self): | 34 | def test_bad_recipe_file(self): | ||
| 35 | with patch("builtins.open", side_effect=OSError("Тук ви шаня, пазя си шарана!")): | 35 | with patch("builtins.open", side_effect=OSError("Тук ви шаня, пазя си шарана!")): | ||
| 36 | with self.assertRaises(RuinedNikuldenDinnerError): | 36 | with self.assertRaises(RuinedNikuldenDinnerError): | ||
| 37 | validate_recipe("pak_pak_vi_hacknah.txt") | 37 | validate_recipe("pak_pak_vi_hacknah.txt") | ||
| t | t | 38 | |||
| 39 | with patch("builtins.open", side_effect=IOError("Тук ви шаня, пазя си шарана!")): | ||||
| 40 | with self.assertRaises(RuinedNikuldenDinnerError): | ||||
| 41 | validate_recipe("pak_pak_vi_hacknah.txt") | ||||
| 38 | 42 | ||||
| 39 | if __name__ == "__main__": | 43 | if __name__ == "__main__": | ||
| 40 | unittest.main() | 44 | unittest.main() |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
07.12.2024 13:16