def setUp(self, mock_load_configuration):
        self.config_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'config')

        self.server_config = ConfigParser()
        self.server_config.read(os.path.join(self.config_path, 'server.cfg'))

        self.channel_config = ConfigParser()
        self.channel_config.read(os.path.join(self.config_path, 'servers', 'irc.example.org.cfg'))

        self.identity_config = ConfigParser()
        self.identity_config.read(os.path.join(self.config_path, 'identities', 'test.cfg'))

        def load_configuration(name, plugin=None, basedir=None, default=None, ext='.cfg'):
            if basedir == 'servers':
                return self.channel_config

            if basedir == 'identities':
                return self.identity_config

        mock_load_configuration.side_effect = load_configuration
        self.server = Server('irc.example.org', self.server_config)
class ServerTestCase(unittest.TestCase):

    @mock.patch.object(FireflyIRC, 'load_configuration')
    def setUp(self, mock_load_configuration):
        self.config_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'config')

        self.server_config = ConfigParser()
        self.server_config.read(os.path.join(self.config_path, 'server.cfg'))

        self.channel_config = ConfigParser()
        self.channel_config.read(os.path.join(self.config_path, 'servers', 'irc.example.org.cfg'))

        self.identity_config = ConfigParser()
        self.identity_config.read(os.path.join(self.config_path, 'identities', 'test.cfg'))

        def load_configuration(name, plugin=None, basedir=None, default=None, ext='.cfg'):
            if basedir == 'servers':
                return self.channel_config

            if basedir == 'identities':
                return self.identity_config

        mock_load_configuration.side_effect = load_configuration
        self.server = Server('irc.example.org', self.server_config)

    def test_server_container_attributes(self):
        self.assertIsInstance(self.server._config, ConfigParser)

        self.assertEqual(self.server.hostname, 'irc.example.org')
        self.assertTrue(self.server.enabled)
        self.assertTrue(self.server.auto_connect)
        self.assertEqual(self.server.nick, 'Firefly')
        self.assertEqual(self.server.username, 'Firefly')
        self.assertEqual(self.server.realname, 'Nose Tests')
        self.assertIsNone(self.server.password)
        self.assertEqual(self.server.port, 6669)
        self.assertFalse(self.server.ssl)

    def test_server_channel_containers_length(self):
        self.server.add_channel('#first')
        self.server.add_channel('#second')
        self.server.add_channel('#third')
        self.assertEqual(len(self.server.channels), 3)
        
    def test_first_server_channel_attributes(self):
        self.server.add_channel('#first')
        self.server.add_channel('#second')
        self.server.add_channel('#third')

        first = self.server.channels['#first']
        self.assertIsInstance(first, Channel)
        self.assertIsInstance(first._config, ConfigParser)
        
        self.assertIs(first.server, self.server)
        self.assertEqual(first.name, '#first')
        self.assertTrue(first.autojoin)
        self.assertIsNone(first.password)
        
    def test_second_server_channel_attributes(self):
        self.server.add_channel('#first')
        self.server.add_channel('#second')
        self.server.add_channel('#third')

        second = self.server.channels['#second']
        self.assertIsInstance(second, Channel)
        self.assertIsInstance(second._config, ConfigParser)
        
        self.assertIs(second.server, self.server)
        self.assertEqual(second.name, '#second')
        self.assertTrue(second.autojoin)
        self.assertIsNone(second.password)
        
    def test_third_server_channel_attributes(self):
        self.server.add_channel('#first')
        self.server.add_channel('#second')
        self.server.add_channel('#third')

        third = self.server.channels['#third']
        self.assertIsInstance(third, Channel)
        self.assertIsInstance(third._config, ConfigParser)

        self.assertIs(third.server, self.server)
        self.assertEqual(third.name, '#third')
        self.assertFalse(third.autojoin)
        self.assertEqual(third.password, 'secret')