示例#1
0
    def test_do_not_recreate_parent_dir_if_it_exists(self):
        addon, repo, parent_version, new_version = self.create_new_version_for_addon(
            'https-everywhere.xpi'
        )

        # Delete a file within a directory but modify another file.
        # This will preserve the directory, i.e. we won't have to
        # recreate it.
        apply_changes(
            repo, new_version, '', 'chrome-resources/css/chrome_shared.css', delete=True
        )
        apply_changes(
            repo, new_version, '/* new content */', 'chrome-resources/css/widgets.css'
        )

        self.version = new_version
        data = self.serialize(parent_version=parent_version)

        entries_by_file = {e['path']: e for e in data['file_entries'].values()}
        parent_dir = 'chrome-resources/css'
        assert parent_dir in entries_by_file.keys()

        parent = entries_by_file[parent_dir]
        assert parent['mime_category'] == 'directory'
        assert parent['path'] == parent_dir
示例#2
0
    def test_serialize_deleted_file(self):
        expected_filename = 'manifest.json'
        parent_version = self.addon.current_version
        new_version = version_factory(
            addon=self.addon,
            file_kw={
                'filename': 'webextension_no_id.xpi',
                'is_webextension': True,
            },
        )

        repo = AddonGitRepository.extract_and_commit_from_version(new_version)
        apply_changes(repo, new_version, '', expected_filename, delete=True)

        self.version = new_version
        self.file = new_version.current_file
        data = self.serialize(parent_version=parent_version)

        assert data['download_url'] is None
        # We deleted the selected file, so there should be a diff.
        assert data['diff'] is not None
        assert data['diff']['mode'] == 'D'
        assert data['mimetype'] == 'application/json'
        assert data['sha256'] is None
        assert data['size'] is None
        assert data['mime_category'] is None
        assert data['filename'] == expected_filename
示例#3
0
    def test_expose_grandparent_dir_deleted_subfolders(self):
        addon, repo, parent_version, new_version = \
            self.create_new_version_for_addon('deeply-nested.zip')

        apply_changes(
            repo,
            new_version,
            '',
            'chrome/icons/de/foo.png',
            delete=True)

        self.version = new_version
        data = self.serialize(parent_version=parent_version)

        entries_by_file = {
            e['path']: e for e in data['file_entries'].values()
        }
        # Check that we correctly include grand-parent folders too
        # See https://github.com/mozilla/addons-server/issues/13092
        grandparent_dir = 'chrome'
        assert grandparent_dir in entries_by_file.keys()

        parent = entries_by_file[grandparent_dir]
        assert parent['mime_category'] == 'directory'
        assert parent['path'] == grandparent_dir
        assert parent['depth'] == 0
示例#4
0
    def test_basic(self):
        expected_file_type = 'text'
        expected_filename = 'manifest.json'

        parent_version = self.addon.current_version

        new_version = version_factory(
            addon=self.addon,
            file_kw={
                'filename': 'webextension_no_id.xpi',
                'is_webextension': True,
            },
        )

        repo = AddonGitRepository.extract_and_commit_from_version(new_version)

        apply_changes(repo, new_version, 'Updated test file\n', 'test.txt')
        apply_changes(repo, new_version, '', 'README.md', delete=True)

        self.version = new_version
        data = self.serialize(parent_version=parent_version)

        assert set(data['file_entries'].keys()) == {
            'manifest.json',
            'README.md',
            'test.txt',
        }

        # Unmodified file
        manifest_data = data['file_entries']['manifest.json']
        assert manifest_data['depth'] == 0
        assert manifest_data['filename'] == expected_filename
        assert manifest_data['mime_category'] == expected_file_type
        assert manifest_data['path'] == 'manifest.json'
        assert manifest_data['status'] == ''

        # Added a new file
        test_txt_data = data['file_entries']['test.txt']
        assert test_txt_data['depth'] == 0
        assert test_txt_data['filename'] == 'test.txt'
        assert test_txt_data['mime_category'] == 'text'
        assert test_txt_data['path'] == 'test.txt'
        assert test_txt_data['status'] == 'A'

        # Deleted file
        readme_data = data['file_entries']['README.md']
        assert readme_data['status'] == 'D'
        assert readme_data['depth'] == 0
        assert readme_data['filename'] == 'README.md'
        # Not testing mimetype as text/markdown is missing in CI mimetypes
        # database. But it doesn't matter much here since we're primarily
        # after the git status.
        assert readme_data['mime_category'] is None
        assert readme_data['path'] == 'README.md'
示例#5
0
    def test_basic(self):
        expected_file_type = 'text'
        expected_filename = 'manifest.json'
        expected_mimetype = 'application/json'
        expected_sha256 = (
            'b634285d4b20bf6b198b2b2897c78b8e2c6eb39c92759025e338a14d18478dcb'
        )
        expected_size = 698

        parent_version = self.addon.current_version

        new_version = version_factory(
            addon=self.addon,
            file_kw={
                'filename': 'webextension_no_id.xpi',
                'is_webextension': True,
            },
        )

        repo = AddonGitRepository.extract_and_commit_from_version(new_version)

        apply_changes(repo, new_version, 'Updated test file\n', 'test.txt')
        apply_changes(repo, new_version, '', 'README.md', delete=True)

        self.version = new_version
        self.file = new_version.current_file
        data = self.serialize(parent_version=parent_version)

        assert data['id'] == new_version.current_file.pk
        assert data['base_file'] == {'id': parent_version.current_file.pk}
        assert data['selected_file'] == 'manifest.json'
        assert data['download_url'] == absolutify(
            reverse(
                'reviewers.download_git_file',
                kwargs={
                    'version_id': self.addon.current_version.pk,
                    'filename': 'manifest.json',
                },
            )
        )
        assert not data['uses_unknown_minified_code']
        assert data['mimetype'] == expected_mimetype
        assert data['sha256'] == expected_sha256
        assert data['size'] == expected_size
        assert data['mime_category'] == expected_file_type
        assert data['filename'] == expected_filename

        # The API always renders a diff, even for unmodified files.
        assert data['diff'] is not None
示例#6
0
    def test_basic(self):
        expected_file_type = 'text'
        expected_filename = 'manifest.json'
        expected_mimetype = 'application/json'
        expected_sha256 = (
            'bf9b0744c0011cad5caa55236951eda523f17676e91353a64a32353eac798631'
        )
        expected_size = 621

        parent_version = self.addon.current_version

        new_version = version_factory(
            addon=self.addon, file_kw={
                'filename': 'webextension_no_id.xpi',
                'is_webextension': True,
            }
        )

        repo = AddonGitRepository.extract_and_commit_from_version(new_version)

        apply_changes(repo, new_version, 'Updated test file\n', 'test.txt')
        apply_changes(repo, new_version, '', 'README.md', delete=True)

        self.version = new_version
        self.file = new_version.current_file
        data = self.serialize(parent_version=parent_version)

        assert data['id'] == new_version.current_file.pk
        assert data['base_file'] == {
            'id': parent_version.current_file.pk
        }
        assert data['selected_file'] == 'manifest.json'
        assert data['download_url'] == absolutify(reverse(
            'reviewers.download_git_file',
            kwargs={
                'version_id': self.addon.current_version.pk,
                'filename': 'manifest.json'
            }
        ))
        assert not data['uses_unknown_minified_code']
        assert data['mimetype'] == expected_mimetype
        assert data['sha256'] == expected_sha256
        assert data['size'] == expected_size
        assert data['mime_category'] == expected_file_type
        assert data['filename'] == expected_filename

        # The API always renders a diff, even for unmodified files.
        assert data['diff'] is not None
示例#7
0
    def test_recreate_nested_parent_dir_of_deleted_file(self):
        addon, repo, parent_version, new_version = self.create_new_version_for_addon(
            'https-everywhere.xpi'
        )

        apply_changes(repo, new_version, '', '_locales/ru/messages.json', delete=True)

        self.version = new_version
        data = self.serialize(parent_version=parent_version)

        entries_by_file = {e['path']: e for e in data['file_entries'].values()}
        parent_dir = '_locales/ru'
        assert parent_dir in entries_by_file.keys()

        parent = entries_by_file[parent_dir]
        assert parent['depth'] == 1
        assert parent['filename'] == 'ru'
        assert parent['path'] == parent_dir
示例#8
0
    def test_recreate_parent_dir_of_deleted_file(self):
        addon, repo, parent_version, new_version = self.create_new_version_for_addon(
            'webextension_signed_already.xpi'
        )

        apply_changes(repo, new_version, '', 'META-INF/mozilla.rsa', delete=True)

        self.version = new_version
        data = self.serialize(parent_version=parent_version)

        entries_by_file = {e['path']: e for e in data['file_entries'].values()}
        parent_dir = 'META-INF'
        assert parent_dir in entries_by_file.keys()

        parent = entries_by_file[parent_dir]
        assert parent['depth'] == 0
        assert parent['filename'] == parent_dir
        assert parent['mime_category'] == 'directory'
        assert parent['path'] == parent_dir
    def test_do_not_recreate_parent_dir_of_deleted_root_file(self):
        addon, repo, parent_version, new_version = self.create_new_version_for_addon(
            'webextension_signed_already.xpi')

        apply_changes(repo, new_version, '', 'manifest.json', delete=True)

        self.version = new_version
        data = self.serialize(parent_version=parent_version)

        entries_by_file = {e['path']: e for e in data['file_entries'].values()}

        # Since we just deleted a root file, no additional entries
        # should have been added for its parent directory.
        assert list(sorted(entries_by_file.keys())) == [
            'META-INF',
            'META-INF/mozilla.rsa',
            'index.js',
            'manifest.json',
        ]
示例#10
0
    def test_basic(self):
        expected_file_type = 'text'
        expected_filename = 'manifest.json'
        expected_mimetype = 'application/json'
        expected_sha256 = (
            'bf9b0744c0011cad5caa55236951eda523f17676e91353a64a32353eac798631')
        expected_size = 621

        parent_version = self.addon.current_version

        new_version = version_factory(addon=self.addon,
                                      file_kw={
                                          'filename': 'webextension_no_id.xpi',
                                          'is_webextension': True,
                                      })

        repo = AddonGitRepository.extract_and_commit_from_version(new_version)

        apply_changes(repo, new_version, 'Updated test file\n', 'test.txt')
        apply_changes(repo, new_version, '', 'README.md', delete=True)

        file = self.addon.current_version.current_file

        data = self.serialize(file, parent_version=parent_version)

        assert data['id'] == file.pk
        assert data['base_file'] == {'id': parent_version.current_file.pk}
        assert data['selected_file'] == 'manifest.json'
        assert data['download_url'] == absolutify(
            reverse('reviewers.download_git_file',
                    kwargs={
                        'version_id': self.addon.current_version.pk,
                        'filename': 'manifest.json'
                    }))
        assert not data['uses_unknown_minified_code']
        assert data['mimetype'] == expected_mimetype
        assert data['sha256'] == expected_sha256
        assert data['size'] == expected_size
        assert data['mime_category'] == expected_file_type
        assert data['filename'] == expected_filename

        assert set(data['entries'].keys()) == {
            'manifest.json', 'README.md', 'test.txt'
        }

        # The API always renders a diff, even for unmodified files.
        assert data['diff'] is not None

        assert not data['uses_unknown_minified_code']

        # Unmodified file
        manifest_data = data['entries']['manifest.json']
        assert manifest_data['depth'] == 0
        assert manifest_data['filename'] == expected_filename
        assert manifest_data['mime_category'] == expected_file_type
        assert manifest_data['path'] == u'manifest.json'
        assert manifest_data['status'] == ''

        # Added a new file
        test_txt_data = data['entries']['test.txt']
        assert test_txt_data['depth'] == 0
        assert test_txt_data['filename'] == u'test.txt'
        assert test_txt_data['mime_category'] == 'text'
        assert test_txt_data['path'] == u'test.txt'
        assert test_txt_data['status'] == 'A'

        # Deleted file
        readme_data = data['entries']['README.md']
        assert readme_data['status'] == 'D'
        assert readme_data['depth'] == 0
        assert readme_data['filename'] == 'README.md'
        # Not testing mimetype as text/markdown is missing in travis mimetypes
        # database. But it doesn't matter much here since we're primarily
        # after the git status.
        assert readme_data['mime_category'] is None
        assert readme_data['path'] == u'README.md'