Add local Windows Server inventory collection and validation; include core package

This commit is contained in:
2026-10-30 11:24:40 -07:00
parent 967b2bd46a
commit f65ade9fff
35 changed files with 2200 additions and 56 deletions

View File

@@ -83,7 +83,7 @@ class UITests(unittest.TestCase):
self.assertIn('LOCAL LINUX INVENTORY', report.read_text())
window.close()
def test_mismatched_profile_and_windows_unavailable_keep_prior_results(self):
def test_mismatched_profile_and_windows_failure_keep_prior_results(self):
window = MainWindow()
window.collection_done(collect_demo(LINUX_DEMO_HOST))
previous = window.data
@@ -95,10 +95,11 @@ class UITests(unittest.TestCase):
collector.assert_not_called()
self.assertIn('does not match', window.status.text())
self.assertIs(window.data, previous)
with patch('samsara.ui.window.detect_local_os', return_value={'platform': 'windows', 'family': 'windows', 'version': '', 'name': 'Windows'}):
with patch('samsara.ui.window.detect_local_os', return_value={'platform': 'windows', 'family': 'windows', 'version': '', 'name': 'Windows'}), patch('samsara.ui.window.collect_local_windows', side_effect=ValueError('Windows identity collection failed.')):
window.start_collection()
self.finish(window)
self.assertIn('not available yet', window.status.text())
self.assertIn('identity collection failed', window.status.text())
self.assertIs(window.data, previous)
window.close()
def test_import_requires_file_and_reads_recorded_os(self):
@@ -114,3 +115,29 @@ class UITests(unittest.TestCase):
loader.assert_called_once_with('/tmp/saved-inventory.json')
detect.assert_not_called()
window.close()
def test_windows_local_route_preserves_summary_history_and_export(self):
import json
data = json.loads(Path('tests/fixtures/windows/server-2025.json').read_text())
data['synthetic'] = False
data['server']['collection_source'] = 'Local Windows read-only collection'
with patch('samsara.ui.window.detect_local_os', return_value={'platform': 'windows', 'family': 'windows', 'version': '', 'name': 'Windows'}), patch('samsara.ui.window.collect_local_windows', return_value=data) as collector, patch('samsara.ui.window.collect_local_linux') as linux:
window = MainWindow()
window.target.setCurrentIndex(window.target.findData('windows:2025'))
window.start_collection()
self.assertFalse(window.analyze_button.isEnabled())
self.finish(window)
collector.assert_called_once()
self.assertEqual(collector.call_args.kwargs['profile'], 'windows:2025')
linux.assert_not_called()
self.assertIn('Local Windows', window.banner.text())
self.assertIn('2025', window.os_version.text())
self.assertEqual(len(window.records), 1)
self.assertEqual(window.nav.currentRow(), 0)
self.assertTrue(window.report_buttons[0].isEnabled())
with tempfile.TemporaryDirectory() as folder:
report = Path(folder)/'windows.html'
with patch('samsara.ui.window.QFileDialog.getSaveFileName', return_value=(str(report), '')), patch('samsara.ui.window.QMessageBox.information'):
window.quick_save.click()
self.assertIn('LOCAL WINDOWS INVENTORY', report.read_text())
window.close()