Skip to content

Commit

Permalink
Merge 82865e9 into 53a7682
Browse files Browse the repository at this point in the history
  • Loading branch information
tcarmeli1 committed Mar 11, 2024
2 parents 53a7682 + 82865e9 commit 23d036a
Show file tree
Hide file tree
Showing 2 changed files with 211 additions and 0 deletions.
86 changes: 86 additions & 0 deletions demisto_sdk/commands/validate/tests/BA_validators_test.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import copy
from pathlib import Path

import pytest

from demisto_sdk.commands.common.constants import PACKS_FOLDER
from demisto_sdk.commands.validate.tests.test_tools import (
create_assets_modeling_rule_object,
create_classifier_object,
Expand All @@ -13,18 +17,24 @@
create_incident_type_object,
create_incoming_mapper_object,
create_indicator_field_object,
create_indicator_type_object,
create_integration_object,
create_job_object,
create_layout_object,
create_list_object,
create_metadata_object,
create_modeling_rule_object,
create_old_file_pointers,
create_outgoing_mapper_object,
create_parsing_rule_object,
create_playbook_object,
create_ps_integration_object,
create_report_object,
create_script_object,
create_trigger_object,
create_widget_object,
create_wizard_object,
create_xdrc_template_object,
create_xsiam_dashboard_object,
create_xsiam_report_object,
)
Expand Down Expand Up @@ -53,6 +63,9 @@
ERROR_MSG_TEMPLATE,
IsEntityNameContainExcludedWordValidator,
)
from demisto_sdk.commands.validate.validators.BA_validators.BA114_is_valid_pack_name import (
PackNameValidator,
)
from demisto_sdk.commands.validate.validators.BA_validators.BA116_cli_name_should_equal_id import (
CliNameMatchIdValidator,
)
Expand Down Expand Up @@ -1201,3 +1214,76 @@ def test_IsEntityNameContainExcludedWordValidator(
assert len(results) == expected_number_of_failures
if results:
assert results[0].message == expected_error_message

@pytest.mark.parametrize(
"content_items, expected_number_of_failures, expected_msgs",
[
(
[create_metadata_object(), create_integration_object(), create_parsing_rule_object(), create_correlation_rule_object(), create_playbook_object(), create_modeling_rule_object(), create_ps_integration_object(), create_script_object(), create_classifier_object(), create_list_object(), create_job_object(), create_dashboard_object(), create_incident_type_object(), create_incident_field_object(), create_report_object(), create_xsiam_report_object(), create_xsiam_dashboard_object(), create_xdrc_template_object(), create_assets_modeling_rule_object(), create_trigger_object(), create_layout_object(), create_widget_object(), create_indicator_field_object(), create_wizard_object(), create_generic_definition_object(), create_generic_field_object(), create_generic_type_object(), create_generic_module_object(), create_incoming_mapper_object(), create_outgoing_mapper_object(), create_indicator_type_object()],
31,
['Pack name for a content item with path /newPackName was changed from pack_170 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Integrations/integration_0/integration_0.yml was changed from pack_171 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/ParsingRules/TestParsingRule/TestParsingRule.yml was changed from pack_172 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/CorrelationRules/correlation_rule.yml was changed from pack_173 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Playbooks/playbook-0.yml was changed from pack_174 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/ModelingRules/modelingrule_0/modelingrule_0.yml was changed from pack_175 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Integrations/integration_0/integration_0.yml was changed from pack_176 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Scripts/script0/script0.yml was changed from pack_177 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Classifiers/classifier-test_classifier.json was changed from pack_178 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Lists/list-list.json was changed from pack_179 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Jobs/job-job.json was changed from pack_180 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Dashboards/dashboard-dashboard.json was changed from pack_181 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/IncidentTypes/incidenttype-incident_type.json was changed from pack_182 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/IncidentFields/incidentfield-incident_field.json was changed from pack_183 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Reports/report-report.json was changed from pack_184 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/XSIAMReports/xsiam_report.json was changed from pack_185 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/XSIAMDashboards/xsiam_dashboard.json was changed from pack_186 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/XDRCTemplates/pack_187_xdrc_template/xdrc_template.json was changed from pack_187 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/AssetsModelingRules/assets_modeling_rule/assets_modeling_rule.yml was changed from pack_188 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Triggers/trigger.json was changed from pack_189 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Layouts/layout-layout.json was changed from pack_190 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Widgets/widget-widget.json was changed from pack_191 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/IndicatorFields/indicatorfield-indicator_field.json was changed from pack_192 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Wizards/wizard-test_wizard.json was changed from pack_193 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/GenericDefinitions/genericdefinition-generic_definition.json was changed from pack_194 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/GenericFields/generic_field/genericfield-generic_field.json was changed from pack_195 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/GenericTypes/generic_type/generictype-generic_type.json was changed from pack_196 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/GenericModules/genericmodule-generic_module.json was changed from pack_197 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Classifiers/classifier-mapper-incoming_mapper.json was changed from pack_198 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/Classifiers/classifier-mapper-outgoing_mapper.json was changed from pack_199 to newPackName, please undo.',
'Pack name for a content item with path /newPackName/IndicatorTypes/reputation-indicator_type.json was changed from pack_200 to newPackName, please undo.',
],
),
],
)
def test_ValidPackNameValidator_is_valid(content_items, expected_number_of_failures, expected_msgs):
"""
Given:
content_items (Pack).
- Case 1: A Pack content item that its name has changed.
- Case 2: A Pack content item that its name hasn't changed.
When:
- Calling the PackNameValidator is_valid function.
Then:
- Make sure the right amount of pack name failed, and that the right error message is returned.
- Case 1: Should fail.
- Case 2: Shouldn't fail.
"""
old_content_items = copy.deepcopy(content_items)
create_old_file_pointers(content_items, old_content_items)
for content_item in content_items:
content_item_parts = list(content_item.path.parts)
packs_folder_index = content_item_parts.index(PACKS_FOLDER) + 1
content_item_parts[packs_folder_index] = "newPackName"
new_path = Path(*content_item_parts)
content_item.path = new_path
results = PackNameValidator().is_valid(content_items)
assert len(results) == expected_number_of_failures
assert all(
[
result.message == expected_msg
for result, expected_msg in zip(results, expected_msgs)
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@

from __future__ import annotations

from typing import Iterable, List, Union

from demisto_sdk.commands.common.constants import PACKS_FOLDER
from demisto_sdk.commands.common.tools import get_pack_name
from demisto_sdk.commands.content_graph.objects.assets_modeling_rule import (
AssetsModelingRule,
)
from demisto_sdk.commands.content_graph.objects.base_playbook import BasePlaybook
from demisto_sdk.commands.content_graph.objects.base_script import BaseScript
from demisto_sdk.commands.content_graph.objects.classifier import Classifier
from demisto_sdk.commands.content_graph.objects.correlation_rule import CorrelationRule
from demisto_sdk.commands.content_graph.objects.dashboard import Dashboard
from demisto_sdk.commands.content_graph.objects.generic_definition import (
GenericDefinition,
)
from demisto_sdk.commands.content_graph.objects.generic_field import GenericField
from demisto_sdk.commands.content_graph.objects.generic_module import GenericModule
from demisto_sdk.commands.content_graph.objects.generic_type import GenericType
from demisto_sdk.commands.content_graph.objects.incident_field import IncidentField
from demisto_sdk.commands.content_graph.objects.incident_type import IncidentType
from demisto_sdk.commands.content_graph.objects.indicator_field import IndicatorField
from demisto_sdk.commands.content_graph.objects.indicator_type import IndicatorType
from demisto_sdk.commands.content_graph.objects.integration import Integration
from demisto_sdk.commands.content_graph.objects.job import Job
from demisto_sdk.commands.content_graph.objects.layout import Layout
from demisto_sdk.commands.content_graph.objects.layout_rule import LayoutRule
from demisto_sdk.commands.content_graph.objects.list import List
from demisto_sdk.commands.content_graph.objects.mapper import Mapper
from demisto_sdk.commands.content_graph.objects.modeling_rule import ModelingRule
from demisto_sdk.commands.content_graph.objects.pack import Pack
from demisto_sdk.commands.content_graph.objects.parsing_rule import ParsingRule
from demisto_sdk.commands.content_graph.objects.playbook import Playbook
from demisto_sdk.commands.content_graph.objects.pre_process_rule import PreProcessRule
from demisto_sdk.commands.content_graph.objects.relationship import RelationshipData
from demisto_sdk.commands.content_graph.objects.report import Report
from demisto_sdk.commands.content_graph.objects.script import Script
from demisto_sdk.commands.content_graph.objects.test_playbook import TestPlaybook
from demisto_sdk.commands.content_graph.objects.test_script import TestScript
from demisto_sdk.commands.content_graph.objects.trigger import Trigger
from demisto_sdk.commands.content_graph.objects.widget import Widget
from demisto_sdk.commands.content_graph.objects.wizard import Wizard
from demisto_sdk.commands.content_graph.objects.xdrc_template import XDRCTemplate
from demisto_sdk.commands.content_graph.objects.xsiam_dashboard import XSIAMDashboard
from demisto_sdk.commands.content_graph.objects.xsiam_report import XSIAMReport
from demisto_sdk.commands.validate.validators.base_validator import (
BaseValidator,
GitStatuses,
ValidationResult,
)

ContentTypes = Union[
GenericDefinition,
GenericField,
GenericModule,
GenericType,
List,
Mapper,
Classifier,
Widget,
Integration,
Dashboard,
IncidentType,
Script,
Playbook,
Report,
Wizard,
Job,
Layout,
PreProcessRule,
CorrelationRule,
ParsingRule,
ModelingRule,
XSIAMDashboard,
Trigger,
XSIAMReport,
IncidentField,
IndicatorField,
AssetsModelingRule,
LayoutRule,
BasePlaybook,
BaseScript,
IndicatorType,
Pack,
TestPlaybook,
TestScript,
XDRCTemplate
]
class PackNameValidator(BaseValidator[ContentTypes]):
error_code = "BA114"
description = "Validate that the name of the pack for a content item was not changed."
error_message = "Pack name for a content item with path {0} was changed from {1} to {2}, please undo."
related_field = "path"
expected_git_statuses = [GitStatuses.RENAMED]
new_pack_name = ''
old_pack_name = ''
new_path = ''

def is_valid(self, content_items: Iterable[ContentTypes]) -> List[ValidationResult]:
return [
ValidationResult(
validator=self,
message=self.error_message.format(
self.new_path,
self.old_pack_name,
self.new_pack_name,
),
content_object=content_item,
)
for content_item in content_items
if self.pack_name_has_changed(content_item)
]

def pack_name_has_changed(self, content_item: ContentTypes):
old_pack_name = get_pack_name(content_item.old_base_content_object.path)
new_pack_name = get_pack_name(content_item.path)
name_has_changed = new_pack_name != old_pack_name
if name_has_changed:
self.new_pack_name = new_pack_name
self.old_pack_name = old_pack_name
self.new_path = str(content_item.path).split(PACKS_FOLDER)[-1]
return name_has_changed

0 comments on commit 23d036a

Please sign in to comment.