def test_should_fail_when_sas_logical_interconnect_not_found(self):
        self.resource.get_by.return_value = []
        self.resource.update_firmware.return_value = self.response

        self.mock_ansible_module.params = yaml.load(
            self.YAML_FIRMWARE_WITH_SPP_URI)

        SasLogicalInterconnectModule().run()

        self.mock_ansible_module.fail_json.assert_called_once_with(
            msg=SAS_LOGICAL_INTERCONNECT_NOT_FOUND)
    def test_should_fail_when_sas_logical_interconnect_not_found(self):
        # Mock OneView resource functions
        self.resource.get_by.return_value = []

        # Mock Ansible params
        self.mock_ansible_module.params = yaml.load(self.YAML_CONFIGURATION)

        SasLogicalInterconnectModule().run()

        self.mock_ansible_module.fail_json.assert_called_once_with(
            msg=SAS_LOGICAL_INTERCONNECT_NOT_FOUND)
    def test_should_fail_when_compliance_cannot_resolve_names(self):
        # Mock OneView resource functions
        self.resource.get_by.return_value = []

        # Mock Ansible params
        self.mock_ansible_module.params = yaml.load(
            self.YAML_PARAMS_COMPLIANCE_NAMES)

        SasLogicalInterconnectModule().run()

        self.mock_ansible_module.fail_json.assert_called_once_with(
            msg=SAS_LOGICAL_INTERCONNECT_NOT_FOUND)
    def test_should_fail_when_no_uris_provided(self):
        # Mock OneView resource functions
        self.resource.get_by.return_value = None

        # Mock Ansible params
        self.mock_ansible_module.params = yaml.load(
            self.YAML_PARAMS_COMPLIANCE_INVALID)

        SasLogicalInterconnectModule().run()

        self.mock_ansible_module.fail_json.assert_called_once_with(
            msg=SAS_LOGICAL_INTERCONNECT_NO_OPTIONS_PROVIDED)
    def test_should_update_configuration(self):
        # Mock OneView resource functions
        self.resource.get_by.return_value = [SAS_LOGICAL_INTERCONNECT]
        self.resource.update_configuration.return_value = SAS_LOGICAL_INTERCONNECT

        # Mock Ansible params
        self.mock_ansible_module.params = yaml.load(self.YAML_CONFIGURATION)

        SasLogicalInterconnectModule().run()

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            msg=SAS_LOGICAL_INTERCONNECT_CONFIGURATION_UPDATED,
            ansible_facts=dict(
                sas_logical_interconnect=SAS_LOGICAL_INTERCONNECT))
    def test_should_update_firmware_when_spp_uri_set(self):
        self.resource.get_by.return_value = [SAS_LOGICAL_INTERCONNECT]
        self.resource.update_firmware.return_value = self.response

        self.mock_ansible_module.params = yaml.load(
            self.YAML_FIRMWARE_WITH_SPP_URI)

        SasLogicalInterconnectModule().run()

        self.resource.update_firmware.assert_called_once_with(
            self.expected_data, SAS_LOGICAL_INTERCONNECT['uri'])

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            msg=SAS_LOGICAL_INTERCONNECT_FIRMWARE_UPDATED,
            ansible_facts=dict(li_firmware=self.response))
    def test_should_return_to_a_consistent_state_by_uris(self):
        # Mock OneView resource functions
        self.resource.get_by.return_value = [SAS_LOGICAL_INTERCONNECT]
        self.resource.update_compliance_all.return_value = [
            SAS_LOGICAL_INTERCONNECT
        ]

        # Mock Ansible params
        self.mock_ansible_module.params = yaml.load(
            self.YAML_PARAMS_COMPLIANCE_URIS)

        SasLogicalInterconnectModule().run()

        self.resource.update_compliance_all.assert_called_once_with(
            self.EXPECTED_UPDATE_COMPLIANCE_CALL)

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            msg=SAS_LOGICAL_INTERCONNECT_CONSISTENT,
            ansible_facts={})
    def test_should_replace_drive_enclosure(self):
        self.resource.get_by.return_value = [SAS_LOGICAL_INTERCONNECT]
        self.resource.replace_drive_enclosure.return_value = {
            "name": "replaced"
        }

        self.mock_ansible_module.params = yaml.load(
            self.YAML_REPLACE_DRIVE_ENCLOSURE)

        SasLogicalInterconnectModule().run()

        self.resource.replace_drive_enclosure.assert_called_once_with(
            self.mock_ansible_module.params['data']['replace_drive_enclosure'],
            SAS_LOGICAL_INTERCONNECT['uri'])

        self.mock_ansible_module.exit_json.assert_called_once_with(
            changed=True,
            msg=SAS_LOGICAL_INTERCONNECT_DRIVE_ENCLOSURE_REPLACED,
            ansible_facts={"sas_logical_interconnect": {
                "name": "replaced"
            }})