def test_get_sca_checks(self, mock):
        """
        Checks sca checks data are properly loaded from database
        """
        with patch('wazuh.utils.WazuhDBConnection') as mock_wdb:
            mock_wdb.return_value = InitWDBSocketMock(sql_schema_file='schema_sca_test.sql')
            result = get_sca_checks('cis_debian', agent_id='000')
            assert(isinstance(result, dict))
            assert ('totalItems' in result)
            assert (isinstance(result['totalItems'], int))
            assert ('items' in result)
            sca = result['items']
            assert(isinstance(sca, list))
            assert(len(sca) > 0)
            assert(set(sca[0].keys()).issubset(set(fields_translation_sca_check.keys()) | {'compliance', 'rules'}))

            compliance = sca[0]['compliance']
            assert(isinstance(compliance, list))
            assert(len(compliance) > 0)
            assert(set(compliance[0].keys()) == set(fields_translation_sca_check_compliance.values()))

            # Check 0 result
            result = get_sca_checks('not_exists', agent_id='000')
            assert(isinstance(result, dict))
            assert ('totalItems' in result)
            assert (isinstance(result['totalItems'], int))
            assert ('items' in result)
            sca = result['items']
            assert(isinstance(sca, list))
            assert(len(sca) == 0)
    def test_get_sca_checks(self):
        """
        Checks sca checks data are properly loaded from database
        """
        with patch('wazuh.security_configuration_assessment.WazuhDBConnection'
                   ) as mock_wdb:
            mock_wdb.return_value.execute.side_effect = get_fake_sca_data
            result = get_sca_checks('cis_debian', agent_id='000')
            assert (isinstance(result, dict))
            assert ('totalItems' in result)
            assert (isinstance(result['totalItems'], int))
            assert ('items' in result)
            sca = result['items']
            assert (isinstance(sca, list))
            assert (len(sca) > 0)
            assert (set(sca[0].keys()).issubset(
                set(fields_translation_sca_check.keys())
                | {'compliance', 'rules'}))

            compliance = sca[0]['compliance']
            assert (isinstance(compliance, list))
            assert (len(compliance) > 0)
            assert (set(compliance[0].keys()) == set(
                fields_translation_sca_check_compliance.values()))

            # Check 0 result
            result = get_sca_checks('not_exists', agent_id='000')
            assert (isinstance(result, dict))
            assert ('totalItems' in result)
            assert (isinstance(result['totalItems'], int))
            assert ('items' in result)
            sca = result['items']
            assert (isinstance(sca, list))
            assert (len(sca) == 0)
 def test_sca_response_without_result(self):
     """
     Test failing when WazuhDB don't return 'items' key into result
     """
     with patch('wazuh.security_configuration_assessment.WazuhDBBackend') as mock_wdb:
         mock_wdb.return_value.connect_to_db.return_value.execute.side_effect = get_fake_sca_data
         with patch('wazuh.security_configuration_assessment.WazuhDBQuerySCA.run', return_value={}):
             with pytest.raises(exception.WazuhException, match=".* 2007 .*"):
                 get_sca_checks('not_exists', agent_id='000')
 def test_sca_checks_select_and_q(self, mock):
     """
     Tests filtering using q parameter and selecting multiple fields
     """
     with patch('wazuh.utils.WazuhDBConnection') as mock_wdb:
         mock_wdb.return_value = InitWDBSocketMock(sql_schema_file='schema_sca_test.sql')
         result = get_sca_checks('cis_debian', agent_id='000', q="rules.type!=file",
                                 select={'fields': ['compliance', 'policy_id', 'result', 'rules']})
         assert result['items'][0]['rules'][0]['type'] != 'file'
         assert set(result['items'][0].keys()).issubset({'compliance', 'policy_id', 'result', 'rules'})
 def test_sca_checks_select_and_q(self):
     """
     Tests filtering using q parameter and selecting multiple fields
     """
     with patch('wazuh.security_configuration_assessment.WazuhDBConnection'
                ) as mock_wdb:
         mock_wdb.return_value.execute.side_effect = get_fake_sca_data
         result = get_sca_checks(
             'cis_debian',
             agent_id='000',
             q="rules.type!=file",
             select={
                 'fields': ['compliance', 'policy_id', 'result', 'rules']
             })
         assert result['items'][0]['rules'][0]['type'] != 'file'
         assert set(result['items'][0].keys()).issubset(
             {'compliance', 'policy_id', 'result', 'rules'})