def test_create_content_artifacts_by_id_set(mock_git): """ Test the case where content artifacts are being created by an id set. This test has the following cases: 1. A pack is not exsiting in the id set - the pack will not exist as an artifact. 2. An item of a pack does not exist under the pack's section in the id set - the item will not exist as an artifact. """ from demisto_sdk.commands.create_artifacts.content_artifacts_creator import \ ArtifactsManager with temp_dir() as temp: config = ArtifactsManager(artifacts_path=temp, content_version='6.0.0', zip=False, suffix='', cpus=1, packs=False, filter_by_id_set=True, id_set_path=PARTIAL_ID_SET_PATH) exit_code = config.create_content_artifacts() assert exit_code == 0 assert same_folders( temp, ARTIFACTS_EXPECTED_RESULTS / 'content_filtered_by_id_set')
def test_use_alternative_fields(mock_single_pack_git): from demisto_sdk.commands.create_artifacts.content_artifacts_creator import \ ArtifactsManager with temp_dir() as temp: config = ArtifactsManager(artifacts_path=temp, content_version='6.0.0', zip=False, suffix='', cpus=1, packs=True, alternate_fields=True, id_set_path=ALTERNATIVE_FIELDS_ID_SET_PATH) exit_code = config.create_content_artifacts() assert exit_code == 0 assert same_folders( temp, ARTIFACTS_EXPECTED_RESULTS / 'content_with_alternative_fields') pack_path = PosixPath(temp, 'content_packs', 'DummyPackAlternativeFields') # Check Integration integration_yml = dict( yaml.load( PosixPath(pack_path, 'Integrations', 'integration-sample_packs.yml'))) assert not any(key for key in integration_yml if key.endswith('_x2')) assert integration_yml['name'] == 'name_x2' assert integration_yml['defaultEnabled'] # Check Script script_yml = dict( yaml.load( PosixPath(pack_path, 'Scripts', 'script-sample_packs.yml'))) assert not any(key for key in script_yml if key.endswith('_x2')) assert script_yml['name'] == 'name_x2' assert script_yml['comment'] == 'comment_x2' assert script_yml['commonfields']['id'] == 'id_x2' # Check Playbook playbook_yml = dict( yaml.load( PosixPath(pack_path, 'Playbooks', 'playbook-sample_packs.yml'))) assert not any(key for key in playbook_yml if key.endswith('_x2')) assert playbook_yml['name'] == 'name_x2' assert playbook_yml['tasks']['task_num']['task'][ 'scriptName'] == 'scriptName_x2' # Check IncidentField with open( os.path.join(pack_path, 'IncidentFields', 'incidentfield-sample_packs.json')) as json_file: incident_field_json = json.load(json_file) assert not any(key.endswith('_x2') for key in incident_field_json) assert incident_field_json['name'] == 'name_x2'
def test_create_content_artifacts(mock_git): from demisto_sdk.commands.create_artifacts.content_artifacts_creator import ( ArtifactsManager) with temp_dir() as temp: config = ArtifactsManager(artifacts_path=temp, content_version='6.0.0', zip=False, suffix='', cpus=1, packs=False) exit_code = config.create_content_artifacts() assert exit_code == 0 assert same_folders(temp, ARTIFACTS_EXPECTED_RESULTS / 'content')
def test_duplicate_file_failure(mock_git): from demisto_sdk.commands.create_artifacts.content_artifacts_creator import ( ArtifactsManager) with temp_dir() as temp: config = ArtifactsManager(artifacts_path=temp, content_version='6.0.0', zip=False, suffix='', cpus=1, packs=False) with duplicate_file(): exit_code = config.create_content_artifacts() assert exit_code == 1
def test_malformed_file_failure(suffix: str, mock_git): from demisto_sdk.commands.create_artifacts.content_artifacts_creator import \ ArtifactsManager with temp_dir() as temp: config = ArtifactsManager(artifacts_path=temp, content_version='6.0.0', zip=False, suffix='', cpus=1, packs=False) with destroy_by_ext(suffix): exit_code = config.create_content_artifacts() assert exit_code == 1
def test_create_private_content_artifacts(private_repo): from demisto_sdk.commands.common.content import Content from demisto_sdk.commands.create_artifacts.content_artifacts_creator import ( ArtifactsManager, create_content_artifacts) with temp_dir() as temp: config = ArtifactsManager(artifacts_path=temp, content_version='6.0.0', zip=False, suffix='', cpus=1, packs=False) config.content = Content(private_repo) exit_code = create_content_artifacts(artifact_manager=config) assert same_folders(temp, ARTIFACTS_EXPEXTED_RESULTS / 'private') assert exit_code == 0
def test_sign_packs_failure(repo, capsys, key, tool): """ When: - Signing a pack. Given: - Pack object. - Signature key without the signing tool, or vice-versa. Then: - Verify that exceptions are written to the logger. """ import demisto_sdk.commands.create_artifacts.content_artifacts_creator as cca from demisto_sdk.commands.create_artifacts.content_artifacts_creator import ( ArtifactsManager, sign_packs) cca.logger = logging_setup(3) with ChangeCWD(repo.path): with temp_dir() as temp: artifact_manager = ArtifactsManager(artifacts_path=temp, content_version='6.0.0', zip=False, suffix='', cpus=1, packs=True, signature_key=key) if tool: with open('./tool', 'w') as tool_file: tool_file.write('some tool') artifact_manager.signDirectory = Path(temp / 'tool') sign_packs(artifact_manager) captured = capsys.readouterr() assert 'Failed to sign packs. In order to do so, you need to provide both signature_key and ' \ 'sign_directory arguments.' in captured.err
def test_dump_pack(mock_git): from demisto_sdk.commands.create_artifacts.content_artifacts_creator import ( ArtifactsManager, Pack, create_dirs, dump_pack) with temp_dir() as temp: config = ArtifactsManager(artifacts_path=temp, content_version='6.0.0', zip=False, suffix='', cpus=1, packs=False) create_dirs(artifact_manager=config) dump_pack(artifact_manager=config, pack=Pack(TEST_CONTENT_REPO / PACKS_DIR / 'Sample01')) assert same_folders(src1=temp / 'content_packs' / 'Sample01', src2=ARTIFACTS_EXPEXTED_RESULTS / 'content' / 'content_packs' / 'Sample01')
def test_load_user_metadata_advanced(repo): """ When: - Dumping a specific pack, processing the pack's metadata. Given: - Pack object. Then: - Verify that pack's metadata information was loaded successfully. """ from demisto_sdk.commands.create_artifacts.content_artifacts_creator import \ ArtifactsManager pack_1 = repo.setup_one_pack('Pack1') pack_1.pack_metadata.write_json({ 'name': 'Pack Number 1', 'price': 10, 'tags': ['tag1'], 'useCases': ['usecase1'], 'vendorId': 'vendorId', 'vendorName': 'vendorName' }) with ChangeCWD(repo.path): with temp_dir() as temp: artifact_manager = ArtifactsManager(artifacts_path=temp, content_version='6.0.0', zip=False, suffix='', cpus=1, packs=True) pack_1_metadata = artifact_manager.content.packs['Pack1'].metadata pack_1_metadata.load_user_metadata('Pack1', 'Pack Number 1', pack_1.path, logging_setup(3)) assert pack_1_metadata.id == 'Pack1' assert pack_1_metadata.name == 'Pack Number 1' assert pack_1_metadata.price == 10 assert pack_1_metadata.vendor_id == 'vendorId' assert pack_1_metadata.vendor_name == 'vendorName' assert pack_1_metadata.tags == ['tag1', 'Use Case']
def test_load_user_metadata_basic(repo): """ When: - Dumping a specific pack, processing the pack's metadata. Given: - Pack object. Then: - Verify that pack's metadata information was loaded successfully. """ from demisto_sdk.commands.create_artifacts.content_artifacts_creator import \ ArtifactsManager pack_1 = repo.setup_one_pack('Pack1') pack_1.pack_metadata.write_json({ 'name': 'Pack Number 1', 'description': 'A description for the pack', 'created': '2020-06-08T15:37:54Z', 'price': 0, 'support': 'xsoar', 'url': 'some url', 'email': 'some email', 'currentVersion': '1.1.1', 'author': 'Cortex XSOAR', 'tags': ['tag1'], 'dependencies': [{ 'dependency': { 'dependency': '1' } }] }) with ChangeCWD(repo.path): with temp_dir() as temp: artifact_manager = ArtifactsManager(artifacts_path=temp, content_version='6.0.0', zip=False, suffix='', cpus=1, packs=True) pack_1_metadata = artifact_manager.content.packs['Pack1'].metadata pack_1_metadata.load_user_metadata('Pack1', 'Pack Number 1', pack_1.path, logging_setup(3)) assert pack_1_metadata.id == 'Pack1' assert pack_1_metadata.name == 'Pack Number 1' assert pack_1_metadata.description == 'A description for the pack' assert pack_1_metadata.created == datetime(2020, 6, 8, 15, 37, 54) assert pack_1_metadata.price == 0 assert pack_1_metadata.support == 'xsoar' assert pack_1_metadata.url == 'some url' assert pack_1_metadata.email == 'some email' assert pack_1_metadata.certification == 'certified' assert pack_1_metadata.current_version == parse('1.1.1') assert pack_1_metadata.author == 'Cortex XSOAR' assert pack_1_metadata.tags == ['tag1'] assert pack_1_metadata.dependencies == [{ 'dependency': { 'dependency': '1' } }]