diff --git a/Address-Book/test_AddressbookCreateTask.py.invalid b/Address-Book/test_AddressbookCreateTask.py.invalid new file mode 100644 index 0000000000..ab68afc92a --- /dev/null +++ b/Address-Book/test_AddressbookCreateTask.py.invalid @@ -0,0 +1,87 @@ +import unittest +from unittest.mock import patch, MagicMock +from tkinter import Toplevel, Label, Button +from Address-Book.addressbook import create_task + +class Test_AddressbookCreateTask(unittest.TestCase): + + @patch('Address-Book.addressbook.conn') + @patch('Address-Book.addressbook.Name') + @patch('Address-Book.addressbook.Number') + @patch('Address-Book.addressbook.list_of_names', new_callable=list) + @patch('Address-Book.addressbook.onClickAdded') + def test_add_new_task_with_valid_data(self, mock_onClickAdded, mock_list_of_names, mock_Number, mock_Name, mock_conn): + mock_Name.get.return_value = "John Doe" + mock_Number.get.return_value = "1234567890" + mock_list_of_names.clear() + + mock_cursor = MagicMock() + mock_conn.cursor.return_value = mock_cursor + mock_cursor.lastrowid = 1 + + result = create_task() + + mock_onClickAdded.assert_called_once() + mock_cursor.execute.assert_called_once_with(''' INSERT INTO tasks(name,status_id) VALUES(?,?) ''', ("John Doe", "1234567890")) + self.assertEqual(result, 1) + + @patch('Address-Book.addressbook.Name') + @patch('Address-Book.addressbook.Number') + @patch('Address-Book.addressbook.Toplevel') + def test_add_task_with_empty_name(self, mock_Toplevel, mock_Number, mock_Name): + mock_Name.get.return_value = "" + mock_Number.get.return_value = "1234567890" + + create_task() + + mock_Toplevel.assert_called_once() + top_instance = mock_Toplevel.return_value + top_instance.geometry.assert_called_once_with('180x100') + top_instance.destroy.assert_not_called() + + @patch('Address-Book.addressbook.Name') + @patch('Address-Book.addressbook.Number') + @patch('Address-Book.addressbook.Toplevel') + def test_add_task_with_invalid_phone_number(self, mock_Toplevel, mock_Number, mock_Name): + mock_Name.get.return_value = "John Doe" + mock_Number.get.return_value = "12345" + + create_task() + + mock_Toplevel.assert_called_once() + top_instance = mock_Toplevel.return_value + top_instance.geometry.assert_called_once_with('180x100') + top_instance.destroy.assert_not_called() + + @patch('Address-Book.addressbook.Name') + @patch('Address-Book.addressbook.Number') + @patch('Address-Book.addressbook.list_of_names', new_callable=list) + @patch('Address-Book.addressbook.Toplevel') + def test_add_task_with_existing_name(self, mock_Toplevel, mock_list_of_names, mock_Number, mock_Name): + mock_Name.get.return_value = "John Doe" + mock_Number.get.return_value = "1234567890" + mock_list_of_names.append("John Doe") + + create_task() + + mock_Toplevel.assert_called_once() + top_instance = mock_Toplevel.return_value + top_instance.geometry.assert_called_once_with('180x100') + top_instance.destroy.assert_not_called() + + @patch('Address-Book.addressbook.Name') + @patch('Address-Book.addressbook.Number') + @patch('Address-Book.addressbook.Toplevel') + def test_add_task_with_empty_name_and_invalid_phone(self, mock_Toplevel, mock_Number, mock_Name): + mock_Name.get.return_value = "" + mock_Number.get.return_value = "12345" + + create_task() + + mock_Toplevel.assert_called_once() + top_instance = mock_Toplevel.return_value + top_instance.geometry.assert_called_once_with('180x100') + top_instance.destroy.assert_not_called() + +if __name__ == '__main__': + unittest.main() diff --git a/Address-Book/test_AddressbookOnClickAdded.py.invalid b/Address-Book/test_AddressbookOnClickAdded.py.invalid new file mode 100644 index 0000000000..085d71f4b2 --- /dev/null +++ b/Address-Book/test_AddressbookOnClickAdded.py.invalid @@ -0,0 +1,71 @@ +import unittest +from unittest.mock import patch +from tkinter import StringVar +import tkinter.messagebox +from Address-Book.addressbook import onClickAdded + +class Test_AddressbookOnClickAdded(unittest.TestCase): + + @patch('tkinter.messagebox.showinfo') + def test_message_box_display_with_correct_name(self, mock_showinfo): + # Arrange + Name = StringVar() + Name.set("John Doe") + + # Act + onClickAdded() + + # Assert + mock_showinfo.assert_called_once_with(" ", "John Doe got added") + + @patch('tkinter.messagebox.showinfo') + def test_handle_empty_name_variable(self, mock_showinfo): + # Arrange + Name = StringVar() + Name.set("") + + # Act + onClickAdded() + + # Assert + mock_showinfo.assert_called_once_with(" ", " got added") + + @patch('tkinter.messagebox.showinfo') + def test_handle_special_characters_in_name(self, mock_showinfo): + # Arrange + Name = StringVar() + Name.set("!@#$%^&*") + + # Act + onClickAdded() + + # Assert + mock_showinfo.assert_called_once_with(" ", "!@#$%^&* got added") + + @patch('tkinter.messagebox.showinfo') + def test_handle_long_names(self, mock_showinfo): + # Arrange + Name = StringVar() + long_name = "A" * 1000 # TODO: Adjust the length if necessary + Name.set(long_name) + + # Act + onClickAdded() + + # Assert + mock_showinfo.assert_called_once_with(" ", f"{long_name} got added") + + @patch('tkinter.messagebox.showinfo') + def test_non_string_name_handling(self, mock_showinfo): + # Arrange + Name = StringVar() + Name.set(12345) # TODO: Change to a non-string type if needed + + # Act + onClickAdded() + + # Assert + mock_showinfo.assert_called_once_with(" ", "12345 got added") + +if __name__ == '__main__': + unittest.main() diff --git a/Address-Book/test_AddressbookOnClickDeleted.py.invalid b/Address-Book/test_AddressbookOnClickDeleted.py.invalid new file mode 100644 index 0000000000..336a0d2350 --- /dev/null +++ b/Address-Book/test_AddressbookOnClickDeleted.py.invalid @@ -0,0 +1,68 @@ +import unittest +from unittest.mock import patch +from tkinter import StringVar +import tkinter.messagebox +from Address-Book.addressbook import onClickDeleted + +class Test_AddressbookOnClickDeleted(unittest.TestCase): + + @patch('tkinter.messagebox.showinfo') + def test_message_box_display_with_correct_name(self, mock_showinfo): + # Arrange + Name.set("John Doe") + + # Act + onClickDeleted() + + # Assert + mock_showinfo.assert_called_with(" ", "John Doe got deleted") + + @patch('tkinter.messagebox.showinfo') + def test_handle_empty_name_gracefully(self, mock_showinfo): + # Arrange + Name.set("") + + # Act + onClickDeleted() + + # Assert + mock_showinfo.assert_called_with(" ", " got deleted") + + @patch('tkinter.messagebox.showinfo') + def test_special_characters_in_name(self, mock_showinfo): + # Arrange + Name.set("J@hn D#e!") + + # Act + onClickDeleted() + + # Assert + mock_showinfo.assert_called_with(" ", "J@hn D#e! got deleted") + + @patch('tkinter.messagebox.showinfo') + def test_long_names(self, mock_showinfo): + # Arrange + long_name = "A" * 1000 # TODO: Adjust the length if needed + Name.set(long_name) + + # Act + onClickDeleted() + + # Assert + mock_showinfo.assert_called_with(" ", f"{long_name} got deleted") + + def test_function_does_not_alter_name_object(self): + # Arrange + original_name = "John Doe" + Name.set(original_name) + + # Act + onClickDeleted() + + # Assert + self.assertEqual(Name.get(), original_name) + +if __name__ == '__main__': + # Initialize the Name variable for testing + Name = StringVar() + unittest.main() diff --git a/requirements-roost.txt b/requirements-roost.txt new file mode 100644 index 0000000000..55b033e901 --- /dev/null +++ b/requirements-roost.txt @@ -0,0 +1 @@ +pytest \ No newline at end of file