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
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
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
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
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()
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()
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
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 }
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
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)