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.

Files changed (33) hide show
  1. regscale/_version.py +1 -1
  2. regscale/core/app/application.py +1 -1
  3. regscale/integrations/commercial/defender.py +9 -0
  4. regscale/integrations/commercial/synqly/vulnerabilities.py +33 -0
  5. regscale/integrations/commercial/wizv2/async_client.py +325 -0
  6. regscale/integrations/commercial/wizv2/constants.py +756 -0
  7. regscale/integrations/commercial/wizv2/scanner.py +1301 -89
  8. regscale/integrations/commercial/wizv2/utils.py +280 -36
  9. regscale/integrations/commercial/wizv2/variables.py +2 -10
  10. regscale/integrations/scanner_integration.py +58 -2
  11. regscale/integrations/variables.py +1 -0
  12. regscale/models/integration_models/cisa_kev_data.json +8 -8
  13. regscale/models/integration_models/synqly_models/capabilities.json +1 -1
  14. regscale/models/regscale_models/__init__.py +13 -0
  15. regscale/models/regscale_models/classification.py +23 -0
  16. regscale/models/regscale_models/cryptography.py +56 -0
  17. regscale/models/regscale_models/deviation.py +4 -4
  18. regscale/models/regscale_models/group.py +3 -2
  19. regscale/models/regscale_models/interconnection.py +1 -1
  20. regscale/models/regscale_models/issue.py +140 -41
  21. regscale/models/regscale_models/milestone.py +40 -0
  22. regscale/models/regscale_models/property.py +0 -1
  23. regscale/models/regscale_models/regscale_model.py +29 -18
  24. regscale/models/regscale_models/team.py +55 -0
  25. {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/METADATA +1 -1
  26. {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/RECORD +33 -27
  27. tests/regscale/core/test_app.py +17 -0
  28. tests/regscale/integrations/test_property_and_milestone_creation.py +684 -0
  29. tests/regscale/models/test_report.py +105 -29
  30. {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/LICENSE +0 -0
  31. {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/WHEEL +0 -0
  32. {regscale_cli-6.20.9.0.dist-info → regscale_cli-6.20.10.0.dist-info}/entry_points.txt +0 -0
  33. {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.fixtures.test_fixture import CLITestFixture
4
-
5
-
6
- class TestImport(CLITestFixture):
7
- """
8
- Test for Report Generator
9
- """
10
-
11
- def test_basic_report(self):
12
- """
13
- Test the basic report
14
- """
15
- assets = Asset.get_all_by_parent(3, "securityplans")
16
- ReportGenerator(assets)
17
-
18
- def test_advanced_report(self):
19
- """
20
- Test the advanced report
21
- """
22
- assets = Asset.get_all_by_parent(3, "securityplans")
23
- ReportGenerator(objects=assets, to_file=True, report_name="test_report")
24
-
25
- def test_save_to_regscale(self):
26
- """
27
- Test saving the report to Regscale
28
- """
29
- assets = Asset.get_all_by_parent(3, "securityplans")
30
- ReportGenerator(
31
- objects=assets, to_file=True, report_name="test_report", regscale_id=3, regscale_module="securityplans"
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 == []