Exemple #1
0
def pass_files_to_docs_review(files_for_review: List[str]) -> int:
    """
    This function passes each file of the files_for_review list to the demisto-sdk docs reviewer.
    Args:
        files_for_review: the files that should be reviewed.

    Returns: the exit code according to the docs reviewer result.
    """
    exit_code = 0
    for file_path in files_for_review:
        click.secho(f'Checking file: {file_path}\n', fg="yellow")
        doc_reviewer = DocReviewer(
            file_path=file_path,
            release_notes_only=True,
            known_words_file_path='Tests/known_words.txt',
            no_camel_case=True)

        result = doc_reviewer.run_doc_review()
        if not result:
            click.secho(
                'Docs review resulted in failure, the exact logs can be found above.',
                fg="red")
            exit_code = 1

    return exit_code
Exemple #2
0
def test_adding_known_words_from_pack(repo, file_content, unknown_words,
                                      known_words_files_contents,
                                      packs_known_words_content,
                                      review_success):
    """
    Given:
        - A release notes file with two misspelled words.
        - Different variations of known_words files, including pack-ignore known_words.

    When:
        - Running doc_reviewer with known_words_file_paths and load_known_words_from_pack option.

    Then:
        - Ensure the review result is appropriate.
        - Make sure a review has taken place.
        - Enusure the unknown words are as expected.
    """
    pack = repo.create_pack('test_pack')
    rn_file = pack.create_release_notes(version='1_0_0', content=file_content)
    pack.pack_ignore.write_list(packs_known_words_content)
    known_words_file_paths = []
    for index, known_words_file_contents in enumerate(
            known_words_files_contents):
        known_words_file = pack._create_text_based(f"known_words_{index}.txt")
        known_words_file.write_list(known_words_file_contents)
        known_words_file_paths.append(known_words_file.path)

    with ChangeCWD(repo.path):
        doc_reviewer = DocReviewer(
            file_paths=[rn_file.path],
            known_words_file_paths=known_words_file_paths,
            load_known_words_from_pack=True)
        assert doc_reviewer.run_doc_review() == review_success
        assert len(doc_reviewer.files) > 0
        assert set(doc_reviewer.unknown_words.keys()) == unknown_words
Exemple #3
0
def test_having_two_file_paths_different_pack(
        repo, mocker, first_file_content, second_file_content,
        unknown_word_calls, known_words_files_contents, review_success,
        misspelled_files_num, first_packs_known_words_content,
        second_packs_known_words_content, load_known_words_from_pack):
    """
    Given:
        - 2 release notes files with two misspelled words each.
        - Different variations of known_words files, including pack-ignore known_words.

    When:
        - Running doc_reviewer with known_words_file_paths.

    Then:
        - Ensure the review result is appropriate.
        - Make sure a review has taken place.
        - Enusure the unknown words are as expected for each file.
    """
    first_pack = repo.create_pack('first_test_pack')
    second_pack = repo.create_pack('second_test_pack')
    first_rn_file = first_pack.create_release_notes(version='1_0_0',
                                                    content=first_file_content)
    second_rn_file = second_pack.create_release_notes(
        version='1_0_1', content=second_file_content)
    first_pack.pack_ignore.write_list(first_packs_known_words_content)
    second_pack.pack_ignore.write_list(second_packs_known_words_content)
    known_words_file_paths = []
    for index, known_words_file_contents in enumerate(
            known_words_files_contents):
        known_words_file = first_pack._create_text_based(
            f"known_words_{index}.txt")
        known_words_file.write_list(known_words_file_contents)
        known_words_file_paths.append(known_words_file.path)

    unknown_word_calls_with_mocker = []
    for unknown_words in unknown_word_calls:
        unknown_word_calls_with_mocker.append(
            mocker.call(unknown_words=unknown_words))

    print_unknown_words = mocker.patch.object(DocReviewer,
                                              'print_unknown_words')

    with ChangeCWD(repo.path):
        doc_reviewer = DocReviewer(
            file_paths=[first_rn_file.path, second_rn_file.path],
            known_words_file_paths=known_words_file_paths,
            load_known_words_from_pack=load_known_words_from_pack)
        assert doc_reviewer.run_doc_review() == review_success
        assert len(doc_reviewer.files) == 2
        print_unknown_words.assert_has_calls(unknown_word_calls_with_mocker,
                                             any_order=True)
        assert len(doc_reviewer.files_with_misspells) == misspelled_files_num
Exemple #4
0
    def test_find_files_from_invalid_path(self):
        """
        Given -
            invalid path file.

        When -
            trying to find files to do doc-reviews on.

        Then -
            Ensure no files are found.
        """
        doc_review = DocReviewer(file_paths=['test'])
        assert doc_review.run_doc_review()
        assert not doc_review.files
Exemple #5
0
    def test_invalid_misspelled_files_with_no_failure(
            self, invalid_spelled_content_pack):
        """
        Given -
            Pack files with invalid content spelling and 'no_failure' input parameter set to True.

        When -
            Running doc-review on misspelled files.

        Then -
            Ensure doc-review still succeeds.
        """
        pack, _ = invalid_spelled_content_pack

        doc_reviewer = DocReviewer(file_paths=[pack.path], no_failure=True)
        assert doc_reviewer.run_doc_review()
Exemple #6
0
    def test_valid_spelled_files(self, valid_spelled_content_pack):
        """
        Given -
            Pack files with valid content spelling.

        When -
            Running doc-review on correctly spelled files.

        Then -
            Ensure doc-review succeed and there aren't any misspelled files found.
        """
        pack = valid_spelled_content_pack

        doc_reviewer = DocReviewer(file_paths=[pack.path])
        assert doc_reviewer.run_doc_review()
        assert not doc_reviewer.found_misspelled
        assert len(doc_reviewer.files_with_misspells) == 0
        assert doc_reviewer.files_with_misspells == set()
Exemple #7
0
    def test_invalid_misspelled_files_are_correct(
            self, invalid_spelled_content_pack):
        """
        Given -
            Pack files with invalid content spelling.

        When -
            Running doc-review on misspelled files.

        Then -
            Ensure doc-review fails and all the misspelled files are found.
        """
        pack, misspelled_files = invalid_spelled_content_pack

        doc_reviewer = DocReviewer(file_paths=[pack.path])
        assert not doc_reviewer.run_doc_review()
        assert doc_reviewer.found_misspelled
        assert len(doc_reviewer.files_with_misspells) == len(misspelled_files)
        assert doc_reviewer.files_with_misspells == misspelled_files
Exemple #8
0
    def test_doc_review_is_performed_only_on_release_notes(
            self, valid_spelled_content_pack):
        """
        Given
            - a pack

        When
            - Running doc-review with release-notes only.

        Then
            - Ensure The files that were doc-reviewed are only release-notes.
        """
        doc_reviewer = DocReviewer(
            file_paths=[valid_spelled_content_pack.path],
            release_notes_only=True)
        assert doc_reviewer.run_doc_review()
        assert set(doc_reviewer.files) == {
            rn.path
            for rn in valid_spelled_content_pack.release_notes
        }
Exemple #9
0
    def test_failure_on_malformed_rns(self, pack):
        """
        Given -
            Pack files with malformed release notes but correct spelling.

        When -
            Running doc-review.

        Then -
            Ensure malformed release notes are found.
            Ensure no misspelled words were found.
            Ensure doc-review returned False to indicate failure.
        """
        rn = pack.create_release_notes(
            version="release-note-0",
            content="\n#### Script\n##### Script Name\n- blah blah")
        doc_reviewer = DocReviewer(file_paths=[pack.path])
        result = doc_reviewer.run_doc_review()
        assert rn.path in doc_reviewer.malformed_rn_files
        assert not doc_reviewer.found_misspelled
        assert not result
Exemple #10
0
    def test_doc_review_with_release_notes_is_skipped_on_invalid_json_file(
            self, malformed_incident_field: JSONBased):
        """
        Given -
            malformed json incident field.

        When -
            Calling doc-review with --release-notes.

        Then -
            Ensure that no exception/error is raised and that the malformed files were not added to the files to review.
            """
        _path = malformed_incident_field.path

        try:
            doc_reviewer = DocReviewer(file_paths=[_path],
                                       release_notes_only=True)
            assert doc_reviewer.run_doc_review()
            assert not doc_reviewer.files
        except ValueError as err:
            assert False, str(err)