def test_create_channel_category_full(self):
        parent1 = Channel(
            id=22222,
            type=ChannelType.GUILD_CATEGORY,
            name=DISCORD_TEXT_CATEGORY,
        )
        parent2 = Channel(
            id=33333,
            type=ChannelType.GUILD_CATEGORY,
            name=DISCORD_TEXT_CATEGORY,
        )

        channels_list = {parent1.id: parent1, parent2.id: parent2}
        # Make parent1 full.
        for i in range(MAX_CHANNELS_PER_CATEGORY):
            channels_list[parent1.id + i + 1] = Channel(
                id=parent1.id + i + 1,
                type=ChannelType.GUILD_TEXT,
                name="child",
                parent_id=parent1.id,
            )

        # The next channel created should go under parent2.
        self.mock_client.guilds_channels_list.return_value = channels_list
        self.service.create_text_channel(DISCORD_GUILD_ID, "new",
                                         DISCORD_TEXT_CATEGORY)
        self.mock_client.guilds_channels_create.assert_called_once_with(
            DISCORD_GUILD_ID,
            ChannelType.GUILD_TEXT,
            "new",
            parent_id=parent2.id,
        )

        # Make parent2 full.
        for i in range(MAX_CHANNELS_PER_CATEGORY):
            channels_list[parent2.id + i + 1] = Channel(
                id=parent2.id + i + 1,
                type=ChannelType.GUILD_TEXT,
                name="child",
                parent_id=parent2.id,
            )

        # The next channel created should create a new parent.
        self.mock_client.guilds_channels_list.return_value = channels_list
        new_parent = Channel(
            id=44444,
            type=ChannelType.GUILD_CATEGORY,
            name=DISCORD_TEXT_CATEGORY,
        )
        self.mock_client.guilds_channels_create.return_value = new_parent
        self.service.create_text_channel(DISCORD_GUILD_ID, "new",
                                         DISCORD_TEXT_CATEGORY)
        self.mock_client.guilds_channels_create.assert_has_calls([
            # Create parent category channel first.
            mock.call(
                DISCORD_GUILD_ID,
                ChannelType.GUILD_CATEGORY,
                DISCORD_TEXT_CATEGORY,
                parent_id=None,
            ),
            # Create text channel under category created above.
            mock.call(
                DISCORD_GUILD_ID,
                ChannelType.GUILD_TEXT,
                "new",
                parent_id=44444,
            ),
        ])
    def test_archive_channel_category_full(self):
        puzzles = Channel(
            id=33332,
            type=ChannelType.GUILD_CATEGORY,
            name=DISCORD_TEXT_CATEGORY,
        )
        archive = Channel(
            id=33333,
            type=ChannelType.GUILD_CATEGORY,
            name=DISCORD_ARCHIVE_CATEGORY,
        )

        channels_list = {archive.id: archive, puzzles.id: puzzles}
        # Make archive full.
        for i in range(MAX_CHANNELS_PER_CATEGORY):
            channels_list[archive.id + i + 1] = Channel(
                id=archive.id + i + 1,
                type=ChannelType.GUILD_TEXT,
                name="child",
                parent_id=archive.id,
            )

        # Create channel with no parent.
        channel1 = Channel(id=22222,
                           type=ChannelType.GUILD_VOICE,
                           name="channel1")

        # The next channel archived should create a new archive.
        new_archive = Channel(
            id=44444,
            type=ChannelType.GUILD_CATEGORY,
            name=DISCORD_ARCHIVE_CATEGORY,
        )
        self.mock_client.guilds_channels_list.return_value = channels_list
        self.mock_client.guilds_channels_create.return_value = new_archive
        self.service.archive_channel(DISCORD_GUILD_ID, channel1.id,
                                     DISCORD_ARCHIVE_CATEGORY)
        self.mock_client.guilds_channels_create.assert_called_once_with(
            DISCORD_GUILD_ID,
            ChannelType.GUILD_CATEGORY,
            DISCORD_ARCHIVE_CATEGORY,
            parent_id=None,
        )

        # Unarchive to make archive not full.
        channels_list[new_archive.id] = new_archive
        self.mock_client.guilds_channels_list.return_value = channels_list
        self.service.unarchive_text_channel(DISCORD_GUILD_ID, archive.id + 1,
                                            DISCORD_TEXT_CATEGORY)

        # Archive another channel. This should go inside the first archive.
        channels_list.pop(archive.id + 1)
        self.mock_client.guilds_channels_list.return_value = channels_list
        channel2 = Channel(id=22223,
                           type=ChannelType.GUILD_VOICE,
                           name="channel2")
        self.service.archive_channel(DISCORD_GUILD_ID, channel2.id,
                                     DISCORD_ARCHIVE_CATEGORY)

        self.mock_client.channels_modify.assert_has_calls([
            mock.call(channel1.id, parent_id=new_archive.id),
            mock.call(archive.id + 1, parent_id=puzzles.id),
            mock.call(channel2.id, parent_id=archive.id),
        ])
Exemple #3
0
def test_nsfw_channel():
    channel = Channel(name='test', nsfw=True, type=ChannelType.GUILD_TEXT)
    assert channel.is_nsfw