feat: enhance DataListStudentShort with data preparation methods and add unit tests

lab4
Artem-Darius Weber 3 months ago
parent 3aee775190
commit 16b81a879f

@ -1,21 +1,54 @@
require_relative 'data_table'
require_relative './data_table'
class DataListStudentShort < DataList
def initialize(items)
super(items.select { |item| item.is_a?(StudentShort) })
end
def get_names
['№', 'Фамилия и инициалы', 'Телефон', 'Telegram', 'Email']
column_names
end
def get_data
data = @items.each_with_index.map do |student, index|
[
index + 1, # id
student.surname_initials, # Фамилия и инициалы
student.phone || '-', # Телефон (или прочерк)
student.telegram || '-', # Telegram (или прочерк)
student.email || '-' # Email (или прочерк)
]
data = prepare_table_data
DataTable.new(data)
end
private
def column_names
['№', 'Фамилия и инициалы', 'Телефон', 'Telegram', 'Email']
end
def prepare_table_data
@items.each_with_index.map do |item, index|
prepare_row(item, index)
end
end
DataTable.new(data)
def prepare_row(item, index)
[
index + 1, # id
item.surname_initials, # Фамилия и инициалы
item.phone || '-', # Телефон (или прочерк)
item.telegram || '-', # Telegram (или прочерк)
item.email || '-' # Email (или прочерк)
]
end
def extract_surname_initials(item)
item.respond_to?(:surname_initials) ? item.surname_initials : 'N/A'
end
def extract_phone(item)
item.respond_to?(:phone) ? item.phone : nil
end
def extract_telegram(item)
item.respond_to?(:telegram) ? item.telegram : nil
end
def extract_email(item)
item.respond_to?(:email) ? item.email : nil
end
end

@ -0,0 +1,54 @@
require 'minitest/autorun'
require_relative '../data_list_student_short'
require_relative '../student_short'
class TestDataListStudentShort < Minitest::Test
def setup
@students = [
StudentShort.new(id: '1', surname_initials: 'Иванов И.И.', phone: '+79991112233'),
StudentShort.new(id: '2', surname_initials: 'Петров П.П.', telegram: '@petrov'),
StudentShort.new(id: '3', surname_initials: 'Сидоров С.С.', email: 'sidorov@mail.ru')
]
@data_list = DataListStudentShort.new(@students)
end
def test_get_names
assert_equal ['№', 'Фамилия и инициалы', 'Телефон', 'Telegram', 'Email'],
@data_list.get_names
end
def test_get_data
table = @data_list.get_data
assert_equal 3, table.rows_count
assert_equal 5, table.columns_count
assert_equal 1, table.item(0, 0)
assert_equal 'Иванов И.И.', table.item(0, 1)
assert_equal '+79991112233', table.item(0, 2)
assert_equal '-', table.item(0, 3)
assert_equal '-', table.item(0, 4)
assert_equal '-', table.item(1, 2)
assert_equal '@petrov', table.item(1, 3)
end
def test_selection_functionality
@data_list.select(0)
@data_list.select(2)
assert_equal [0, 2], @data_list.get_selected
end
def test_invalid_data_handling
invalid_students = [
{ id: '1', name: 'Иванов И.И.', phone: '+79991112233' },
StudentShort.new(id: '2', surname_initials: 'Петров П.П.', telegram: '@petrov')
]
data_list = DataListStudentShort.new(invalid_students)
table = data_list.get_data
assert_equal 'N/A', table.item(0, 1)
assert_equal '-', table.item(0, 3)
end
end
Loading…
Cancel
Save