|
6 | 6 | from discord.app_commands import Choice |
7 | 7 |
|
8 | 8 | from src.cogs.admin.announcements import Announcements |
9 | | -from src.ui.modals.announcement import Announcement |
| 9 | +from src.ui.modals.announcement import Announcement, _format_announcement |
| 10 | + |
| 11 | + |
| 12 | +class TestAnnouncementFormatting(unittest.TestCase): |
| 13 | + def test_format_announcement_with_title_uses_single_newline(self): |
| 14 | + announcement = _format_announcement("my title", "test") |
| 15 | + |
| 16 | + self.assertEqual(announcement, "**my title**\ntest") |
| 17 | + |
| 18 | + def test_format_announcement_without_title_has_no_leading_newline(self): |
| 19 | + announcement = _format_announcement("", "test") |
| 20 | + |
| 21 | + self.assertEqual(announcement, "test") |
| 22 | + |
| 23 | + def test_format_announcement_with_whitespace_title_treats_it_as_missing(self): |
| 24 | + announcement = _format_announcement(" ", "test") |
| 25 | + |
| 26 | + self.assertEqual(announcement, "test") |
10 | 27 |
|
11 | 28 |
|
12 | 29 | class TestAnnouncements(IsolatedAsyncioTestCase): |
@@ -49,5 +66,51 @@ async def test_announce_command(self, mock_wait): |
49 | 66 | self.assertIsInstance(sent_modal, Announcement) |
50 | 67 | mock_wait.assert_awaited_once() |
51 | 68 |
|
| 69 | + async def test_on_submit_regular_submission_uses_single_newline(self): |
| 70 | + mock_channel = MagicMock() |
| 71 | + mock_channel.send = AsyncMock() |
| 72 | + |
| 73 | + mock_interaction = MagicMock(spec=Interaction) |
| 74 | + mock_interaction.response = MagicMock() |
| 75 | + mock_interaction.response.is_done = MagicMock(return_value=False) |
| 76 | + mock_interaction.response.send_message = AsyncMock() |
| 77 | + mock_interaction.followup = MagicMock() |
| 78 | + mock_interaction.followup.send = AsyncMock() |
| 79 | + |
| 80 | + modal = Announcement(None, mock_channel, "regular") |
| 81 | + modal.announcement_title = MagicMock(value="my title") |
| 82 | + modal.announcement = MagicMock(value="test") |
| 83 | + |
| 84 | + await modal.on_submit(mock_interaction) |
| 85 | + |
| 86 | + mock_channel.send.assert_awaited_once_with( |
| 87 | + content="**my title**\ntest", |
| 88 | + file=None |
| 89 | + ) |
| 90 | + |
| 91 | + async def test_on_submit_embed_submission_skips_leading_newline_without_title(self): |
| 92 | + mock_channel = MagicMock() |
| 93 | + mock_channel.send = AsyncMock() |
| 94 | + |
| 95 | + mock_interaction = MagicMock(spec=Interaction) |
| 96 | + mock_interaction.response = MagicMock() |
| 97 | + mock_interaction.response.is_done = MagicMock(return_value=False) |
| 98 | + mock_interaction.response.send_message = AsyncMock() |
| 99 | + mock_interaction.followup = MagicMock() |
| 100 | + mock_interaction.followup.send = AsyncMock() |
| 101 | + |
| 102 | + modal = Announcement(None, mock_channel, "embed") |
| 103 | + modal.announcement_title = MagicMock(value=" ") |
| 104 | + modal.announcement = MagicMock(value="test") |
| 105 | + |
| 106 | + await modal.on_submit(mock_interaction) |
| 107 | + |
| 108 | + mock_channel.send.assert_awaited_once() |
| 109 | + self.assertEqual( |
| 110 | + mock_channel.send.await_args.kwargs["embed"].description, |
| 111 | + "test" |
| 112 | + ) |
| 113 | + self.assertIsNone(mock_channel.send.await_args.kwargs["file"]) |
| 114 | + |
52 | 115 | if __name__ == "__main__": |
53 | 116 | unittest.main() |
0 commit comments