"No","テストID","対象クラス","対象メソッド","テスト観点","テストケース名","前提条件","入力値","期待結果","優先度","備考"
"1","UT-CHN-001","Channel::Api","name","正常系","チャネル名がAPIとして返却されること","なし","なし","'API'が返却される","低","表示用メソッド"
"2","UT-CHN-002","Channel::Api","has_secure_token :identifier","正常系","識別子トークンが自動生成されること","新規Channel::Api作成時","なし","ユニークなidentifierが生成される","高","認証・識別に使用"
"3","UT-CHN-003","Channel::Api","has_secure_token :hmac_token","正常系","HMACトークンが自動生成されること","新規Channel::Api作成時","なし","ユニークなhmac_tokenが生成される","高","認証に使用"
"4","UT-CHN-004","Channel::Api","ensure_valid_agent_reply_time_window","正常系","agent_reply_time_windowが正の値の場合バリデーション通過","なし","additional_attributes['agent_reply_time_window'] = 10","バリデーションエラーなし","中","設定値のバリデーション"
"5","UT-CHN-005","Channel::Api","ensure_valid_agent_reply_time_window","異常系","agent_reply_time_windowが0以下の場合エラー","なし","additional_attributes['agent_reply_time_window'] = 0","バリデーションエラー発生","中","境界値チェック"
"6","UT-CHN-006","Channel::Api","ensure_valid_agent_reply_time_window","正常系","agent_reply_time_windowが空の場合バリデーション通過","なし","additional_attributes['agent_reply_time_window'] = nil","バリデーションエラーなし","中","オプション値の許容"
"7","UT-CHN-007","Channel::Api","webhook_url validation","異常系","webhook_urlが最大長を超える場合エラー","なし","webhook_url = 'a' * (Limits::URL_LENGTH_LIMIT + 1)","バリデーションエラー発生","中","URL長制限"
"8","UT-CHN-008","Channel::Email","name","正常系","チャネル名がEmailとして返却されること","なし","なし","'Email'が返却される","低","表示用メソッド"
"9","UT-CHN-009","Channel::Email","microsoft?","正常系","providerがmicrosoftの場合trueを返すこと","provider = 'microsoft'","なし","trueが返却される","中","プロバイダ判定"
"10","UT-CHN-010","Channel::Email","microsoft?","正常系","providerがmicrosoft以外の場合falseを返すこと","provider = 'google'","なし","falseが返却される","中","プロバイダ判定"
"11","UT-CHN-011","Channel::Email","google?","正常系","providerがgoogleの場合trueを返すこと","provider = 'google'","なし","trueが返却される","中","プロバイダ判定"
"12","UT-CHN-012","Channel::Email","google?","正常系","providerがgoogle以外の場合falseを返すこと","provider = 'microsoft'","なし","falseが返却される","中","プロバイダ判定"
"13","UT-CHN-013","Channel::Email","legacy_google?","正常系","IMAP有効かつGmailアドレスの場合trueを返すこと","imap_enabled = true, imap_address = 'imap.gmail.com'","なし","trueが返却される","中","レガシー判定"
"14","UT-CHN-014","Channel::Email","legacy_google?","正常系","IMAP無効の場合falseを返すこと","imap_enabled = false, imap_address = 'imap.gmail.com'","なし","falseが返却される","中","レガシー判定"
"15","UT-CHN-015","Channel::Email","ensure_forward_to_email","正常系","forward_to_emailが未設定の場合自動生成されること","forward_to_email = nil","なし","ランダムなメールアドレスが生成される","高","メール転送設定"
"16","UT-CHN-016","Channel::Email","ensure_forward_to_email","正常系","forward_to_emailが設定済みの場合変更されないこと","forward_to_email = 'test@example.com'","なし","'test@example.com'が維持される","中","メール転送設定"
"17","UT-CHN-017","Channel::Email","email validation","異常系","重複するemailでエラー","同一emailのChannel::Emailが存在","email = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"18","UT-CHN-018","Channel::Email","forward_to_email validation","異常系","重複するforward_to_emailでエラー","同一forward_to_emailが存在","forward_to_email = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"19","UT-CHN-019","Channel::FacebookPage","name","正常系","チャネル名がFacebookとして返却されること","なし","なし","'Facebook'が返却される","低","表示用メソッド"
"20","UT-CHN-020","Channel::FacebookPage","create_contact_inbox","正常系","ContactInboxが作成されること","inbox存在","instagram_id = '123', name = 'Test'","ContactInboxが返却される","高","コンタクト管理"
"21","UT-CHN-021","Channel::FacebookPage","subscribe","正常系","Webhookサブスクリプションが成功すること","有効なpage_access_token","なし","Facebook APIへのサブスクライブが成功","高","Webhook連携"
"22","UT-CHN-022","Channel::FacebookPage","subscribe","異常系","API失敗時にエラーがログされtrueを返すこと","無効なpage_access_token","なし","例外がrescueされtrueが返却される","中","エラーハンドリング"
"23","UT-CHN-023","Channel::FacebookPage","unsubscribe","正常系","Webhookサブスクリプション解除が成功すること","有効なpage_access_token","なし","Facebook APIへのアンサブスクライブが成功","高","Webhook連携"
"24","UT-CHN-024","Channel::FacebookPage","unsubscribe","異常系","API失敗時にエラーがログされtrueを返すこと","無効なpage_access_token","なし","例外がrescueされtrueが返却される","中","エラーハンドリング"
"25","UT-CHN-025","Channel::FacebookPage","page_id validation","異常系","同一account内で重複するpage_idでエラー","同一account_id, page_idが存在","page_id = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"26","UT-CHN-026","Channel::Instagram","name","正常系","チャネル名がInstagramとして返却されること","なし","なし","'Instagram'が返却される","低","表示用メソッド"
"27","UT-CHN-027","Channel::Instagram","create_contact_inbox","正常系","ContactInboxが作成されること","inbox存在","instagram_id = '123', name = 'Test'","ContactInboxが返却される","高","コンタクト管理"
"28","UT-CHN-028","Channel::Instagram","subscribe","正常系","Webhookサブスクリプションが成功すること","有効なaccess_token","なし","Instagram APIへのサブスクライブが成功","高","Webhook連携"
"29","UT-CHN-029","Channel::Instagram","subscribe","異常系","API失敗時にエラーがログされtrueを返すこと","無効なaccess_token","なし","例外がrescueされtrueが返却される","中","エラーハンドリング"
"30","UT-CHN-030","Channel::Instagram","unsubscribe","正常系","Webhookサブスクリプション解除が成功すること","有効なaccess_token","なし","Instagram APIへのアンサブスクライブが成功","高","Webhook連携"
"31","UT-CHN-031","Channel::Instagram","unsubscribe","異常系","API失敗時にエラーがログされtrueを返すこと","無効なaccess_token","なし","例外がrescueされtrueが返却される","中","エラーハンドリング"
"32","UT-CHN-032","Channel::Instagram","access_token","正常系","リフレッシュされたaccess_tokenが取得できること","有効なchannel","なし","RefreshOauthTokenServiceからトークンが返却される","高","OAuth認証"
"33","UT-CHN-033","Channel::Instagram","access_token validation","異常系","access_tokenが空の場合エラー","なし","access_token = nil","presenceエラー発生","高","必須チェック"
"34","UT-CHN-034","Channel::Instagram","instagram_id validation","異常系","instagram_idが重複する場合エラー","同一instagram_idが存在","instagram_id = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"35","UT-CHN-035","Channel::Line","name","正常系","チャネル名がLINEとして返却されること","なし","なし","'LINE'が返却される","低","表示用メソッド"
"36","UT-CHN-036","Channel::Line","client","正常系","Line::Bot::Clientが正しく初期化されること","有効なline_channel_id, secret, token","なし","設定されたクライアントが返却される","高","LINE SDK連携"
"37","UT-CHN-037","Channel::Line","line_channel_id validation","異常系","重複するline_channel_idでエラー","同一line_channel_idが存在","line_channel_id = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"38","UT-CHN-038","Channel::Line","line_channel_id validation","異常系","line_channel_idが空の場合エラー","なし","line_channel_id = nil","presenceエラー発生","高","必須チェック"
"39","UT-CHN-039","Channel::Line","line_channel_secret validation","異常系","line_channel_secretが空の場合エラー","なし","line_channel_secret = nil","presenceエラー発生","高","必須チェック"
"40","UT-CHN-040","Channel::Line","line_channel_token validation","異常系","line_channel_tokenが空の場合エラー","なし","line_channel_token = nil","presenceエラー発生","高","必須チェック"
"41","UT-CHN-041","Channel::Sms","name","正常系","チャネル名がSmsとして返却されること","なし","なし","'Sms'が返却される","低","表示用メソッド"
"42","UT-CHN-042","Channel::Sms","api_base_path","正常系","BandwidthのベースURLが返却されること","なし","なし","'https://messaging.bandwidth.com/api/v2'が返却される","中","API設定"
"43","UT-CHN-043","Channel::Sms","send_message","正常系","メッセージが正常に送信されること","有効なprovider_config, メッセージ存在","contact_number, message","message_idが返却される","高","メッセージ送信"
"44","UT-CHN-044","Channel::Sms","send_message","正常系","添付ファイル付きメッセージが送信されること","有効なprovider_config, 添付ファイルあり","contact_number, message with attachments","message_idが返却される","高","メディア送信"
"45","UT-CHN-045","Channel::Sms","send_message","異常系","API失敗時にメッセージがfailedになること","無効なprovider_config","contact_number, message","message.status = :failed, nilが返却される","高","エラーハンドリング"
"46","UT-CHN-046","Channel::Sms","send_text_message","正常系","テキストメッセージが正常に送信されること","有効なprovider_config","contact_number, message_content","message_idが返却される","高","テキスト送信"
"47","UT-CHN-047","Channel::Sms","phone_number validation","異常系","phone_numberが空の場合エラー","なし","phone_number = nil","presenceエラー発生","高","必須チェック"
"48","UT-CHN-048","Channel::Sms","phone_number validation","異常系","重複するphone_numberでエラー","同一phone_numberが存在","phone_number = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"49","UT-CHN-049","Channel::Telegram","name","正常系","チャネル名がTelegramとして返却されること","なし","なし","'Telegram'が返却される","低","表示用メソッド"
"50","UT-CHN-050","Channel::Telegram","telegram_api_url","正常系","TelegramのAPIURLが正しく構築されること","bot_token = 'test_token'","なし","'https://api.telegram.org/bottest_token'が返却される","中","API設定"
"51","UT-CHN-051","Channel::Telegram","send_message_on_telegram","正常系","テキストメッセージが送信されること","有効なbot_token, message.outgoing_content存在","message","message_idが返却される","高","メッセージ送信"
"52","UT-CHN-052","Channel::Telegram","send_message_on_telegram","正常系","添付ファイルが送信されること","有効なbot_token, message.attachments存在","message with attachments","message_idが返却される","高","メディア送信"
"53","UT-CHN-053","Channel::Telegram","get_telegram_profile_image","正常系","プロフィール画像URLが取得できること","有効なbot_token, ユーザーに画像あり","user_id","画像URLが返却される","中","プロフィール取得"
"54","UT-CHN-054","Channel::Telegram","get_telegram_profile_image","正常系","画像がない場合nilが返却されること","有効なbot_token, ユーザーに画像なし","user_id","nilが返却される","中","空データ処理"
"55","UT-CHN-055","Channel::Telegram","get_telegram_profile_image","異常系","API失敗時にnilが返却されること","無効なbot_token","user_id","nilが返却される","中","エラーハンドリング"
"56","UT-CHN-056","Channel::Telegram","get_telegram_file_path","正常系","ファイルパスURLが取得できること","有効なbot_token","file_id","ファイルURLが返却される","中","ファイル取得"
"57","UT-CHN-057","Channel::Telegram","get_telegram_file_path","異常系","API失敗時にnilが返却されること","無効なbot_token","file_id","nilが返却される","中","エラーハンドリング"
"58","UT-CHN-058","Channel::Telegram","process_error","正常系","APIエラー時にメッセージがfailedになること","response['ok'] = false","message, response","message.status = :failed, external_errorが設定される","高","エラーハンドリング"
"59","UT-CHN-059","Channel::Telegram","process_error","正常系","API成功時は何も変更されないこと","response['ok'] = true","message, response","messageに変更なし","中","正常処理"
"60","UT-CHN-060","Channel::Telegram","chat_id","正常系","会話からchat_idが取得できること","conversation.additional_attributes['chat_id']存在","message","chat_idが返却される","中","会話管理"
"61","UT-CHN-061","Channel::Telegram","business_connection_id","正常系","会話からbusiness_connection_idが取得できること","conversation.additional_attributes['business_connection_id']存在","message","business_connection_idが返却される","中","ビジネス連携"
"62","UT-CHN-062","Channel::Telegram","reply_to_message_id","正常系","返信先message_idが取得できること","message.content_attributes['in_reply_to_external_id']存在","message","in_reply_to_external_idが返却される","中","返信機能"
"63","UT-CHN-063","Channel::Telegram","ensure_valid_bot_token","正常系","有効なbot_tokenでbot_nameが設定されること","getMe API成功","なし","bot_nameが設定される","高","トークン検証"
"64","UT-CHN-064","Channel::Telegram","ensure_valid_bot_token","異常系","無効なbot_tokenでエラーが追加されること","getMe API失敗","なし","errors[:bot_token]にエラー追加","高","トークン検証"
"65","UT-CHN-065","Channel::Telegram","setup_telegram_webhook","正常系","Webhookが正常に設定されること","有効なbot_token","なし","setWebhook APIが成功","高","Webhook設定"
"66","UT-CHN-066","Channel::Telegram","setup_telegram_webhook","異常系","Webhook設定失敗時にエラーが追加されること","setWebhook API失敗","なし","errors[:bot_token]にエラー追加","高","Webhook設定"
"67","UT-CHN-067","Channel::Telegram","bot_token validation","異常系","bot_tokenが空の場合エラー","なし","bot_token = nil","presenceエラー発生","高","必須チェック"
"68","UT-CHN-068","Channel::Telegram","bot_token validation","異常系","重複するbot_tokenでエラー","同一bot_tokenが存在","bot_token = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"69","UT-CHN-069","Channel::Tiktok","name","正常系","チャネル名がTiktokとして返却されること","なし","なし","'Tiktok'が返却される","低","表示用メソッド"
"70","UT-CHN-070","Channel::Tiktok","validated_access_token","正常系","検証済みaccess_tokenが取得できること","有効なchannel","なし","TokenServiceからトークンが返却される","高","OAuth認証"
"71","UT-CHN-071","Channel::Tiktok","business_id validation","異常系","business_idが重複する場合エラー","同一business_idが存在","business_id = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"72","UT-CHN-072","Channel::Tiktok","business_id validation","異常系","business_idが空の場合エラー","なし","business_id = nil","presenceエラー発生","高","必須チェック"
"73","UT-CHN-073","Channel::Tiktok","access_token validation","異常系","access_tokenが空の場合エラー","なし","access_token = nil","presenceエラー発生","高","必須チェック"
"74","UT-CHN-074","Channel::Tiktok","refresh_token validation","異常系","refresh_tokenが空の場合エラー","なし","refresh_token = nil","presenceエラー発生","高","必須チェック"
"75","UT-CHN-075","Channel::Tiktok","expires_at validation","異常系","expires_atが空の場合エラー","なし","expires_at = nil","presenceエラー発生","高","必須チェック"
"76","UT-CHN-076","Channel::Tiktok","refresh_token_expires_at validation","異常系","refresh_token_expires_atが空の場合エラー","なし","refresh_token_expires_at = nil","presenceエラー発生","高","必須チェック"
"77","UT-CHN-077","Channel::TwilioSms","name","正常系","mediumがsmsの場合Twilio SMSが返却されること","medium = 'sms'","なし","'Twilio SMS'が返却される","低","表示用メソッド"
"78","UT-CHN-078","Channel::TwilioSms","name","正常系","mediumがwhatsappの場合Whatsappが返却されること","medium = 'whatsapp'","なし","'Whatsapp'が返却される","低","表示用メソッド"
"79","UT-CHN-079","Channel::TwilioSms","send_message","正常系","メッセージが正常に送信されること","有効なaccount_sid, auth_token","to, body","Twilio APIでメッセージ作成成功","高","メッセージ送信"
"80","UT-CHN-080","Channel::TwilioSms","send_message","正常系","メディア付きメッセージが送信されること","有効なaccount_sid, auth_token","to, body, media_url","media_url含むメッセージ作成成功","高","メディア送信"
"81","UT-CHN-081","Channel::TwilioSms","send_message","正常系","messaging_service_sid使用時に正しくfromが設定されること","messaging_service_sid設定済み","to, body","messaging_service_sidが使用される","中","送信元設定"
"82","UT-CHN-082","Channel::TwilioSms","send_message","正常系","phone_number使用時に正しくfromが設定されること","phone_number設定済み, messaging_service_sidなし","to, body","phone_numberがfromに使用される","中","送信元設定"
"83","UT-CHN-083","Channel::TwilioSms","client","正常系","api_key_sid存在時にAPIキー認証でクライアント作成","api_key_sid設定済み","なし","api_key_sidを使用したクライアント","中","認証方式"
"84","UT-CHN-084","Channel::TwilioSms","client","正常系","api_key_sidなしの場合account_sid認証でクライアント作成","api_key_sidなし","なし","account_sidを使用したクライアント","中","認証方式"
"85","UT-CHN-085","Channel::TwilioSms","account_sid validation","異常系","account_sidが空の場合エラー","なし","account_sid = nil","presenceエラー発生","高","必須チェック"
"86","UT-CHN-086","Channel::TwilioSms","auth_token validation","異常系","auth_tokenが空の場合エラー","なし","auth_token = nil","presenceエラー発生","高","必須チェック"
"87","UT-CHN-087","Channel::TwilioSms","messaging_service_sid validation","正常系","phone_numberなしでmessaging_service_sid必須","phone_number = nil","messaging_service_sid = 'MSG123'","バリデーション通過","中","条件付き必須"
"88","UT-CHN-088","Channel::TwilioSms","messaging_service_sid validation","異常系","phone_numberもmessaging_service_sidもない場合エラー","なし","phone_number = nil, messaging_service_sid = nil","presenceエラー発生","高","条件付き必須"
"89","UT-CHN-089","Channel::TwilioSms","phone_number validation","異常系","messaging_service_sid存在時にphone_numberありでエラー","messaging_service_sid設定済み","phone_number = '+1234567890'","absenceエラー発生","中","排他制約"
"90","UT-CHN-090","Channel::TwilioSms","phone_number validation","異常系","重複するphone_numberでエラー","同一phone_numberが存在","phone_number = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"91","UT-CHN-091","Channel::TwilioSms","messaging_service_sid validation","異常系","重複するmessaging_service_sidでエラー","同一messaging_service_sidが存在","messaging_service_sid = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"92","UT-CHN-092","Channel::TwitterProfile","name","正常系","チャネル名がTwitterとして返却されること","なし","なし","'Twitter'が返却される","低","表示用メソッド"
"93","UT-CHN-093","Channel::TwitterProfile","create_contact_inbox","正常系","ContactInboxが作成されること","inbox存在","profile_id, name, additional_attributes","ContactInboxが返却される","高","コンタクト管理"
"94","UT-CHN-094","Channel::TwitterProfile","twitter_client","正常系","Twitty::Facadeが正しく初期化されること","有効なtwitter_access_token, secret","なし","設定されたクライアントが返却される","高","Twitter SDK連携"
"95","UT-CHN-095","Channel::TwitterProfile","unsubscribe","正常系","サブスクリプション解除が成功すること","有効なtwitter_access_token","なし","remove_subscriptionが呼ばれる","中","Webhook連携"
"96","UT-CHN-096","Channel::TwitterProfile","unsubscribe","異常系","API失敗時にエラーがログされること","無効なtwitter_access_token","なし","例外がrescueされログ出力","中","エラーハンドリング"
"97","UT-CHN-097","Channel::TwitterProfile","profile_id validation","異常系","同一account内で重複するprofile_idでエラー","同一account_id, profile_idが存在","profile_id = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"98","UT-CHN-098","Channel::WebWidget","name","正常系","チャネル名がWebsiteとして返却されること","なし","なし","'Website'が返却される","低","表示用メソッド"
"99","UT-CHN-099","Channel::WebWidget","web_widget_script","正常系","埋め込みスクリプトが正しく生成されること","website_token存在","なし","website_tokenを含むscriptタグが返却される","中","ウィジェット埋め込み"
"100","UT-CHN-100","Channel::WebWidget","validate_pre_chat_options","正常系","pre_chat_fieldsが空の場合デフォルト値が設定されること","pre_chat_form_options = {}","なし","デフォルトのpre_chat_fieldsが設定される","中","デフォルト値設定"
"101","UT-CHN-101","Channel::WebWidget","validate_pre_chat_options","正常系","pre_chat_fieldsが設定済みの場合変更されないこと","pre_chat_form_options['pre_chat_fields']設定済み","なし","既存の設定が維持される","中","設定保持"
"102","UT-CHN-102","Channel::WebWidget","create_contact_inbox","正常系","ContactInboxが作成されること","inbox存在","additional_attributes = {browser: 'Chrome'}","ContactInboxが返却される","高","コンタクト管理"
"103","UT-CHN-103","Channel::WebWidget","has_secure_token :website_token","正常系","ウェブサイトトークンが自動生成されること","新規WebWidget作成時","なし","ユニークなwebsite_tokenが生成される","高","認証・識別に使用"
"104","UT-CHN-104","Channel::WebWidget","has_secure_token :hmac_token","正常系","HMACトークンが自動生成されること","新規WebWidget作成時","なし","ユニークなhmac_tokenが生成される","高","認証に使用"
"105","UT-CHN-105","Channel::WebWidget","website_url validation","異常系","website_urlが空の場合エラー","なし","website_url = nil","presenceエラー発生","高","必須チェック"
"106","UT-CHN-106","Channel::WebWidget","widget_color validation","異常系","widget_colorが空の場合エラー","なし","widget_color = nil","presenceエラー発生","高","必須チェック"
"107","UT-CHN-107","Channel::WebWidget","feature_flags","正常系","attachmentsフラグが正しく設定・取得できること","なし","attachments = true","attachmentsがtrueで取得される","中","機能フラグ"
"108","UT-CHN-108","Channel::WebWidget","feature_flags","正常系","emoji_pickerフラグが正しく設定・取得できること","なし","emoji_picker = true","emoji_pickerがtrueで取得される","中","機能フラグ"
"109","UT-CHN-109","Channel::WebWidget","feature_flags","正常系","end_conversationフラグが正しく設定・取得できること","なし","end_conversation = true","end_conversationがtrueで取得される","中","機能フラグ"
"110","UT-CHN-110","Channel::WebWidget","feature_flags","正常系","use_inbox_avatar_for_botフラグが正しく設定・取得できること","なし","use_inbox_avatar_for_bot = true","use_inbox_avatar_for_botがtrueで取得される","中","機能フラグ"
"111","UT-CHN-111","Channel::WebWidget","reply_time enum","正常系","reply_timeがin_a_few_minutesで設定できること","なし","reply_time = :in_a_few_minutes","reply_time = 0","中","列挙型"
"112","UT-CHN-112","Channel::WebWidget","reply_time enum","正常系","reply_timeがin_a_few_hoursで設定できること","なし","reply_time = :in_a_few_hours","reply_time = 1","中","列挙型"
"113","UT-CHN-113","Channel::WebWidget","reply_time enum","正常系","reply_timeがin_a_dayで設定できること","なし","reply_time = :in_a_day","reply_time = 2","中","列挙型"
"114","UT-CHN-114","Channel::WebWidget","portals association","正常系","関連するportalsが取得できること","portals存在","なし","portalsが返却される","中","リレーション"
"115","UT-CHN-115","Channel::Whatsapp","name","正常系","チャネル名がWhatsappとして返却されること","なし","なし","'Whatsapp'が返却される","低","表示用メソッド"
"116","UT-CHN-116","Channel::Whatsapp","provider_service","正常系","providerがwhatsapp_cloudの場合WhatsappCloudServiceが返却されること","provider = 'whatsapp_cloud'","なし","WhatsappCloudServiceインスタンス","高","プロバイダ切替"
"117","UT-CHN-117","Channel::Whatsapp","provider_service","正常系","providerがdefaultの場合Whatsapp360DialogServiceが返却されること","provider = 'default'","なし","Whatsapp360DialogServiceインスタンス","高","プロバイダ切替"
"118","UT-CHN-118","Channel::Whatsapp","mark_message_templates_updated","正常系","message_templates_last_updatedが更新されること","なし","なし","現在時刻が設定される","中","テンプレート管理"
"119","UT-CHN-119","Channel::Whatsapp","send_message","正常系","メッセージがprovider_service経由で送信されること","有効なprovider_config","メッセージパラメータ","provider_service.send_messageが呼ばれる","高","委譲メソッド"
"120","UT-CHN-120","Channel::Whatsapp","send_template","正常系","テンプレートがprovider_service経由で送信されること","有効なprovider_config","テンプレートパラメータ","provider_service.send_templateが呼ばれる","高","委譲メソッド"
"121","UT-CHN-121","Channel::Whatsapp","sync_templates","正常系","テンプレートがprovider_service経由で同期されること","有効なprovider_config","なし","provider_service.sync_templatesが呼ばれる","高","委譲メソッド"
"122","UT-CHN-122","Channel::Whatsapp","media_url","正常系","メディアURLがprovider_service経由で取得されること","有効なprovider_config","メディアID","provider_service.media_urlが呼ばれる","中","委譲メソッド"
"123","UT-CHN-123","Channel::Whatsapp","api_headers","正常系","APIヘッダーがprovider_service経由で取得されること","有効なprovider_config","なし","provider_service.api_headersが呼ばれる","中","委譲メソッド"
"124","UT-CHN-124","Channel::Whatsapp","setup_webhooks","正常系","Webhookが正常に設定されること","有効なprovider_config, whatsapp_cloud","なし","WebhookSetupServiceが実行される","高","Webhook設定"
"125","UT-CHN-125","Channel::Whatsapp","setup_webhooks","異常系","Webhook設定失敗時にreauthorization要求されること","無効なprovider_config","なし","prompt_reauthorization!が呼ばれる","高","エラーハンドリング"
"126","UT-CHN-126","Channel::Whatsapp","ensure_webhook_verify_token","正常系","whatsapp_cloudの場合webhook_verify_tokenが生成されること","provider = 'whatsapp_cloud', webhook_verify_tokenなし","なし","ランダムなトークンが設定される","中","トークン生成"
"127","UT-CHN-127","Channel::Whatsapp","ensure_webhook_verify_token","正常系","defaultの場合webhook_verify_tokenは生成されないこと","provider = 'default'","なし","webhook_verify_tokenは設定されない","中","プロバイダ依存"
"128","UT-CHN-128","Channel::Whatsapp","validate_provider_config","異常系","無効なprovider_configでエラー","provider_service.validate_provider_config? = false","なし","errors[:provider_config]にエラー追加","高","設定検証"
"129","UT-CHN-129","Channel::Whatsapp","provider validation","異常系","無効なproviderでエラー","なし","provider = 'invalid'","inclusionエラー発生","高","プロバイダ制限"
"130","UT-CHN-130","Channel::Whatsapp","phone_number validation","異常系","phone_numberが空の場合エラー","なし","phone_number = nil","presenceエラー発生","高","必須チェック"
"131","UT-CHN-131","Channel::Whatsapp","phone_number validation","異常系","重複するphone_numberでエラー","同一phone_numberが存在","phone_number = 既存と同じ値","uniquenessエラー発生","高","一意性制約"
"132","UT-CHN-132","Channel::Whatsapp","should_auto_setup_webhooks?","正常系","whatsapp_cloudかつ非embedded_signupの場合trueを返すこと","provider = 'whatsapp_cloud', source != 'embedded_signup'","なし","trueが返却される","中","条件判定"
"133","UT-CHN-133","Channel::Whatsapp","should_auto_setup_webhooks?","正常系","embedded_signupの場合falseを返すこと","provider = 'whatsapp_cloud', source = 'embedded_signup'","なし","falseが返却される","中","条件判定"
"134","UT-CHN-134","Channel::Whatsapp","should_auto_setup_webhooks?","正常系","defaultプロバイダの場合falseを返すこと","provider = 'default'","なし","falseが返却される","中","条件判定"
