def test_send_checkerror_email_case_error_read_yaml_get_file_message_notice_error_execute_check_security(
            self):
        # patch mock
        patch_get_organization = patch(
            "premembers.repository.pm_organizations.get_organization")
        patch_get_project = patch(
            "premembers.repository.pm_projects.query_key")
        patch_get_cognito_user_info_by_user_name = patch(
            "premembers.common.aws_common.get_cognito_user_info_by_user_name")

        # start mock object
        mock_get_organization = patch_get_organization.start()
        mock_get_project = patch_get_project.start()
        mock_get_cognito_user_info_by_user_name = patch_get_cognito_user_info_by_user_name.start(
        )

        # mock data
        mock_get_organization.side_effect = None
        mock_get_project.side_effect = None
        mock_get_cognito_user_info_by_user_name.return_value = user_info_cognito
        result_mock_read_yaml = mock_common_utils.mock_read_yaml(self)

        # addCleanup stop mock object
        self.addCleanup(patch_get_organization.stop)
        self.addCleanup(patch_get_project.stop)
        self.addCleanup(patch_get_cognito_user_info_by_user_name.stop)
        self.addCleanup(result_mock_read_yaml[1].stop)

        # call function test
        with patch.object(PmLogAdapter, 'error',
                          return_value=None) as mock_method_error:
            with self.assertRaises(PmError):
                awschecksBatch_logic.send_checkerror_email(
                    trace_id, aws_account, check_history_id, organization_id,
                    project_id, error_code, execute_user_id, region_name,
                    check_code_item, data_body)

        # check write log error
        mock_method_error.assert_any_call(
            'エラー通知内容設定ファイルの取得に失敗しました。:s3://premembers-dev-setting/check/notify/mail/message_notice_error_execute_check_security_ja.yaml'
        )

        # check param call function
        result_mock_read_yaml[0].assert_any_call(
            trace_id, 'S3_SETTING_BUCKET',
            copy.deepcopy(
                DataTestS3.
                PATH_FILE_MESSAGE_NOTICE_ERROR_EXECUTE_CHECK_SECURITY_JA))
        result_mock_read_yaml[0].assert_any_call(
            trace_id, 'S3_SETTING_BUCKET',
            copy.deepcopy(DataTestS3.PATH_FILE_CONFIG))
    def test_send_checkerror_email_case_error_read_decode_get_template_body_mail(
            self):
        # patch mock
        patch_get_organization = patch(
            "premembers.repository.pm_organizations.get_organization")
        patch_get_project = patch(
            "premembers.repository.pm_projects.query_key")
        patch_get_cognito_user_info_by_user_name = patch(
            "premembers.common.aws_common.get_cognito_user_info_by_user_name")
        patch_read_decode = patch("premembers.common.FileUtils.read_decode")

        # start mock object
        mock_get_organization = patch_get_organization.start()
        mock_get_project = patch_get_project.start()
        mock_get_cognito_user_info_by_user_name = patch_get_cognito_user_info_by_user_name.start(
        )
        mock_read_decode = patch_read_decode.start()

        # mock data
        mock_get_organization.side_effect = None
        mock_get_project.side_effect = None
        result_mock_read_yaml = mock_common_utils.mock_read_yaml(self, True)
        mock_get_cognito_user_info_by_user_name.return_value = user_info_cognito
        mock_read_decode.side_effect = PmError()

        # addCleanup stop mock object
        self.addCleanup(patch_get_organization.stop)
        self.addCleanup(patch_get_project.stop)
        self.addCleanup(patch_get_cognito_user_info_by_user_name.stop)
        self.addCleanup(result_mock_read_yaml[1].stop)
        self.addCleanup(patch_read_decode.stop)

        # call function test
        with patch.object(PmLogAdapter, 'error',
                          return_value=None) as mock_method_error:
            with self.assertRaises(PmError):
                awschecksBatch_logic.send_checkerror_email(
                    trace_id, aws_account, check_history_id, organization_id,
                    project_id, error_code, execute_user_id, region_name,
                    check_code_item, data_body)

        # check write log error
        mock_method_error.assert_any_call(
            '通知メール本文テンプレートファイルの取得に失敗しました。:s3://premembers-dev-setting/check/notify/mail/notice_error_execute_check_ja.tpl'
        )

        # check param call function
        mock_read_decode.assert_called_once_with(
            trace_id, 'S3_SETTING_BUCKET',
            copy.deepcopy(DataTestS3.PATH_NOTICE_ERROR_EXECUTE_CHECK_JA))
    def test_send_checkerror_email_error_send_email(self):
        # patch mock
        patch_get_organization = patch(
            "premembers.repository.pm_organizations.get_organization")
        patch_get_project = patch(
            "premembers.repository.pm_projects.query_key")
        patch_get_cognito_user_info_by_user_name = patch(
            "premembers.common.aws_common.get_cognito_user_info_by_user_name")
        patch_read_decode = patch("premembers.common.FileUtils.read_decode")
        patch_send_email = patch("premembers.common.aws_common.send_email")

        # start mock object
        mock_get_organization = patch_get_organization.start()
        mock_get_project = patch_get_project.start()
        mock_get_cognito_user_info_by_user_name = patch_get_cognito_user_info_by_user_name.start(
        )
        mock_read_decode = patch_read_decode.start()
        mock_send_email = patch_send_email.start()

        # mock data
        mock_get_organization.side_effect = None
        mock_get_project.side_effect = None
        result_mock_read_yaml = mock_common_utils.mock_read_yaml(self, True)
        mock_get_cognito_user_info_by_user_name.return_value = user_info_cognito
        mock_read_decode.return_value = copy.deepcopy(
            DataTestS3.TEMPLATE_NOTICE_ERROR_EXECUTE_CHECK_JA)
        mock_send_email.side_effect = PmError()

        # addCleanup stop mock object
        self.addCleanup(patch_get_cognito_user_info_by_user_name.stop)
        self.addCleanup(result_mock_read_yaml[1].stop)
        self.addCleanup(patch_read_decode.stop)
        self.addCleanup(patch_send_email.stop)

        # call function test
        with patch.object(PmLogAdapter, 'error',
                          return_value=None) as mock_method_error:
            with self.assertRaises(PmError):
                awschecksBatch_logic.send_checkerror_email(
                    trace_id, aws_account, check_history_id, organization_id,
                    project_id, error_code, execute_user_id, region_name,
                    check_code_item, data_body)

        # check write log error
        mock_method_error.assert_any_call('通知メール送信に失敗しました。')
    def test_execute_send_checkerror_email_handler_success_content_message_send_mail_contain_define_data_error(self):
        # prepare data
        message = {
            "AWSAccount": aws_account,
            "ErrorCode": "error_get_bucket_acl",
            "CheckHistoryId": check_history_id,
            "OrganizationID": organization_id,
            "ProjectID": project_id,
            "ExecuteUserID": "ExecuteUserID",
            "RegionName": "global",
            "CheckCodeItem": "CHECK_CIS12_ITEM_2_03",
            "DataBody": {
                "S3BucketName": "test s3 bucket name"
            }
        }
        even_mock['Records'][0]['Sns']['Message'] = json.dumps(message)

        ses_region = copy.deepcopy(DataTestS3.DATA_CONFIG['ses.region'])
        mail_from = copy.deepcopy(DataTestS3.DATA_CONFIG['mail.from'])
        mail_subject_config = copy.deepcopy(DataTestS3.DATA_CONFIG['ja.checkerror_notice_mail.subject'])
        subject_template = Template(mail_subject_config)
        mail_subject = subject_template.render(project_name=data_pm_project['ProjectName'])
        template_body_mail = copy.deepcopy(DataTestS3.TEMPLATE_NOTICE_ERROR_EXECUTE_CHECK_JA)
        mail_execute_user = jmespath.search(
            "[?Name=='email'].Value | [0]",
            user_info_cognito['UserAttributes'])

        bcc_addresses = [
            mail_execute_user
        ]
        content_message = copy.deepcopy(DataTestS3.MESSAGE_NOTICE_ERROR_EXECUTE_CHECK_SECURITY_JA['error_get_bucket_acl.text'].format_map(message['DataBody']))
        template_body_mail_object = Template(template_body_mail)
        context = {
            'organizationName': data_pm_organization['OrganizationName'],
            'projectName': data_pm_project['ProjectName'],
            'checkCodeItem': 'CIS 2.3',
            'awsAccount': message['AWSAccount'],
            'regionName': message['RegionName'],
            'contentMessage': content_message
        }
        body_mail = template_body_mail_object.render(context)

        # patch mock
        patch_get_cognito_user_info_by_user_name = patch("premembers.common.aws_common.get_cognito_user_info_by_user_name")
        patch_read_decode = patch("premembers.common.FileUtils.read_decode")
        patch_send_email = patch("premembers.common.aws_common.send_email")

        # start mock object
        mock_get_cognito_user_info_by_user_name = patch_get_cognito_user_info_by_user_name.start()
        mock_read_decode = patch_read_decode.start()
        mock_send_email = patch_send_email.start()

        # mock data
        result_mock_read_yaml = mock_common_utils.mock_read_yaml(self, True)
        mock_get_cognito_user_info_by_user_name.return_value = user_info_cognito
        mock_read_decode.return_value = copy.deepcopy(DataTestS3.TEMPLATE_NOTICE_ERROR_EXECUTE_CHECK_JA)
        mock_send_email.side_effect = None

        # addCleanup stop mock object
        self.addCleanup(patch_get_cognito_user_info_by_user_name.stop)
        self.addCleanup(result_mock_read_yaml[1].stop)
        self.addCleanup(patch_read_decode.stop)
        self.addCleanup(patch_send_email.stop)

        # Call function test
        awschecks.execute_send_checkerror_email_handler(even_mock, context_aws)

        # check call send mail
        mock_send_email.assert_called_once_with(message['ExecuteUserID'],
                                                ses_region, mail_from,
                                                bcc_addresses, mail_subject,
                                                body_mail)