regscale-cli 6.20.9.0__py3-none-any.whl → 6.20.10.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of regscale-cli might be problematic. Click here for more details.
- regscale/_version.py +1 -1
- regscale/core/app/application.py +1 -1
- regscale/integrations/commercial/defender.py +9 -0
- regscale/integrations/commercial/synqly/vulnerabilities.py +33 -0
- regscale/integrations/commercial/wizv2/async_client.py +325 -0
- regscale/integrations/commercial/wizv2/constants.py +756 -0
- regscale/integrations/commercial/wizv2/scanner.py +1301 -89
- regscale/integrations/commercial/wizv2/utils.py +280 -36
- regscale/integrations/commercial/wizv2/variables.py +2 -10
- regscale/integrations/scanner_integration.py +58 -2
- regscale/integrations/variables.py +1 -0
- regscale/models/integration_models/cisa_kev_data.json +8 -8
- regscale/models/integration_models/synqly_models/capabilities.json +1 -1
- regscale/models/regscale_models/__init__.py +13 -0
- regscale/models/regscale_models/classification.py +23 -0
- regscale/models/regscale_models/cryptography.py +56 -0
- regscale/models/regscale_models/deviation.py +4 -4
- regscale/models/regscale_models/group.py +3 -2
- regscale/models/regscale_models/interconnection.py +1 -1
- regscale/models/regscale_models/issue.py +140 -41
- regscale/models/regscale_models/milestone.py +40 -0
- regscale/models/regscale_models/property.py +0 -1
- regscale/models/regscale_models/regscale_model.py +29 -18
- regscale/models/regscale_models/team.py +55 -0
- {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/METADATA +1 -1
- {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/RECORD +33 -27
- tests/regscale/core/test_app.py +17 -0
- tests/regscale/integrations/test_property_and_milestone_creation.py +684 -0
- tests/regscale/models/test_report.py +105 -29
- {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/LICENSE +0 -0
- {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/WHEEL +0 -0
- {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/entry_points.txt +0 -0
- {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/top_level.txt +0 -0
|
@@ -1,32 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
import uuid
|
|
4
|
+
from unittest.mock import patch, MagicMock
|
|
5
|
+
import pytest
|
|
6
|
+
|
|
1
7
|
from regscale.core.app.utils.report_utils import ReportGenerator
|
|
2
8
|
from regscale.models import Asset
|
|
3
|
-
from tests
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
""
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def
|
|
19
|
-
"""
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
9
|
+
from tests import CLITestFixture
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class TestReportGenerator(CLITestFixture):
|
|
13
|
+
"""Test for Report Generator with dynamic test data and no hard-coded IDs"""
|
|
14
|
+
|
|
15
|
+
@pytest.fixture(autouse=True)
|
|
16
|
+
def setup_report_test(self):
|
|
17
|
+
"""Setup the test with dynamic test data"""
|
|
18
|
+
self.test_uuid = str(uuid.uuid4())
|
|
19
|
+
self.test_parent_id = int(uuid.uuid4().hex[:8], 16)
|
|
20
|
+
self.test_parent_module = "securityplans"
|
|
21
|
+
self.test_report_name = f"test_report_{self.test_uuid[:8]}"
|
|
22
|
+
|
|
23
|
+
@pytest.fixture
|
|
24
|
+
def mock_assets(self):
|
|
25
|
+
"""Mock assets for testing"""
|
|
26
|
+
assets = []
|
|
27
|
+
for i in range(1, 4):
|
|
28
|
+
asset = MagicMock()
|
|
29
|
+
asset.id = i
|
|
30
|
+
asset.name = f"Test Asset {i}"
|
|
31
|
+
asset.title = f"Test Asset Title {i}"
|
|
32
|
+
asset.description = f"Test asset description {i}"
|
|
33
|
+
asset.status = "Active"
|
|
34
|
+
asset.dateCreated = "2024-01-01 10:00:00"
|
|
35
|
+
asset.dateLastUpdated = "2024-01-01 10:00:00"
|
|
36
|
+
asset.createdById = self.config.get("userId", "1")
|
|
37
|
+
asset.lastUpdatedById = self.config.get("userId", "1")
|
|
38
|
+
assets.append(asset)
|
|
39
|
+
return assets
|
|
40
|
+
|
|
41
|
+
@patch("regscale.models.Asset.get_all_by_parent")
|
|
42
|
+
def test_basic_report(self, mock_get_assets, mock_assets):
|
|
43
|
+
"""Test the basic report generation"""
|
|
44
|
+
mock_get_assets.return_value = mock_assets
|
|
45
|
+
assets = Asset.get_all_by_parent(self.test_parent_id, self.test_parent_module)
|
|
46
|
+
generator = ReportGenerator(assets)
|
|
47
|
+
assert len(generator.objects) == 3
|
|
48
|
+
assert generator.to_file is False
|
|
49
|
+
assert generator.report_name == ""
|
|
50
|
+
assert generator.regscale_id is None
|
|
51
|
+
assert generator.regscale_module is None
|
|
52
|
+
|
|
53
|
+
@patch("regscale.models.Asset.get_all_by_parent")
|
|
54
|
+
def test_advanced_report(self, mock_get_assets, mock_assets):
|
|
55
|
+
"""Test the advanced report generation with file output"""
|
|
56
|
+
mock_get_assets.return_value = mock_assets
|
|
57
|
+
assets = Asset.get_all_by_parent(self.test_parent_id, self.test_parent_module)
|
|
58
|
+
generator = ReportGenerator(objects=assets, to_file=True, report_name=self.test_report_name)
|
|
59
|
+
assert len(generator.objects) == 3
|
|
60
|
+
assert generator.to_file is True
|
|
61
|
+
assert generator.report_name == self.test_report_name
|
|
62
|
+
assert generator.regscale_id is None
|
|
63
|
+
assert generator.regscale_module is None
|
|
64
|
+
|
|
65
|
+
@patch("regscale.models.Asset.get_all_by_parent")
|
|
66
|
+
def test_save_to_regscale(self, mock_get_assets, mock_assets):
|
|
67
|
+
"""Test saving the report to RegScale"""
|
|
68
|
+
mock_get_assets.return_value = mock_assets
|
|
69
|
+
assets = Asset.get_all_by_parent(self.test_parent_id, self.test_parent_module)
|
|
70
|
+
generator = ReportGenerator(
|
|
71
|
+
objects=assets,
|
|
72
|
+
to_file=True,
|
|
73
|
+
report_name=self.test_report_name,
|
|
74
|
+
regscale_id=self.test_parent_id,
|
|
75
|
+
regscale_module=self.test_parent_module,
|
|
32
76
|
)
|
|
77
|
+
assert len(generator.objects) == 3
|
|
78
|
+
assert generator.to_file is True
|
|
79
|
+
assert generator.report_name == self.test_report_name
|
|
80
|
+
assert generator.regscale_id == self.test_parent_id
|
|
81
|
+
assert generator.regscale_module == self.test_parent_module
|
|
82
|
+
|
|
83
|
+
def test_report_data_method(self, mock_assets):
|
|
84
|
+
"""Test the report_data method"""
|
|
85
|
+
generator = ReportGenerator(mock_assets)
|
|
86
|
+
report_data = generator.report_data()
|
|
87
|
+
assert report_data == mock_assets
|
|
88
|
+
assert len(report_data) == 3
|
|
89
|
+
|
|
90
|
+
def test_report_attributes(self, mock_assets):
|
|
91
|
+
"""Test that report attributes are properly set"""
|
|
92
|
+
generator = ReportGenerator(mock_assets)
|
|
93
|
+
assert "id" in generator.attributes
|
|
94
|
+
assert "name" in generator.attributes
|
|
95
|
+
assert "title" in generator.attributes
|
|
96
|
+
assert "description" in generator.attributes
|
|
97
|
+
assert "status" in generator.attributes
|
|
98
|
+
assert "dateCreated" in generator.attributes
|
|
99
|
+
assert "dateLastUpdated" in generator.attributes
|
|
100
|
+
|
|
101
|
+
@patch("regscale.models.Asset.get_all_by_parent")
|
|
102
|
+
def test_empty_objects_report(self, mock_get_assets):
|
|
103
|
+
"""Test report generation with empty objects"""
|
|
104
|
+
mock_get_assets.return_value = []
|
|
105
|
+
assets = Asset.get_all_by_parent(self.test_parent_id, self.test_parent_module)
|
|
106
|
+
generator = ReportGenerator(assets)
|
|
107
|
+
assert len(generator.objects) == 0
|
|
108
|
+
assert generator.attributes == []
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|