diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9780500 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "python.testing.unittestArgs": [ + "-v", + "-s", + "./tests", + "-p", + "*test.py" + ], + "python.testing.pytestEnabled": false, + "python.testing.unittestEnabled": true +} \ No newline at end of file diff --git a/src/main.py b/src/main.py index b251742..1dcff5f 100644 --- a/src/main.py +++ b/src/main.py @@ -1,18 +1,24 @@ import os +import logging -def clean_temp_folder(): - temp_folder = os.environ.get('TEMP') - if temp_folder: - print(f"Cleaning Temp folder: {temp_folder}") - for root, dirs, files in os.walk(temp_folder): - for file in files: - try: - os.remove(os.path.join(root, file)) - except Exception as e: - print(f"Error deleting {file}: {e}") - print("Temp folder has been cleaned.") - else: - print("Temp folder not found.") +class TempFolderCleaner: + def __init__(self): + self.temp_folder = os.environ.get('TEMP') + logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + + def clean_temp_folder(self): + if self.temp_folder: + logging.info(f"Очистка папки Temp: {self.temp_folder}") + for root, dirs, files in os.walk(self.temp_folder): + for file in files: + try: + os.remove(os.path.join(root, file)) + except Exception as e: + logging.error(f"Ошибка при удалении {file}: {e}") + logging.info("Папка Temp очищена.") + else: + logging.warning("Папка Temp не найдена.") if __name__ == "__main__": - clean_temp_folder() \ No newline at end of file + cleaner = TempFolderCleaner() + cleaner.clean_temp_folder() \ No newline at end of file diff --git a/tests/test_main.py b/tests/test_main.py index fd26cd6..fbb6742 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -1,13 +1,60 @@ import os import unittest -from src.main import clean_temp_folder +from unittest.mock import patch, MagicMock +from src.main import TempFolderCleaner class TestCleanTempFolder(unittest.TestCase): - def test_clean_temp_folder(self): - # Здесь можно добавить тесты для проверки работы функции clean_temp_folder - # Например, можно использовать mock для проверки удаления файлов - pass + @patch('src.main.os.environ.get') + @patch('src.main.os.walk') + @patch('src.main.os.remove') + def test_clean_temp_folder(self, mock_remove, mock_walk, mock_get_env): + # Настройка тестовой среды + mock_get_env.return_value = '/mock/temp' + mock_walk.return_value = [ + ('/mock/temp', ('subdir',), ('file1.txt', 'file2.txt')), + ('/mock/temp/subdir', (), ('file3.txt',)) + ] + + cleaner = TempFolderCleaner() + cleaner.clean_temp_folder() + + # Проверка, что os.remove был вызван для каждого файла + mock_remove.assert_any_call('/mock/temp/file1.txt') + mock_remove.assert_any_call('/mock/temp/file2.txt') + mock_remove.assert_any_call('/mock/temp/subdir/file3.txt') + self.assertEqual(mock_remove.call_count, 3) + + @patch('src.main.os.environ.get') + @patch('src.main.os.walk') + @patch('src.main.os.remove') + def test_clean_temp_folder_with_errors(self, mock_remove, mock_walk, mock_get_env): + # Настройка тестовой среды + mock_get_env.return_value = '/mock/temp' + mock_walk.return_value = [ + ('/mock/temp', ('subdir',), ('file1.txt', 'file2.txt')), + ('/mock/temp/subdir', (), ('file3.txt',)) + ] + mock_remove.side_effect = [None, Exception("Ошибка удаления"), None] + + cleaner = TempFolderCleaner() + cleaner.clean_temp_folder() + + # Проверка, что os.remove был вызван для каждого файла и обработка ошибок + mock_remove.assert_any_call('/mock/temp/file1.txt') + mock_remove.assert_any_call('/mock/temp/file2.txt') + mock_remove.assert_any_call('/mock/temp/subdir/file3.txt') + self.assertEqual(mock_remove.call_count, 3) + + @patch('src.main.os.environ.get') + def test_temp_folder_not_found(self, mock_get_env): + # Настройка тестовой среды + mock_get_env.return_value = None + + cleaner = TempFolderCleaner() + with self.assertLogs(level='WARNING') as log: + cleaner.clean_temp_folder() + self.assertIn('Папка Temp не найдена.', log.output[0]) if __name__ == '__main__': unittest.main() \ No newline at end of file diff --git a/workflows/Lint_Code_Base.yml b/workflows/Lint_Code_Base.yml new file mode 100644 index 0000000..57e9424 --- /dev/null +++ b/workflows/Lint_Code_Base.yml @@ -0,0 +1,25 @@ +name: Lint Code Base + +on: [push, pull_request] + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.9' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 + + - name: Run flake8 + run: | + flake8 src/ tests/ \ No newline at end of file