You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kubsu-sm5-ruby/lab2/tests/test_students_list_json.rb

167 lines
6.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# test_students_list_json.rb
require 'minitest/autorun'
require 'json'
require 'date'
require_relative '../students_list_json'
require_relative '../student'
require_relative '../student_short'
class TestStudentsListJSON < Minitest::Test
TEMP_FILE = 'temp_students.json'
def setup
# Удаляем временный файл перед каждым тестом, если он существует
File.delete(TEMP_FILE) if File.exist?(TEMP_FILE)
@students_list = Students_list_JSON.new(TEMP_FILE)
# Создаём несколько объектов Student для тестирования
@student1 = Student.new(
id: "1",
git: "https://github.com/test1",
surname: "Иванов",
name: "Иван",
patronymic: "Иванович",
birth_date: Date.new(2000, 1, 1),
phone: "+123456789",
telegram: "@test1",
email: "test1@example.com"
)
@student2 = Student.new(
id: "2",
git: "https://github.com/test2",
surname: "Петров",
name: "Пётр",
patronymic: "Петрович",
birth_date: Date.new(1999, 2, 2),
phone: "+987654321",
telegram: "@test2",
email: "test2@example.com"
)
@student3 = Student.new(
id: "3",
git: "https://github.com/test3",
surname: "Сидоров",
name: "Сидор",
patronymic: "Сидорович",
birth_date: Date.new(1998, 3, 3),
phone: "+192837465",
telegram: "@test3",
email: "test3@example.com"
)
# Добавляем студентов в список (метод add_student формирует новый ID)
@students_list.add_student(@student1)
@students_list.add_student(@student2)
@students_list.add_student(@student3)
end
def teardown
# Удаляем временный файл после тестов
File.delete(TEMP_FILE) if File.exist?(TEMP_FILE)
end
def test_save_and_load_from_file
# Сохраняем текущий список в файл
@students_list.save_to_file
# Создаём новый объект, который загрузит данные из файла
new_list = Students_list_JSON.new(TEMP_FILE)
new_list.load_from_file
# Проверяем, что количество студентов совпадает
assert_equal @students_list.get_student_short_count, new_list.get_student_short_count
# Проверяем, что данные студентов (например, фамилии и инициалы) совпадают
original_names = @students_list.students.map(&:surname_initials)
loaded_names = new_list.students.map(&:surname_initials)
assert_equal original_names.sort, loaded_names.sort
end
def test_get_student_by_id
# Предполагаем, что add_student сбросил id, поэтому ищем по id "1" (первый добавленный)
student = @students_list.get_student_by_id("1")
refute_nil student
assert_equal "Иванов И.И.", student.surname_initials
end
def test_get_k_n_student_short_list
# Тестируем получение "страницы" студентов: k = 2, n = 1 (две записи)
data_list = @students_list.get_k_n_student_short_list(2, 1)
# Ожидаем, что DataList содержит 2 элемента
assert_equal 2, data_list.get_data.rows_count
# Проверяем, что строки таблицы содержат корректное значение ФИО
first_row = data_list.get_data.item(0, 1)
refute_nil first_row
assert_match(/[А-ЯЁ][а-яё]+ [А-Я]\./, first_row)
end
def test_sort_students!
# Перемешиваем порядок студентов
@students_list.students.shuffle!
@students_list.sort_students!
sorted_names = @students_list.students.map(&:surname_initials)
# Проверяем, что список отсортирован в лексикографическом порядке
assert_equal sorted_names.sort, sorted_names
end
def test_add_student
new_student = Student.new(
id: "0", # id будет перезаписан
git: "https://github.com/test4",
surname: "Алексеев",
name: "Алексей",
patronymic: "Алексеевич",
birth_date: Date.new(2001, 4, 4),
phone: "+111222333",
telegram: "@test4",
email: "test4@example.com"
)
added_student = @students_list.add_student(new_student)
# Проверяем, что новый id сформирован корректно (будет равен max(id)+1)
expected_id = (@students_list.students.map { |s| s.id.to_i }.max).to_s
assert_equal expected_id, added_student.id
assert_equal 4, @students_list.get_student_short_count
end
def test_update_student_by_id
# Создаём нового студента для замены
updated_student = Student.new(
id: "0", # id будет перезаписан
git: "https://github.com/updated",
surname: "Обновлённый",
name: "Студент",
patronymic: "Тестович",
birth_date: Date.new(2002, 5, 5),
phone: "+444555666",
telegram: "@updated",
email: "updated@example.com"
)
# Обновляем студента с id "2"
result = @students_list.update_student_by_id("2", updated_student)
assert result
student = @students_list.get_student_by_id("2")
refute_nil student
assert_equal "Обновлённый С.Т.", student.surname_initials
assert_equal "https://github.com/updated", student.git
end
def test_delete_student_by_id
# Удаляем студента с id "1"
result = @students_list.delete_student_by_id("1")
assert result
# Проверяем, что студент с id "1" отсутствует
student = @students_list.get_student_by_id("1")
assert_nil student
# Количество студентов должно уменьшиться
assert_equal 2, @students_list.get_student_short_count
end
def test_get_student_short_count
assert_equal 3, @students_list.get_student_short_count
end
end