Skip to content

Commit

Permalink
feat: added more callback tests
Browse files Browse the repository at this point in the history
  • Loading branch information
iamgiolaga committed Nov 3, 2024
1 parent 5ac0bd8 commit da0c5a7
Show file tree
Hide file tree
Showing 2 changed files with 140 additions and 2 deletions.
1 change: 1 addition & 0 deletions callbacks/set_day.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ def set_day(update: Update, context: CallbackContext):
context.bot.send_message(chat_id=update.effective_chat.id, parse_mode='markdown', text=escape_markdown(answer))
players, day, time, target, default_message, pitch, _, bot_last_message_id = find_all_info_by_chat_id(chat_id)
current_situation = format_summary(players, day, time, target, default_message, pitch)

if bot_last_message_id is None:
msg = print_new_summary(current_situation, update, context)
update_bot_last_message_id_on_db(chat_id, msg.message_id)
Expand Down
141 changes: 139 additions & 2 deletions test/test_callbacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from callbacks.help_func import help_func
from callbacks.participants import participants
from callbacks.set_day import set_day
from callbacks.set_description import set_description

class TestCallbacks(unittest.TestCase):

Expand Down Expand Up @@ -122,8 +123,8 @@ def test_set_day(self, mock_find_row_by_chat_id, mock_update_day_on_db, mock_get
mock_find_row_by_chat_id.reset_mock()
mock_context.bot.send_message.reset_mock()

# Test case 3: valid arguments provided
with self.subTest("Valid arguments provided"):
# Test case 3: valid arguments provided and print new summary
with self.subTest("Valid arguments provided and print new summary"):
mock_find_row_by_chat_id.return_value = "row"
mock_context.args = ["Monday"]
mock_find_all_info_by_chat_id.return_value = ("player1, player2", "Monday", "20:00", "10", "default_message", "pitch", None, None)
Expand All @@ -147,5 +148,141 @@ def test_set_day(self, mock_find_row_by_chat_id, mock_update_day_on_db, mock_get
)
mock_update_bot_last_message_id_on_db.assert_called_once_with(mock_update.message.chat_id, 123)

# Reset mocks for the next subtest
mock_find_row_by_chat_id.reset_mock()
mock_context.bot.send_message.reset_mock()
mock_update_day_on_db.reset_mock()
mock_get_sender_name.reset_mock()
mock_find_all_info_by_chat_id.reset_mock()
mock_format_summary.reset_mock()
mock_print_new_summary.reset_mock()
mock_update_bot_last_message_id_on_db.reset_mock()

# Test case 4: valid arguments provided and edit summary
with self.subTest("Valid arguments provided and edit summary"):
mock_find_row_by_chat_id.return_value = "row"
mock_context.args = ["Monday"]
mock_find_all_info_by_chat_id.return_value = ("player1, player2", "Monday", "20:00", "10", "default_message", "pitch", None, 123)
mock_format_summary.return_value = "formatted_summary"
mock_print_new_summary.return_value = MagicMock(message_id=123)
mock_get_sender_name.return_value = "John"

set_day(mock_update, mock_context)

mock_find_row_by_chat_id.assert_called_once_with(mock_update.message.chat_id)
mock_update_day_on_db.assert_called_once_with(mock_update.message.chat_id, "Monday")
mock_get_sender_name.assert_called_once_with(mock_update)
self.assertEqual(mock_find_all_info_by_chat_id.call_count, 2)
mock_find_all_info_by_chat_id.assert_called_with(mock_update.message.chat_id)
mock_format_summary.assert_called_once_with("player1, player2", "Monday", "20:00", "10", "default_message", "pitch")
mock_print_new_summary.assert_not_called()
mock_context.bot.send_message.assert_called_with(
chat_id=mock_update.effective_chat.id,
parse_mode='markdown',
text="Ok, @John! Ho impostato il giorno della partita il Monday"
)
mock_update_bot_last_message_id_on_db.assert_not_called()

@patch('callbacks.set_description.update_bot_last_message_id_on_db')
@patch('callbacks.set_description.print_new_summary')
@patch('callbacks.set_description.format_summary')
@patch('callbacks.set_description.find_all_info_by_chat_id')
@patch('callbacks.set_description.get_sender_name')
@patch('callbacks.set_description.update_description_on_db')
@patch('callbacks.set_description.find_row_by_chat_id')
def test_set_description(self, mock_find_row_by_chat_id, mock_update_description_on_db, mock_get_sender_name, mock_find_all_info_by_chat_id, mock_format_summary, mock_print_new_summary, mock_update_bot_last_message_id_on_db):
mock_update = MagicMock()
mock_context = MagicMock()

# Test case 1: row is None
with self.subTest("Row is None"):
mock_find_row_by_chat_id.return_value = None
set_description(mock_update, mock_context)
mock_find_row_by_chat_id.assert_called_once_with(mock_update.message.chat_id)
mock_context.bot.send_message.assert_called_once_with(
chat_id=mock_update.effective_chat.id,
parse_mode='markdown',
text="Prima di iniziare con le danze, avvia una partita, per farlo usa /start"
)

# Reset mocks for the next subtest
mock_find_row_by_chat_id.reset_mock()
mock_context.bot.send_message.reset_mock()

# Test case 2: no arguments provided
with self.subTest("No arguments provided"):
mock_find_row_by_chat_id.return_value = "row"
mock_context.args = []
set_description(mock_update, mock_context)
mock_find_row_by_chat_id.assert_called_once_with(mock_update.message.chat_id)
mock_context.bot.send_message.assert_called_once_with(
chat_id=mock_update.effective_chat.id,
parse_mode='markdown',
text="Non hai inserito la descrizione: scrivi /setdescription <descrizione>"
)

# Reset mocks for the next subtest
mock_find_row_by_chat_id.reset_mock()
mock_context.bot.send_message.reset_mock()

# Test case 3: valid arguments provided and print new summary
with self.subTest("Valid arguments provided and print new summary"):
mock_find_row_by_chat_id.return_value = "row"
mock_context.args = ["This is a description"]
mock_find_all_info_by_chat_id.return_value = ("player1, player2", "day", "time", "target", "default_message", "pitch", None, None)
mock_format_summary.return_value = "formatted_summary"
mock_print_new_summary.return_value = MagicMock(message_id=123)
mock_get_sender_name.return_value = "John"

set_description(mock_update, mock_context)

mock_find_row_by_chat_id.assert_called_once_with(mock_update.message.chat_id)
mock_update_description_on_db.assert_called_once_with(mock_update.message.chat_id, "This is a description\n")
mock_get_sender_name.assert_called_once_with(mock_update)
mock_find_all_info_by_chat_id.assert_called_once_with(mock_update.message.chat_id)
mock_format_summary.assert_called_once_with("player1, player2", "day", "time", "target", "default_message", "pitch")
mock_print_new_summary.assert_called_once_with("formatted_summary", mock_update, mock_context)
mock_context.bot.send_message.assert_called_with(
chat_id=mock_update.effective_chat.id,
parse_mode='markdown',
text="Ok, @John! Ho aggiornato la descrizione!"
)
mock_update_bot_last_message_id_on_db.assert_called_once_with(mock_update.message.chat_id, 123)

# Reset mocks for the next subtest
mock_find_row_by_chat_id.reset_mock()
mock_context.bot.send_message.reset_mock()
mock_update_description_on_db.reset_mock()
mock_get_sender_name.reset_mock()
mock_find_all_info_by_chat_id.reset_mock()
mock_format_summary.reset_mock()
mock_print_new_summary.reset_mock()
mock_update_bot_last_message_id_on_db.reset_mock()

# Test case 4: valid arguments provided and edit summary
with self.subTest("Valid arguments provided and edit summary"):
mock_find_row_by_chat_id.return_value = "row"
mock_context.args = ["This is a description"]
mock_find_all_info_by_chat_id.return_value = ("player1, player2", "day", "time", "target", "default_message", "pitch", None, 123)
mock_format_summary.return_value = "formatted_summary"
mock_print_new_summary.return_value = MagicMock(message_id=123)
mock_get_sender_name.return_value = "John"

set_description(mock_update, mock_context)

mock_find_row_by_chat_id.assert_called_once_with(mock_update.message.chat_id)
mock_update_description_on_db.assert_called_once_with(mock_update.message.chat_id, "This is a description\n")
mock_get_sender_name.assert_called_once_with(mock_update)
mock_find_all_info_by_chat_id.assert_called_once_with(mock_update.message.chat_id)
mock_format_summary.assert_called_once_with("player1, player2", "day", "time", "target", "default_message", "pitch")
mock_print_new_summary.assert_not_called()
mock_context.bot.send_message.assert_called_with(
chat_id=mock_update.effective_chat.id,
parse_mode='markdown',
text="Ok, @John! Ho aggiornato la descrizione!"
)
mock_update_bot_last_message_id_on_db.assert_not_called()


if __name__ == '__main__':
unittest.main()

0 comments on commit da0c5a7

Please sign in to comment.