Ejemplo n.º 1
0
    def test_check_plugin_archive(self):
        with mock.patch('compose.plugin_manager.zipfile.is_zipfile') as mock_is_zipfile, \
                mock.patch('compose.plugin_manager.zipfile.ZipFile') as mock_zipfile, \
                mock.patch('compose.plugin_manager.tarfile.is_tarfile') as mock_is_tarfile, \
                mock.patch('compose.plugin_manager.tarfile.TarFile') as mock_tarfile:
            plugin_manager = PluginManager('plugin_dir')
            mock_is_zipfile.return_value = False
            mock_is_tarfile.return_value = False
            with self.assertRaises(InvalidPluginFileTypeError) as e:
                plugin_manager._check_plugin_archive('no_plugin')

            self.assertEqual(str(e.exception), "Invalid file type.")

            mock_is_zipfile.return_value = True
            mock_zipfile.return_value = self._get_archive_mock([])

            with self.assertRaises(InvalidPluginError) as e:
                plugin_manager._check_plugin_archive('no_plugin')

            self.assertEqual(str(e.exception), "Wrong plugin structure.")

            mock_zipfile.return_value = self._get_archive_mock([
                'root_dir/',
                'second_root_dir/',
                'root_dir/plugin.json'
            ])

            with self.assertRaises(InvalidPluginError) as e:
                plugin_manager._check_plugin_archive('plugin.zip')

            self.assertEqual(str(e.exception), "Wrong plugin structure.")

            mock_zipfile.return_value = self._get_archive_mock([
                'root_dir/',
                'root_dir/plugin.js'
            ])

            with self.assertRaises(InvalidPluginError) as e:
                plugin_manager._check_plugin_archive('plugin.zip')

            self.assertEqual(str(e.exception), "Missing plugin.json file.")

            mock_zipfile.return_value = self._get_archive_mock([
                'root_dir/',
                'root_dir/plugin.json'
            ])

            result = plugin_manager._check_plugin_archive('plugin.zip')
            self.assertEqual(result, "plugin_dir/root_dir")

            mock_is_zipfile.return_value = False
            mock_is_tarfile.return_value = True
            mock_tarfile.return_value = self._get_archive_mock([
                'root_dir/',
                'root_dir/plugin.json'
            ])

            result = plugin_manager._check_plugin_archive('plugin.zip')
            self.assertEqual(result, "plugin_dir/root_dir")