/
megaokna43
/
courses_4
Обзор
Документация
Войти
/
megaokna43
/
courses_4
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
tests/test_json_worker.py
155 строк
8 KB
megaokna43
проверил работу кода и тестов
14 дек 2024, 21:51
14 дек 2024, 21:51
dda6769
Код
Авторство
О чём код?
import pytest import json import os from src.json_worker import JSON_Worker # импортирую класс JSON_Worker, содержащий функции для тестирования from src.vacancy import Vacancy def test_init_default_file_name(): # тестирую передачу файла пользователя класса JSON_Worker file_name = "test_vacancies.json" obj = JSON_Worker(file_name) # Проверяем, что классе JSON_Worker есть метод для получения имени файла assert obj.get_file_name() == file_name # Проверяем значение атрибута через метод def test_init_invalid_file_name(): # тестирую неверные аргументы класса JSON_Worker with pytest.raises(TypeError): JSON_Worker(123) # передача невалидного типа аргумента def test_save_vacancy_new_file(): if not os.path.exists("Test_data"): # Проверяем, существует ли директория, если нет, создаем ее os.makedirs("Test_data") worker = JSON_Worker("Test_data/test_vacancies.json") # Создаю экземпляр класса JSON_Worker с правильным путем vacancy = Vacancy( name='Бухгалтер', city='Барнаул', salary_from=60000, # Передаем как число salary_to=80000, # Передаем как число url='https://hh.ru/vacancy/112734079', description='Контроль дебиторской задолженности.' ) # Создаем вакансию worker.save_vacancy([vacancy]) # Сохраняем вакансию в файл assert os.path.exists("Test_data/test_vacancies.json") # Проверяем, что файл существует with open("Test_data/test_vacancies.json", 'r', encoding="utf-8") as file: # Читаем данные из файла data = json.load(file) # Проверяем, что данные сохранены правильно assert len(data) == 1 assert data[0]["name"] == "Бухгалтер" assert data[0]["city"] == "Барнаул" assert data[0]["salary_from"] == 60000 # Проверяем как число assert data[0]["salary_to"] == 80000 # Проверяем как число assert data[0]["url"] == "https://hh.ru/vacancy/112734079" assert data[0]["description"] == "Контроль дебиторской задолженности." # Удаляем файл после теста try: os.remove("Test_data/vacancies.json") except OSError as e: print(f"Ошибка при удалении файла: {e}") def test_save_vacancy_existing_file(): if not os.path.exists("Test_data"): # Проверяем, существует ли директория, если нет, создаем ее os.makedirs("Test_data") worker = JSON_Worker("Test_data/test_two_vacancies.json") # Создаю экземпляр класса JSON_Worker с правильным путем # Создаем вакансии vacancy1 = Vacancy('Бухгалтер', 'Барнаул', 60000, 80000, 'https://hh.ru/vacancy/112734079', 'Контроль дебиторской задолженности.') vacancy2 = Vacancy('Бухгалтер', 'Гомель', 1000, 1500, 'https://hh.ru/vacancy/112621234', 'Оприходование товаров.') worker.save_vacancy([vacancy1]) # Сохраняем первую вакансию в файл worker.save_vacancy([vacancy2]) # Сохраняем вторую вакансию в файл assert os.path.exists("Test_data/test_two_vacancies.json") # Проверяем, что файл существует with open("Test_data/test_two_vacancies.json", 'r', encoding="utf-8") as file: # Читаем данные из файла data = json.load(file) # Проверяем, что данные сохранены правильно assert len(data) == 2 assert data[0]["name"] == "Бухгалтер" assert data[0]["city"] == "Барнаул" assert data[0]["salary_from"] == 60000 assert data[0]["salary_to"] == 80000 assert data[0]["url"] == "https://hh.ru/vacancy/112734079" assert data[0]["description"] == "Контроль дебиторской задолженности." assert data[1]["name"] == "Бухгалтер" assert data[1]["city"] == "Гомель" assert data[1]["salary_from"] == 1000 assert data[1]["salary_to"] == 1500 assert data[1]["url"] == "https://hh.ru/vacancy/112621234" assert data[1]["description"] == "Оприходование товаров." # os.remove("Test_data/test_two_vacancies.json") # Удаляем файл def test_save_vacancy_duplicate(): worker = JSON_Worker("Test_data/duplicate_vacancies.json") # Создаем экземпляр класса JSON_Worker vacancy = Vacancy('Бухгалтер', 'Гомель', 1000, 1500, 'https://hh.ru/vacancy/112621234', 'Оприходование товаров.') # Создаем вакансию worker.save_vacancy([vacancy]) # Сохраняем вакансию в файл worker.save_vacancy([vacancy]) # Сохраняем дубликат вакансии в файл assert os.path.exists("Test_data/duplicate_vacancies.json") # Проверяем, что файл существует # Читаем данные из файла with open("Test_data/duplicate_vacancies.json", 'r', encoding="utf-8") as file: data = json.load(file) # Проверяем, что данные сохранены правильно assert len(data) == 1 assert data[0]["name"] == "Бухгалтер" assert data[0]["city"] == "Гомель" assert data[0]["salary_from"] == 1000 assert data[0]["salary_to"] == 1500 assert data[0]["url"] == "https://hh.ru/vacancy/112621234" assert data[0]["description"] == "Оприходование товаров." # os.remove("Test_data/duplicate_vacancies.json") # Удаляем файл class TestVacancyDeleter: def setup_method(self): self.file_name = 'test_vacancies.json' self.deleter = JSON_Worker(self.file_name) self.create_test_file() def teardown_method(self): os.remove(self.file_name) def create_test_file(self): data = [ {"url": "https://example.com/vacancy1"}, {"url": "https://example.com/vacancy2"}, {"url": "https://example.com/vacancy3"} ] with open(self.file_name, 'w', encoding="utf-8") as file: json.dump(data, file, indent=4, ensure_ascii=False) def test_delete_vacancy_found(self): url = "https://example.com/vacancy2" self.deleter.delete_vacancy(url) with open(self.file_name, 'r', encoding="utf-8") as file: data = json.load(file) assert len(data) == 2 assert url not in [vacancy["url"] for vacancy in data] def test_delete_vacancy_not_found(self): url = "https://example.com/nonexistent" self.deleter.delete_vacancy(url) with open(self.file_name, 'r', encoding="utf-8") as file: data = json.load(file) assert len(data) == 3 assert data == [ {"url": "https://example.com/vacancy1"}, {"url": "https://example.com/vacancy2"}, {"url": "https://example.com/vacancy3"} ] def test_delete_vacancy_file_not_found(self): self.deleter.file_name = 'nonexistent_file.json' url = "https://example.com/vacancy2" self.deleter.delete_vacancy(url) assert not os.path.exists(self.deleter.file_name)