Ejemplo n.º 1
0
def check_changelog_list(versions_xml: str) -> List[LinterReport]:
    '''
    Compare chages for Russian and English languages
    '''
    reports = []

    changelog = XmlChangelogParser.parse(versions_xml)
    for version in changelog.versions:
        changes_ru = version.changes.get('ru')
        changes_en = version.changes.get('')

        if not changes_ru:
            reports.append(
                LinterReport(
                    LinterStatus.ERROR,
                    'Empty Russian changelog for version {}'.format(
                        version.number)))
            continue

        if not changes_en:
            reports.append(
                LinterReport(
                    LinterStatus.ERROR,
                    'Empty English changelog for version {}'.format(
                        version.number)))
            continue

        if len(changes_ru) != len(changes_en):
            reports.append(
                LinterReport(
                    LinterStatus.ERROR,
                    'Changelog for English and Russian versions are not equal for version {}'
                    .format(version.number)))

    return reports
Ejemplo n.º 2
0
def check_changelog_content(versions_xml: str) -> List[LinterReport]:
    '''
    Every item in change log list must ends with dot
    '''
    reports = []

    changelog = XmlChangelogParser.parse(versions_xml)
    for version in changelog.versions:
        changes_ru = version.changes.get('ru')
        changes_en = version.changes.get('')

        for item in changes_ru:
            if not item.description.endswith('.'):
                reports.append(
                    LinterReport(
                        LinterStatus.ERROR,
                        'Add the dot to change item for Russian changelog for version {}'
                        .format(version.number)))

        for item in changes_en:
            if not item.description.endswith('.'):
                reports.append(
                    LinterReport(
                        LinterStatus.ERROR,
                        'Add the dot to change item for English changelog for version {}'
                        .format(version.number)))

    return reports
Ejemplo n.º 3
0
def check_even_versions(versions_xml: str) -> List[LinterReport]:
    '''
    Check that the date is set
    '''
    reports = []

    changelog = XmlChangelogParser.parse(versions_xml)
    for version in changelog.versions:
        try:
            build = int(version.number.split('.')[3])
        except (ValueError, IndexError):
            reports.append(
                LinterReport(
                    LinterStatus.ERROR,
                    'Invalid version format: {}'.format(version.number)))
            continue

        if build % 2 != 0:
            reports.append(
                LinterReport(
                    LinterStatus.ERROR,
                    'Build number for version {} is odd (dev version)'.format(
                        version.number)))

    return reports
Ejemplo n.º 4
0
def test_versions_changes_lang_default_ru():
    text = '''<?xml version="1.1" encoding="UTF-8" ?>
        <versions>
            <version number="1.0">
                <changes>
                    <change>Fix bug</change>
                    <change>Fix other bug</change>
                </changes>

                <changes lang="ru">
                    <change>Исправлена ошибка</change>
                    <change>Исправлена другая ошибка</change>
                </changes>
            </version>
        </versions>'''
    result = XmlChangelogParser.parse(text)

    assert '' in result.versions[0].changes.get_languages()
    assert 'ru' in result.versions[0].changes.get_languages()

    assert result.versions[0].changes[''][0].description == 'Fix bug'
    assert result.versions[0].changes[''][1].description == 'Fix other bug'

    assert result.versions[0].changes['ru'][
        0].description == 'Исправлена ошибка'
    assert result.versions[0].changes['ru'][
        1].description == 'Исправлена другая ошибка'
Ejemplo n.º 5
0
def test_versions_empty_internal():
    text = '''<?xml version="1.1" encoding="UTF-8" ?>
        <versions>
            <version></version>
        </versions>'''
    result = XmlChangelogParser.parse(text)

    assert result.versions == []
Ejemplo n.º 6
0
def test_versions_download_empty():
    text = '''<?xml version="1.1" encoding="UTF-8" ?>
        <versions>
            <version number="1.0">
                <download></download>
            </version>
        </versions>'''
    result = XmlChangelogParser.parse(text)

    assert result.versions[0].downloads == []
Ejemplo n.º 7
0
def check_versions_list(versions_xml: str) -> List[LinterReport]:
    '''
    Check that the versions is not empty
    '''
    reports = []

    changelog = XmlChangelogParser.parse(versions_xml)
    if not changelog.versions:
        reports.append(
            LinterReport(LinterStatus.ERROR, 'No versions list for OutWiker'))

    return reports
Ejemplo n.º 8
0
def test_versions_changes_empty():
    text = '''<?xml version="1.1" encoding="UTF-8" ?>
        <versions>
            <version number="1.0">
                <changes></changes>
            </version>
        </versions>'''
    result = XmlChangelogParser.parse(text)

    assert len(result.versions) == 1
    assert result.versions[0].changes.get_languages() == ['']
    assert result.versions[0].changes[''] == []
Ejemplo n.º 9
0
def test_versions_no_number():
    text = '''<?xml version="1.1" encoding="UTF-8" ?>
        <versions>
            <version number="1.0" status="dev" date="29.08.2019"></version>
            <version status="beta" date="30.08.2019"></version>
        </versions>'''
    result = XmlChangelogParser.parse(text)

    assert len(result.versions) == 1
    assert result.versions[0].number == '1.0'
    assert result.versions[0].status == 'dev'
    assert result.versions[0].date == datetime(2019, 8, 29)
    assert result.versions[0].changes.is_empty()
Ejemplo n.º 10
0
def check_release_date(versions_xml: str) -> List[LinterReport]:
    '''
    Check that the date is set
    '''
    reports = []

    changelog = XmlChangelogParser.parse(versions_xml)
    for version in changelog.versions:
        if version.date is None:
            reports.append(
                LinterReport(LinterStatus.ERROR,
                             'No release date for OutWiker'))

    return reports
Ejemplo n.º 11
0
def test_versions_download_requirements():
    text = '''<?xml version="1.1" encoding="UTF-8" ?>
        <versions>
            <version number="1.0">
                <download href="http://example.com/application.zip">
                    <requirements>
                    </requirements>
                </download>
            </version>
        </versions>'''
    result = XmlChangelogParser.parse(text)

    assert not result.versions[0].downloads[0].requirements.os_list
    assert not result.versions[0].downloads[0].requirements.api_list
Ejemplo n.º 12
0
def test_versions_changes_lang_en():
    text = '''<?xml version="1.1" encoding="UTF-8" ?>
        <versions>
            <version number="1.0">
                <changes lang="en">
                    <change>Fix bug</change>
                    <change>Fix other bug</change>
                </changes>
            </version>
        </versions>'''
    result = XmlChangelogParser.parse(text)

    assert 'en' in result.versions[0].changes.get_languages()
    assert result.versions[0].changes['en'][0].description == 'Fix bug'
    assert result.versions[0].changes['en'][1].description == 'Fix other bug'
Ejemplo n.º 13
0
def check_https_protocol(versions_xml: str) -> List[LinterReport]:
    '''
    Check version numbers for uniqueness.
    '''
    reports = []

    changelog = XmlChangelogParser.parse(versions_xml)
    for version in changelog.versions:
        for download in version.downloads:
            if not download.href.startswith('https://'):
                reports.append(
                    LinterReport(
                        LinterStatus.ERROR,
                        'Invalid HREF protocol: {}'.format(download.href)))

    return reports
Ejemplo n.º 14
0
def check_version_numbers(versions_xml: str) -> List[LinterReport]:
    '''
    Check version numbers for uniqueness.
    '''
    reports = []
    versions = set()

    changelog = XmlChangelogParser.parse(versions_xml)
    for version in changelog.versions:
        if version.number in versions:
            reports.append(
                LinterReport(LinterStatus.ERROR,
                             'Not a unique version: {}'.format(
                                 version.number)))

        versions.add(version.number)

    return reports
Ejemplo n.º 15
0
def test_versions_download_requirements_os_api():
    text = '''<?xml version="1.1" encoding="UTF-8" ?>
        <versions>
            <version number="1.0">
                <download href="http://example.com/application.zip">
                    <requirements>
                        <os>Windows</os>
                        <os>Linux</os>
                        <api>3.666</api>
                        <api>3.667</api>
                    </requirements>
                </download>
            </version>
        </versions>'''
    result = XmlChangelogParser.parse(text)

    assert 'Windows' in result.versions[0].downloads[0].requirements.os_list
    assert 'Linux' in result.versions[0].downloads[0].requirements.os_list
    assert (3, 666) in result.versions[0].downloads[0].requirements.api_list
    assert (3, 667) in result.versions[0].downloads[0].requirements.api_list
Ejemplo n.º 16
0
def check_download_plugin_url(versions_xml: str) -> List[LinterReport]:
    '''
    Check version number in URL for download
    '''
    reports = []

    archive_extension = '.zip'

    changelog = XmlChangelogParser.parse(versions_xml)
    for version in changelog.versions:
        if not version.downloads:
            reports.append(
                LinterReport(
                    LinterStatus.ERROR,
                    'Empty download list for version {}'.format(
                        version.number)))
            continue

        for download in version.downloads:
            if not download.href.endswith(archive_extension):
                reports.append(
                    LinterReport(
                        LinterStatus.ERROR,
                        'Invalid archive format for version {}: {}'.format(
                            version.number, download.href)))
                continue

            if not download.href[:-len(archive_extension)].endswith(
                    version.number):
                reports.append(
                    LinterReport(
                        LinterStatus.ERROR,
                        'Invalid file name for version {}: {}'.format(
                            version.number, download.href)))
                continue

    return reports