diff --git a/test/test_module_phonebook.py b/test/test_module_phonebook.py new file mode 100644 index 0000000000000000000000000000000000000000..d79517f47c9546480ede5f7000ba294d13e454d7 --- /dev/null +++ b/test/test_module_phonebook.py @@ -0,0 +1,146 @@ +"""Test module_phonebook.py.""" + +import unittest +from PySide2.QtGui import qApp, QKeySequence +from PySide2.QtCore import Qt, QTimer +from PySide2.QtTest import QTest +from PySide2.QtWidgets import QApplication, QCheckBox, QPushButton +from soitool.soi import SOI +from soitool.modules.module_phonebook import ( + PhonebookModule, + ColumnsChoicePopup, +) + + +if isinstance(qApp, type(None)): + app = QApplication([]) +else: + app = qApp + + +class TestPhonebokkModule(unittest.TestCase): + """TestCase for plane PhonebookModul.""" + + def setUp(self): + """Prepare a plane PhonebookModule.""" + self.phonebook = PhonebookModule() + self.phonebook.show() + + def test_header(self): + """Test header is correct.""" + self.assertEqual(self.phonebook.header.text(), "Telefonliste") + + def test_type_table(self): + """Test able to type in table and resize to content.""" + rambo_quote = "Live for nothing or die for something." + self.phonebook.table.setCurrentCell(1, 0) + QTest.keyClicks(self.phonebook.table, rambo_quote) + print(self.phonebook.table.currentItem().text()) + + # TODO + + def test_popup(self): + """Test popup is shown and i able to edit columns.""" + old_column_count = visible_columns_in(self.phonebook.table) + + def popup_action(): + popup = app.activeModalWidget().layout() + + for item_index in range(popup.count()): + current_item = popup.itemAt(item_index).widget() + if ( + isinstance(current_item, QCheckBox) + and current_item.text() == "E-post" + ): + current_item.setChecked(True) + elif isinstance(current_item, QPushButton): + QTest.mouseClick(current_item, Qt.LeftButton) + + QTimer.singleShot(0, popup_action) + + QTest.keySequence( + self.phonebook, QKeySequence(Qt.ControlModifier + Qt.Key_R) + ) + new_column_count = visible_columns_in(self.phonebook.table) + self.assertEqual(new_column_count, old_column_count + 1) + + def test_add_row(self): + """Test adding row.""" + old_row_count = self.phonebook.table.rowCount() + QTest.keySequence( + self.phonebook, QKeySequence(Qt.ControlModifier + Qt.Key_Plus) + ) + new_row_count = self.phonebook.table.rowCount() + self.assertEqual(new_row_count, old_row_count + 1) + + def test_remove_row(self): + """Test removing row.""" + self.phonebook.table.setRowCount(self.phonebook.table.rowCount() + 1) + old_row_count = self.phonebook.table.rowCount() + self.phonebook.table.setCurrentCell(1, 0) + QTest.keySequence( + self.phonebook, QKeySequence(Qt.ControlModifier + Qt.Key_Minus), + ) + new_row_count = self.phonebook.table.rowCount() + self.assertEqual(new_row_count, old_row_count - 1) + + def test_add_to_soi_smoke_test(self): + """Test that can add to SOI sccessfully.""" + soi = SOI() + test_name = "Test name" + soi.add_module(test_name, self.phonebook, False) + self.assertTrue(soi.module_name_taken(test_name)) + + +class TestPhonebookModuleWithDataParameter(unittest.TestCase): + """TestCase for PhoneBook with content preset.""" + + def setUp(self): + """Prepare a phonebook with preloaded content.""" + self.data = { + "Funksjon": ["Colonel Sam", "Rambo", ""], + "E-post": ["sam@usarmy.com", "muscle@guns.com", ""], + } + self.phonebook = PhonebookModule(data=self.data) + self.phonebook.show() + + def test_column_count(self): + """Test number of visible columns is correct.""" + self.assertEqual( + len(self.data), visible_columns_in(self.phonebook.table) + ) + + def test_content(self): + """Test content is loaded correctly.""" + for column_index in range(self.phonebook.table.columnCount()): + self.phonebook.table.setCurrentCell(0, column_index) + column_header = self.phonebook.table.currentItem().text() + if not self.phonebook.table.isColumnHidden(column_index): + for row_index in range(1, self.phonebook.table.rowCount()): + self.phonebook.table.setCurrentCell( + row_index, column_index + ) + current_text = self.phonebook.table.currentItem().text() + self.assertEqual( + current_text, self.data[column_header][row_index - 1] + ) + + +def visible_columns_in(table): + """Count number of visible columns in a table. + + Parameters + ---------- + table : QTableWidget + The table to count visible columns in. + + Returns + ------- + counter : int + Number of visible columns in table. + """ + counter = 0 + for column_index in range(table.columnCount()): + if not table.isColumnHidden(column_index): + counter += 1 + return counter