"No","テストID","対象クラス","対象メソッド","テスト観点","テストケース名","前提条件","入力値","期待結果","優先度","備考"
"1","UT-APP-001","Account","agents","正常系","エージェントロールのユーザーが取得できること","アカウントに複数のユーザーが存在","なし","agentロールのユーザーのみが返却される","高","リレーション経由のフィルタリング"
"2","UT-APP-002","Account","administrators","正常系","管理者ロールのユーザーが取得できること","アカウントに複数のユーザーが存在","なし","administratorロールのユーザーのみが返却される","高","リレーション経由のフィルタリング"
"3","UT-APP-003","Account","all_conversation_tags","正常系","全会話のタグが取得できること","複数の会話にラベルが付与されている","なし","全ラベル名の配列が返却される","中","ActsAsTaggableOn使用"
"4","UT-APP-004","Account","all_conversation_tags","境界値","会話が存在しない場合に空配列が返ること","会話が0件","なし","空の配列が返却される","中",""
"5","UT-APP-005","Account","webhook_data","正常系","Webhook用データが正しく生成されること","アカウントが存在","なし","id, nameを含むハッシュが返却される","中","外部連携用データ生成"
"6","UT-APP-006","Account","inbound_email_domain","正常系","ドメインが設定されている場合にドメインが返ること","domain属性が設定済み","domain='example.com'","'example.com'が返却される","中","メール受信設定"
"7","UT-APP-007","Account","inbound_email_domain","異常系","ドメイン未設定時にGlobalConfigから取得すること","domain属性が未設定","domain=nil","GlobalConfigの値が返却される","中","フォールバック処理"
"8","UT-APP-008","Account","support_email","正常系","サポートメールが設定されている場合にその値が返ること","support_email属性が設定済み","support_email='test@example.com'","'test@example.com'が返却される","中","メール送信設定"
"9","UT-APP-009","Account","support_email","異常系","サポートメール未設定時に環境変数から取得すること","support_email属性が未設定","support_email=nil","ENV['MAILER_SENDER_EMAIL']の値が返却される","中","フォールバック処理"
"10","UT-APP-010","Account","usage_limits","正常系","使用制限が正しく返却されること","なし","なし","agents, inboxesキーを含むハッシュが返却される","中","プラン制限管理"
"11","UT-APP-011","Account","locale_english_name","正常系","ロケールの英語名が返却されること","locale='ja'","なし","'japanese'が返却される","低","ISO_639使用"
"12","UT-APP-012","Account","locale_english_name","異常系","ロケール未設定時に'english'が返ること","locale=nil","なし","'english'が返却される","低","デフォルト値"
"13","UT-APP-013","Account","validate_limit_keys","正常系","バリデーションが正常に通過すること","有効なlimit設定","なし","エラーなし","中","Enterpriseでオーバーライド"
"14","UT-APP-014","Account","remove_account_sequences","正常系","シーケンスが削除されること","アカウント削除時","なし","conv_dpid_seq, camp_dpid_seqが削除される","高","クリーンアップ処理"
"15","UT-APP-015","Account","name validation","異常系","名前が空の場合にバリデーションエラーになること","なし","name=''","presence: trueエラー","高","必須項目"
"16","UT-APP-016","Account","domain validation","境界値","ドメインが100文字を超える場合にエラーになること","なし","domain='a'*101","length: maximumエラー","中","長さ制限"
"17","UT-APP-017","Account","settings validation","異常系","不正なsettingsスキーマの場合にエラーになること","なし","settings={invalid: 'data'}","JsonSchemaValidatorエラー","中","JSONスキーマ検証"
"18","UT-APP-018","User","send_devise_notification","正常系","Devise通知が送信されること","ユーザーが存在","notification=:confirmation_instructions","通知が非同期で送信される","高","認証通知"
"19","UT-APP-019","User","set_password_and_uid","正常系","UID がemailに設定されること","新規ユーザー作成時","email='test@example.com'","uid='test@example.com'になる","高","ユーザー初期化"
"20","UT-APP-020","User","assigned_inboxes","正常系","管理者の場合に全inboxが返ること","管理者ユーザー","なし","Current.accountの全inboxが返却される","高","権限による分岐"
"21","UT-APP-021","User","assigned_inboxes","正常系","エージェントの場合に割当inboxのみ返ること","エージェントユーザー","なし","ユーザーに割当されたinboxのみ返却される","高","権限による分岐"
"22","UT-APP-022","User","serializable_hash","正常系","confirmed属性が含まれること","ユーザーが存在","なし","confirmed: trueまたはfalseが含まれる","中","シリアライズ拡張"
"23","UT-APP-023","User","push_event_data","正常系","プッシュイベント用データが生成されること","ユーザーが存在","なし","id, name, avatar_url等を含むハッシュが返却される","中","WebSocket用データ"
"24","UT-APP-024","User","webhook_data","正常系","Webhook用データが生成されること","ユーザーが存在","なし","id, name, email, typeを含むハッシュが返却される","中","外部連携用データ"
"25","UT-APP-025","User","will_save_change_to_email?","正常系","メール変更時にtrueが返ること","email変更あり","email='new@example.com'","trueが返却される","中","メール再確認フロー"
"26","UT-APP-026","User","from_email","正常系","メールアドレスでユーザーが検索できること","ユーザーが存在","email='test@example.com'","該当ユーザーが返却される","中","クラスメソッド"
"27","UT-APP-027","User","from_email","異常系","存在しないメールでnilが返ること","該当ユーザーなし","email='notfound@example.com'","nilが返却される","中","該当なしケース"
"28","UT-APP-028","User","mfa_service","正常系","MfaManagementServiceインスタンスが返ること","ユーザーが存在","なし","Mfa::ManagementServiceインスタンスが返却される","中","2FA管理"
"29","UT-APP-029","User","mfa_enabled?","正常系","2FA有効時にtrueが返ること","otp_required_for_login=true","なし","trueが返却される","高","セキュリティ機能"
"30","UT-APP-030","User","mfa_feature_available?","正常系","MFA機能が利用可能かどうかが返ること","なし","なし","Chatwoot.mfa_enabled?の値が返却される","中","機能フラグ確認"
"31","UT-APP-031","User","remove_macros","正常系","ユーザー削除時に個人マクロが削除されること","ユーザーが個人マクロを持つ","なし","personalマクロのみ削除される","高","クリーンアップ"
"32","UT-APP-032","User","email validation","異常系","メールが空の場合にエラーになること","なし","email=''","presence: trueエラー","高","必須項目"
"33","UT-APP-033","Conversation","can_reply?","正常系","返信可能な場合にtrueが返ること","会話ウィンドウが有効","なし","trueが返却される","高","メッセージ送信判定"
"34","UT-APP-034","Conversation","can_reply?","異常系","返信不可の場合にfalseが返ること","会話ウィンドウが無効","なし","falseが返却される","高","24時間ルール等"
"35","UT-APP-035","Conversation","language","正常系","会話言語が取得できること","additional_attributesに言語設定あり","additional_attributes={'conversation_language': 'ja'}","'ja'が返却される","中","多言語対応"
"36","UT-APP-036","Conversation","language","異常系","言語設定がない場合にnilが返ること","additional_attributes={}","なし","nilが返却される","中","デフォルト値"
"37","UT-APP-037","Conversation","last_activity_at","正常系","最終活動時刻が返却されること","last_activity_atが設定済み","なし","設定された時刻が返却される","中","タイムスタンプ"
"38","UT-APP-038","Conversation","last_activity_at","異常系","未設定の場合にcreated_atが返ること","last_activity_at=nil","なし","created_atが返却される","中","フォールバック"
"39","UT-APP-039","Conversation","last_incoming_message","正常系","最後の受信メッセージが取得できること","複数メッセージが存在","なし","最新のincomingメッセージが返却される","中","メッセージ検索"
"40","UT-APP-040","Conversation","toggle_status","正常系","openからresolvedに変更できること","status=open","なし","status=resolvedになる","高","ステータス遷移"
"41","UT-APP-041","Conversation","toggle_status","正常系","resolvedからopenに変更できること","status=resolved","なし","status=openになる","高","ステータス遷移"
"42","UT-APP-042","Conversation","toggle_status","正常系","pendingからopenに変更できること","status=pending","なし","status=openになる","高","ステータス遷移"
"43","UT-APP-043","Conversation","toggle_status","正常系","snoozedからopenに変更できること","status=snoozed","なし","status=openになる","高","ステータス遷移"
"44","UT-APP-044","Conversation","toggle_priority","正常系","優先度が設定できること","なし","priority='high'","priority=highになる","中","優先度管理"
"45","UT-APP-045","Conversation","toggle_priority","正常系","優先度をクリアできること","priority=high","priority=nil","priority=nilになる","中","優先度リセット"
"46","UT-APP-046","Conversation","bot_handoff!","正常系","Bot引き継ぎ処理が実行されること","status=pending","なし","status=open, イベント発火","高","Bot連携"
"47","UT-APP-047","Conversation","unread_messages","正常系","未読メッセージが取得できること","agent_last_seen_at設定済み","なし","agent_last_seen_at以降のメッセージが返却される","中","未読管理"
"48","UT-APP-048","Conversation","unread_messages","境界値","agent_last_seen_at未設定時に全メッセージが返ること","agent_last_seen_at=nil","なし","全メッセージが返却される","中","フォールバック"
"49","UT-APP-049","Conversation","assignee_unread_messages","正常系","担当者未読メッセージが取得できること","assignee_last_seen_at設定済み","なし","assignee_last_seen_at以降のメッセージが返却される","中","担当者用未読"
"50","UT-APP-050","Conversation","unread_incoming_messages","正常系","未読受信メッセージ（最大10件）が取得できること","複数の未読メッセージが存在","なし","最大10件のincomingメッセージが返却される","中","通知用"
"51","UT-APP-051","Conversation","cached_label_list_array","正常系","キャッシュされたラベルが配列で取得できること","cached_label_list='tag1,tag2'","なし","['tag1', 'tag2']が返却される","中","タグ管理"
"52","UT-APP-052","Conversation","cached_label_list_array","境界値","cached_label_list=nilの場合に空配列が返ること","cached_label_list=nil","なし","空配列が返却される","中","nilハンドリング"
"53","UT-APP-053","Conversation","notifiable_assignee_change?","正常系","担当者変更通知が必要な場合にtrueが返ること","assignee_idが変更され自己アサインでない","なし","trueが返却される","中","通知判定"
"54","UT-APP-054","Conversation","notifiable_assignee_change?","異常系","自己アサインの場合にfalseが返ること","assignee_id変更が自己アサイン","なし","falseが返却される","中","自己アサイン除外"
"55","UT-APP-055","Conversation","assignee_type","正常系","AgentBot割当時に'AgentBot'が返ること","assignee_agent_bot_id設定済み","なし","'AgentBot'が返却される","中","ポリモーフィック対応"
"56","UT-APP-056","Conversation","assignee_type","正常系","User割当時に'User'が返ること","assignee_id設定済み","なし","'User'が返却される","中","ポリモーフィック対応"
"57","UT-APP-057","Conversation","assignee_type","異常系","未割当時にnilが返ること","両方nil","なし","nilが返却される","中","未割当ケース"
"58","UT-APP-058","Conversation","assigned_entity","正常系","割当エンティティが取得できること","assignee設定済み","なし","assignee_agent_botまたはassigneeが返却される","中","担当者取得"
"59","UT-APP-059","Conversation","tweet?","正常系","Twitter会話でtype=tweetの場合にtrueが返ること","inbox_type='Twitter', type='tweet'","なし","trueが返却される","中","チャネル判定"
"60","UT-APP-060","Conversation","recent_messages","正常系","直近5件のチャットメッセージが取得できること","10件のメッセージが存在","なし","最新5件のchatメッセージが返却される","中","サマリー用"
"61","UT-APP-061","Conversation","csat_survey_link","正常系","CSATアンケートリンクが生成されること","会話にuuidが設定済み","なし","FRONTEND_URL/survey/responses/{uuid}形式のURLが返却される","中","顧客満足度調査"
"62","UT-APP-062","Conversation","dispatch_conversation_updated_event","正常系","会話更新イベントが発火すること","会話が存在","previous_changes={}","CONVERSATION_UPDATEDイベントが発火される","中","イベント通知"
"63","UT-APP-063","Conversation","validate_additional_attributes","正常系","additional_attributesがHashでない場合に空ハッシュになること","additional_attributes='string'","なし","additional_attributes={}になる","中","データ正規化"
"64","UT-APP-064","Conversation","reset_agent_bot_when_assignee_present","正常系","assignee_id設定時にassignee_agent_bot_idがクリアされること","assignee_agent_bot_id設定済み","assignee_id=1","assignee_agent_bot_id=nilになる","中","排他制御"
"65","UT-APP-065","Conversation","determine_conversation_status","正常系","contact.blocked?時にresolvedになること","連絡先がブロック済み","なし","status=resolvedになる","高","ブロック対応"
"66","UT-APP-066","Conversation","determine_conversation_status","正常系","active_bot時にpendingになること","inbox.active_bot?=true","なし","status=pendingになる","高","Bot連携"
"67","UT-APP-067","Conversation","ensure_snooze_until_reset","正常系","snoozed以外の場合にsnoozed_untilがクリアされること","status=open","なし","snoozed_until=nilになる","中","スヌーズリセット"
"68","UT-APP-068","Conversation","validate_referer_url","異常系","不正なreferer URLがクリアされること","referer='invalid-url'","なし","referer=nilになる","中","URL検証"
"69","UT-APP-069","Conversation","account_id validation","異常系","account_idが空の場合にエラーになること","なし","account_id=nil","presence: trueエラー","高","必須項目"
"70","UT-APP-070","Conversation","inbox_id validation","異常系","inbox_idが空の場合にエラーになること","なし","inbox_id=nil","presence: trueエラー","高","必須項目"
"71","UT-APP-071","Conversation","contact_id validation","異常系","contact_idが空の場合にエラーになること","なし","contact_id=nil","presence: trueエラー","高","必須項目"
"72","UT-APP-072","Conversation","uuid validation","異常系","uuidが重複する場合にエラーになること","同一uuidの会話が存在","uuid='existing-uuid'","uniqueness: trueエラー","高","一意制約"
"73","UT-APP-073","Message","channel_token","正常系","チャネルトークンが取得できること","inbox.channelにpage_access_tokenが設定済み","なし","トークンが返却される","中","外部API連携"
"74","UT-APP-074","Message","push_event_data","正常系","プッシュイベント用データが生成されること","メッセージが存在","なし","必要な属性を含むハッシュが返却される","高","WebSocket用データ"
"75","UT-APP-075","Message","push_event_data","正常系","echo_id設定時にデータに含まれること","echo_idが設定済み","echo_id='temp-123'","echo_id属性が含まれる","中","フロントエンド同期"
"76","UT-APP-076","Message","push_event_data","正常系","添付ファイルがある場合にデータに含まれること","attachmentsが存在","なし","attachments配列が含まれる","中","ファイル添付"
"77","UT-APP-077","Message","conversation_push_event_data","正常系","会話プッシュデータが生成されること","会話に紐づくメッセージ","なし","assignee_id, unread_count等を含むハッシュが返却される","中","会話情報付加"
"78","UT-APP-078","Message","merge_sender_attributes","正常系","User送信者の場合にsender情報が含まれること","sender=User","なし","sender属性にpush_event_dataが含まれる","中","送信者情報"
"79","UT-APP-079","Message","merge_sender_attributes","正常系","AgentBot送信者の場合にinbox付きでデータ生成されること","sender=AgentBot","なし","sender属性にinbox付きpush_event_dataが含まれる","中","Bot送信者"
"80","UT-APP-080","Message","webhook_data","正常系","Webhook用データが生成されること","メッセージが存在","なし","account, content, conversation等を含むハッシュが返却される","高","外部連携"
"81","UT-APP-081","Message","outgoing_content","正常系","送信用コンテンツが取得できること","メッセージが存在","なし","MessageContentPresenterの結果が返却される","中","外部送信用"
"82","UT-APP-082","Message","email_notifiable_message?","正常系","メール通知可能なメッセージでtrueが返ること","outgoing, private=false","なし","trueが返却される","中","通知判定"
"83","UT-APP-083","Message","email_notifiable_message?","異常系","private=trueの場合にfalseが返ること","private=true","なし","falseが返却される","中","プライベート除外"
"84","UT-APP-084","Message","email_notifiable_message?","異常系","incomingの場合にfalseが返ること","message_type=incoming","なし","falseが返却される","中","受信除外"
"85","UT-APP-085","Message","auto_reply_email?","正常系","自動返信メールの場合にtrueが返ること","content_attributes={email: {auto_reply: true}}","なし","trueが返却される","中","自動返信判定"
"86","UT-APP-086","Message","valid_first_reply?","正常系","有効な初回返信の場合にtrueが返ること","human_response, first_reply_created_at=nil","なし","trueが返却される","高","初回返信判定"
"87","UT-APP-087","Message","valid_first_reply?","異常系","private=trueの場合にfalseが返ること","private=true","なし","falseが返却される","高","プライベート除外"
"88","UT-APP-088","Message","valid_first_reply?","異常系","既に初回返信がある場合にfalseが返ること","first_reply_created_at設定済み","なし","falseが返却される","高","重複防止"
"89","UT-APP-089","Message","save_story_info","正常系","Instagram Story情報が保存されること","Instagramメッセージ","story_info={id: '123', url: 'https://...'}","content_attributesにstory情報が追加される","中","Instagram連携"
"90","UT-APP-090","Message","send_update_event","正常系","更新イベントが発火すること","メッセージが存在","なし","MESSAGE_UPDATEDイベントが発火される","中","リアルタイム更新"
"91","UT-APP-091","Message","should_index?","正常系","インデックス対象の場合にtrueが返ること","advanced_search有効, incoming/outgoing","なし","trueが返却される","中","検索インデックス"
"92","UT-APP-092","Message","should_index?","異常系","activityメッセージの場合にfalseが返ること","message_type=activity","なし","falseが返却される","中","検索除外"
"93","UT-APP-093","Message","search_data","正常系","検索用データが生成されること","メッセージが存在","なし","SearchDataPresenterの結果が返却される","中","Elasticsearch連携"
"94","UT-APP-094","Message","content_for_llm","正常系","contentがある場合にcontentが返ること","content='Hello'","なし","'Hello'が返却される","中","LLM連携"
"95","UT-APP-095","Message","content_for_llm","正常系","音声添付ファイルの場合に文字起こしが返ること","content=nil, 音声添付あり","なし","'[Voice Message] 文字起こし'が返却される","中","音声文字起こし"
"96","UT-APP-096","Message","content_for_llm","正常系","その他の添付ファイルの場合に[Attachment]が返ること","content=nil, ファイル添付あり","なし","'[Attachment]'が返却される","中","添付プレースホルダー"
"97","UT-APP-097","Message","prevent_message_flooding","異常系","1分間に制限数以上のメッセージでエラーになること","1分間に大量メッセージ送信","なし","'Too many messages'エラー","高","DoS防止"
"98","UT-APP-098","Message","ensure_processed_message_content","正常系","処理済みコンテンツが設定されること","メッセージ保存時","content='test'","processed_message_contentが設定される","中","コンテンツ処理"
"99","UT-APP-099","Message","ensure_content_type","正常系","content_type未設定時にtextが設定されること","content_type=nil","なし","content_type=textになる","中","デフォルト値"
"100","UT-APP-100","Message","validate_attachments_limit","異常系","添付ファイルが15件を超える場合にエラーになること","既に15件の添付ファイル","新規添付追加","'exceeded maximum allowed'エラー","高","添付制限"
"101","UT-APP-101","Message","account_id validation","異常系","account_idが空の場合にエラーになること","なし","account_id=nil","presence: trueエラー","高","必須項目"
"102","UT-APP-102","Message","content validation","境界値","contentが150000文字を超える場合にエラーになること","なし","content='a'*150001","length: maximumエラー","中","長さ制限"
"103","UT-APP-103","Contact","get_source_id","正常系","source_idが取得できること","contact_inboxが存在","inbox_id=1","source_idが返却される","中","識別子取得"
"104","UT-APP-104","Contact","get_source_id","異常系","contact_inboxが存在しない場合に例外が発生すること","contact_inbox未存在","inbox_id=999","RecordNotFound例外","中","エラーハンドリング"
"105","UT-APP-105","Contact","push_event_data","正常系","プッシュイベント用データが生成されること","連絡先が存在","なし","additional_attributes, email等を含むハッシュが返却される","中","WebSocket用"
"106","UT-APP-106","Contact","webhook_data","正常系","Webhook用データが生成されること","連絡先が存在","なし","account, email, phone_number等を含むハッシュが返却される","中","外部連携"
"107","UT-APP-107","Contact","resolved_contacts","正常系","識別情報を持つ連絡先が取得できること","email, phone_number, identifierいずれか設定","なし","識別情報を持つ連絡先のみ返却される","中","クラスメソッド"
"108","UT-APP-108","Contact","discard_invalid_attrs","正常系","不正な電話番号がリセットされること","不正な電話番号形式","phone_number='invalid'","phone_number_wasにリセットされる","中","データ検証"
"109","UT-APP-109","Contact","discard_invalid_attrs","正常系","不正なメールがリセットされること","不正なメール形式","email='invalid'","email_wasにリセットされる","中","データ検証"
"110","UT-APP-110","Contact","from_email","正常系","メールアドレスで連絡先が検索できること","連絡先が存在","email='test@example.com'","該当連絡先が返却される","中","クラスメソッド"
"111","UT-APP-111","Contact","prepare_email_attribute","正常系","メールが小文字に変換されること","email='TEST@EXAMPLE.COM'","なし","email='test@example.com'になる","中","正規化"
"112","UT-APP-112","Contact","prepare_email_attribute","正常系","空メールがnilに変換されること","email=''","なし","email=nilになる","中","正規化"
"113","UT-APP-113","Contact","prepare_jsonb_attributes","正常系","空のJSONB属性が空ハッシュに初期化されること","additional_attributes=nil","なし","additional_attributes={}になる","中","初期化"
"114","UT-APP-114","Contact","email validation","異常系","不正なメール形式でエラーになること","なし","email='invalid-email'","format: withエラー","高","形式検証"
"115","UT-APP-115","Contact","email validation","異常系","同一アカウントで重複メールでエラーになること","同一メールの連絡先が存在","email='existing@example.com'","uniquenessエラー","高","一意制約"
"116","UT-APP-116","Contact","phone_number validation","異常系","不正な電話番号形式でエラーになること","なし","phone_number='123'","format: withエラー","高","形式検証"
"117","UT-APP-117","Contact","phone_number validation","正常系","E.164形式の電話番号が受け入れられること","なし","phone_number='+81901234567'","バリデーション成功","高","国際形式"
"118","UT-APP-118","Contact","identifier validation","異常系","同一アカウントで重複identifierでエラーになること","同一identifierの連絡先が存在","identifier='existing'","uniquenessエラー","高","一意制約"
"119","UT-APP-119","Inbox","add_members","正常系","複数メンバーが追加できること","inboxが存在","user_ids=[1, 2, 3]","3件のinbox_memberが作成される","高","メンバー管理"
"120","UT-APP-120","Inbox","remove_members","正常系","複数メンバーが削除できること","メンバーが存在","user_ids=[1, 2]","2件のinbox_memberが削除される","高","メンバー管理"
"121","UT-APP-121","Inbox","sanitized_name","正常系","名前が正しくサニタイズされること","name='Test <Inbox>'","なし","'Test Inbox'が返却される","中","メール互換性"
"122","UT-APP-122","Inbox","sanitized_name","境界値","空の名前の場合の処理","name=''","なし","デフォルト名または空文字が返却される","中","エッジケース"
"123","UT-APP-123","Inbox","sms?","正常系","SMSチャネルの場合にtrueが返ること","channel_type='Channel::Sms'","なし","trueが返却される","低","チャネル判定"
"124","UT-APP-124","Inbox","facebook?","正常系","Facebookチャネルの場合にtrueが返ること","channel_type='Channel::FacebookPage'","なし","trueが返却される","低","チャネル判定"
"125","UT-APP-125","Inbox","instagram?","正常系","Instagramチャネルの場合にtrueが返ること","channel.instagram_id設定済み","なし","trueが返却される","低","チャネル判定"
"126","UT-APP-126","Inbox","web_widget?","正常系","WebWidgetチャネルの場合にtrueが返ること","channel_type='Channel::WebWidget'","なし","trueが返却される","低","チャネル判定"
"127","UT-APP-127","Inbox","api?","正常系","APIチャネルの場合にtrueが返ること","channel_type='Channel::Api'","なし","trueが返却される","低","チャネル判定"
"128","UT-APP-128","Inbox","email?","正常系","Emailチャネルの場合にtrueが返ること","channel_type='Channel::Email'","なし","trueが返却される","低","チャネル判定"
"129","UT-APP-129","Inbox","twilio?","正常系","Twilioチャネルの場合にtrueが返ること","channel_type='Channel::TwilioSms'","なし","trueが返却される","低","チャネル判定"
"130","UT-APP-130","Inbox","whatsapp?","正常系","WhatsAppチャネルの場合にtrueが返ること","channel_type='Channel::Whatsapp'","なし","trueが返却される","低","チャネル判定"
"131","UT-APP-131","Inbox","assignable_agents","正常系","割当可能なエージェントが取得できること","メンバーと管理者が存在","なし","メンバー+管理者のユニークリストが返却される","高","担当者割当"
"132","UT-APP-132","Inbox","active_bot?","正常系","Bot有効時にtrueが返ること","agent_bot_inbox.active=true","なし","trueが返却される","高","Bot連携"
"133","UT-APP-133","Inbox","active_bot?","正常系","Dialogflowフック有効時にtrueが返ること","dialogflowフックがenabled","なし","trueが返却される","高","Bot連携"
"134","UT-APP-134","Inbox","inbox_type","正常系","チャネル名が返ること","channel設定済み","なし","channel.nameが返却される","低","表示用"
"135","UT-APP-135","Inbox","webhook_data","正常系","Webhook用データが生成されること","inboxが存在","なし","id, nameを含むハッシュが返却される","中","外部連携"
"136","UT-APP-136","Inbox","callback_webhook_url","正常系","TwilioSMSのコールバックURLが生成されること","channel_type='Channel::TwilioSms'","なし","/twilio/callback URLが返却される","中","Webhook設定"
"137","UT-APP-137","Inbox","callback_webhook_url","正常系","WhatsAppのコールバックURLが生成されること","channel_type='Channel::Whatsapp'","なし","/webhooks/whatsapp/{phone} URLが返却される","中","Webhook設定"
"138","UT-APP-138","Inbox","member_ids_with_assignment_capacity","正常系","メンバーIDが取得できること","メンバーが存在","なし","メンバーIDの配列が返却される","中","自動割当"
"139","UT-APP-139","Inbox","auto_assignment_v2_enabled?","正常系","assignment_v2機能有効時にtrueが返ること","feature_enabled?('assignment_v2')=true","なし","trueが返却される","中","機能フラグ"
"140","UT-APP-140","Inbox","name validation","異常系","名前が空の場合にエラーになること","なし","name=''","presence: trueエラー","高","必須項目"
"141","UT-APP-141","Inbox","timezone validation","異常系","不正なタイムゾーンでエラーになること","なし","timezone='Invalid/Zone'","inclusionエラー","中","タイムゾーン検証"
"142","UT-APP-142","Team","add_members","正常系","複数メンバーが追加できること","チームが存在","user_ids=[1, 2, 3]","3件のteam_memberが作成される","高","メンバー管理"
"143","UT-APP-143","Team","add_members","正常系","追加されたユーザーが返却されること","チームが存在","user_ids=[1, 2]","追加されたUserの配列が返却される","中","戻り値確認"
"144","UT-APP-144","Team","remove_members","正常系","複数メンバーが削除できること","メンバーが存在","user_ids=[1, 2]","2件のteam_memberが削除される","高","メンバー管理"
"145","UT-APP-145","Team","messages","正常系","チームの会話に紐づくメッセージが取得できること","チームに会話が存在","なし","該当会話のメッセージが返却される","中","メッセージ集計"
"146","UT-APP-146","Team","reporting_events","正常系","チームの会話に紐づくイベントが取得できること","チームに会話が存在","なし","該当会話のreporting_eventsが返却される","中","レポート用"
"147","UT-APP-147","Team","push_event_data","正常系","プッシュイベント用データが生成されること","チームが存在","なし","id, nameを含むハッシュが返却される","中","WebSocket用"
"148","UT-APP-148","Team","name validation","異常系","名前が空の場合にエラーになること","なし","name=''","presenceエラー","高","必須項目"
"149","UT-APP-149","Team","name validation","異常系","同一アカウントで重複名でエラーになること","同一名のチームが存在","name='existing'","uniquenessエラー","高","一意制約"
"150","UT-APP-150","Team","name before_validation","正常系","名前が小文字に変換されること","name='TEST TEAM'","なし","name='test team'になる","中","正規化"
"151","UT-APP-151","AgentBot","accessible_to","正常系","アカウントに紐づくBotとシステムBotが取得できること","account_id=1のBotとaccount_id=nilのBotが存在","account_id=1","両方のBotが返却される","中","スコープ"
"152","UT-APP-152","AgentBot","available_name","正常系","Bot名が返却されること","name='TestBot'","なし","'TestBot'が返却される","低","表示用"
"153","UT-APP-153","AgentBot","push_event_data","正常系","プッシュイベント用データが生成されること","Botが存在","なし","id, name, avatar_url, typeを含むハッシュが返却される","中","WebSocket用"
"154","UT-APP-154","AgentBot","push_event_data","正常系","inbox指定時にavatar_urlがフォールバックすること","Bot.avatar_url=nil, inbox.avatar_url設定済み","inbox=inbox","inbox.avatar_urlが含まれる","中","アバター取得"
"155","UT-APP-155","AgentBot","webhook_data","正常系","Webhook用データが生成されること","Botが存在","なし","id, name, typeを含むハッシュが返却される","中","外部連携"
"156","UT-APP-156","AgentBot","system_bot?","正常系","システムBotの場合にtrueが返ること","account_id=nil","なし","trueが返却される","中","システムBot判定"
"157","UT-APP-157","AgentBot","system_bot?","正常系","アカウントBot の場合にfalseが返ること","account_id=1","なし","falseが返却される","中","アカウントBot判定"
"158","UT-APP-158","AgentBot","outgoing_url validation","境界値","URLが最大長を超える場合にエラーになること","なし","outgoing_url='a'*極長","length: maximumエラー","中","長さ制限"
"159","UT-APP-159","Campaign","trigger!","正常系","one_offキャンペーンが実行されること","campaign_type=one_off, status=active","なし","execute_campaignが呼ばれる","高","キャンペーン実行"
"160","UT-APP-160","Campaign","trigger!","異常系","ongoingキャンペーンでは実行されないこと","campaign_type=ongoing","なし","何も起こらない","中","タイプ判定"
"161","UT-APP-161","Campaign","trigger!","異常系","completedキャンペーンでは実行されないこと","campaign_status=completed","なし","何も起こらない","中","ステータス判定"
"162","UT-APP-162","Campaign","validate_campaign_inbox","異常系","非対応Inboxタイプでエラーになること","inbox_type='unsupported'","なし","'Unsupported Inbox type'エラー","中","Inbox検証"
"163","UT-APP-163","Campaign","validate_url","異常系","不正なURLでエラーになること","trigger_rules.url='invalid'","なし","'url invalid'エラー","中","URL検証"
"164","UT-APP-164","Campaign","ensure_correct_campaign_attributes","正常系","SMS/WhatsApp用にone_offが設定されること","inbox_type='Twilio SMS'","なし","campaign_type=one_offになる","中","自動設定"
"165","UT-APP-165","Campaign","prevent_completed_campaign_from_update","異常系","完了キャンペーンの更新でエラーになること","campaign_status=completed","なし","'already completed'エラー","中","更新制限"
"166","UT-APP-166","Campaign","account_id validation","異常系","account_idが空の場合にエラーになること","なし","account_id=nil","presence: trueエラー","高","必須項目"
"167","UT-APP-167","Campaign","title validation","異常系","titleが空の場合にエラーになること","なし","title=''","presence: trueエラー","高","必須項目"
"168","UT-APP-168","Campaign","message validation","異常系","messageが空の場合にエラーになること","なし","message=''","presence: trueエラー","高","必須項目"
"169","UT-APP-169","Label","conversations","正常系","ラベル付き会話が取得できること","ラベルが会話に付与されている","なし","tagged_with結果が返却される","中","タグ検索"
"170","UT-APP-170","Label","messages","正常系","ラベル付き会話のメッセージが取得できること","ラベルが会話に付与されている","なし","該当会話のメッセージが返却される","中","メッセージ集計"
"171","UT-APP-171","Label","reporting_events","正常系","ラベル付き会話のイベントが取得できること","ラベルが会話に付与されている","なし","該当会話のreporting_eventsが返却される","中","レポート用"
"172","UT-APP-172","Label","update_associated_models","正常系","タイトル変更時にジョブが実行されること","title変更","title='new_label'","Labels::UpdateJobがenqueueされる","中","連鎖更新"
"173","UT-APP-173","Label","title validation","異常系","タイトルが空の場合にエラーになること","なし","title=''","presenceエラー","高","必須項目"
"174","UT-APP-174","Label","title validation","異常系","不正な文字を含む場合にエラーになること","なし","title='invalid@char'","formatエラー","中","形式検証"
"175","UT-APP-175","Label","title validation","異常系","同一アカウントで重複titleでエラーになること","同一titleのラベルが存在","title='existing'","uniquenessエラー","高","一意制約"
"176","UT-APP-176","Label","title before_validation","正常系","タイトルが小文字に変換されること","title='TEST'","なし","title='test'になる","中","正規化"
"177","UT-APP-177","Webhook","ALLOWED_WEBHOOK_EVENTS","正常系","許可されたイベントリストが定数として定義されていること","なし","なし","定数配列が存在する","低","定数確認"
"178","UT-APP-178","Webhook","validate_webhook_subscriptions","異常系","subscriptionsが配列でない場合にエラーになること","なし","subscriptions='string'","subscriptionsエラー","中","型検証"
"179","UT-APP-179","Webhook","validate_webhook_subscriptions","異常系","subscriptionsが空の場合にエラーになること","なし","subscriptions=[]","subscriptionsエラー","中","空配列検証"
"180","UT-APP-180","Webhook","validate_webhook_subscriptions","異常系","許可されていないイベントを含む場合にエラーになること","なし","subscriptions=['invalid_event']","subscriptionsエラー","中","イベント検証"
"181","UT-APP-181","Webhook","url validation","異常系","不正なURL形式でエラーになること","なし","url='not-a-url'","formatエラー","高","URL形式"
"182","UT-APP-182","Webhook","url validation","異常系","同一アカウントで重複URLでエラーになること","同一URLのWebhookが存在","url='https://existing.com'","uniquenessエラー","高","一意制約"
"183","UT-APP-183","AutomationRule","conditions_attributes","正常系","条件属性リストが返却されること","なし","なし","定義済み属性キーの配列が返却される","低","定数確認"
"184","UT-APP-184","AutomationRule","actions_attributes","正常系","アクション属性リストが返却されること","なし","なし","定義済みアクションキーの配列が返却される","低","定数確認"
"185","UT-APP-185","AutomationRule","file_base_data","正常系","添付ファイルデータが生成されること","filesが添付されている","なし","ファイル情報の配列が返却される","中","ファイル管理"
"186","UT-APP-186","AutomationRule","json_conditions_format","異常系","サポートされていない条件でエラーになること","なし","conditions=[{attribute_key: 'invalid'}]","conditionsエラー","中","条件検証"
"187","UT-APP-187","AutomationRule","json_actions_format","異常系","サポートされていないアクションでエラーになること","なし","actions=[{action_name: 'invalid'}]","actionsエラー","中","アクション検証"
"188","UT-APP-188","AutomationRule","query_operator_presence","異常系","複数条件でquery_operatorがない場合にエラーになること","複数条件でoperator不足","なし","'should have query operator'エラー","中","演算子検証"
"189","UT-APP-189","AutomationRule","query_operator_value","異常系","AND/OR以外のoperatorでエラーになること","なし","query_operator='XOR'","'must be AND or OR'エラー","中","演算子検証"
"190","UT-APP-190","AutomationRule","account_id validation","異常系","account_idが空の場合にエラーになること","なし","account_id=nil","presence: trueエラー","高","必須項目"
"191","UT-APP-191","Notification","push_event_data","正常系","プッシュイベント用データが生成されること","通知が存在","なし","id, notification_type等を含むハッシュが返却される","高","WebSocket用"
"192","UT-APP-192","Notification","fcm_push_data","正常系","FCMプッシュ用データが生成されること","通知が存在","なし","id, notification_type, primary_actor等を含むハッシュが返却される","高","モバイル通知"
"193","UT-APP-193","Notification","push_message_title","正常系","通知タイプに応じたタイトルが生成されること","notification_type=conversation_creation","なし","I18n翻訳されたタイトルが返却される","中","タイトル生成"
"194","UT-APP-194","Notification","push_message_body","正常系","通知タイプに応じた本文が生成されること","notification_type=conversation_creation","なし","送信者名とコンテンツが結合された文字列が返却される","中","本文生成"
"195","UT-APP-195","Notification","conversation","正常系","primary_actorが返却されること","通知が存在","なし","primary_actorが返却される","低","エイリアス"
"196","UT-APP-196","Notification","process_notification_delivery","正常系","push通知サブスクライブ時にジョブがenqueueされること","user.push通知設定=true","なし","PushNotificationJobがenqueueされる","高","通知配信"
"197","UT-APP-197","Notification","process_notification_delivery","正常系","email通知サブスクライブ時にジョブがenqueueされること","user.email通知設定=true","なし","EmailNotificationJobがenqueueされる","高","メール配信"
"198","UT-APP-198","Notification","set_last_activity_at","正常系","created_atがlast_activity_atに設定されること","通知作成時","なし","last_activity_at=created_atになる","中","タイムスタンプ"
"199","UT-APP-199","Notification","notification_type validation","異常系","不正なnotification_typeでエラーになること","なし","notification_type=999","enumエラー","高","型検証"
"200","UT-APP-200","Attachment","push_event_data","正常系","プッシュイベント用データが生成されること","添付ファイルが存在","なし","base_dataとメタデータを含むハッシュが返却される","中","WebSocket用"
"201","UT-APP-201","Attachment","push_event_data","異常系","file_type未設定時にnilが返ること","file_type=nil","なし","nilが返却される","中","nilハンドリング"
"202","UT-APP-202","Attachment","file_url","正常系","ファイルURLが生成されること","file添付済み","なし","url_for結果が返却される","中","URL生成"
"203","UT-APP-203","Attachment","file_url","境界値","file未添付時に空文字が返ること","file未添付","なし","空文字が返却される","中","未添付ケース"
"204","UT-APP-204","Attachment","download_url","正常系","ダウンロードURLが生成されること","file添付済み","なし","file.blob.urlが返却される","中","ダウンロード用"
"205","UT-APP-205","Attachment","thumb_url","正常系","サムネイルURLが生成されること","image添付済み","なし","リサイズ済み画像URLが返却される","中","サムネイル"
"206","UT-APP-206","Attachment","thumb_url","境界値","非画像の場合に空文字が返ること","file_type=file","なし","空文字が返却される","中","画像限定"
"207","UT-APP-207","Attachment","with_attached_file?","正常系","添付ファイルタイプの場合にtrueが返ること","file_type=image","なし","trueが返却される","低","タイプ判定"
"208","UT-APP-208","Attachment","with_attached_file?","正常系","locationタイプの場合にfalseが返ること","file_type=location","なし","falseが返却される","低","タイプ判定"
"209","UT-APP-209","Attachment","acceptable_file","異常系","WebWidgetで許可されないファイル形式でエラーになること","Channel::WebWidget, 不正ファイル形式","なし","'type not supported'エラー","高","ファイル検証"
"210","UT-APP-210","Attachment","validate_file_size","異常系","ファイルサイズが制限を超える場合にエラーになること","巨大ファイル","なし","'size is too big'エラー","高","サイズ制限"
"211","UT-APP-211","AccountUser","create_notification_setting","正常系","通知設定が作成されること","AccountUser作成時","なし","NotificationSettingが作成される","高","初期設定"
"212","UT-APP-212","AccountUser","remove_user_from_account","正常系","削除時にDestroyJobがenqueueされること","AccountUser削除時","なし","Agents::DestroyJobがenqueueされる","高","クリーンアップ"
"213","UT-APP-213","AccountUser","permissions","正常系","管理者の場合に'administrator'が返ること","role=administrator","なし","['administrator']が返却される","中","権限取得"
"214","UT-APP-214","AccountUser","permissions","正常系","エージェントの場合に'agent'が返ること","role=agent","なし","['agent']が返却される","中","権限取得"
"215","UT-APP-215","AccountUser","push_event_data","正常系","プッシュイベント用データが生成されること","AccountUserが存在","なし","id, availability, role, user_idを含むハッシュが返却される","中","WebSocket用"
"216","UT-APP-216","AccountUser","update_presence_in_redis","正常系","availability変更時にRedisが更新されること","availability変更","availability=busy","OnlineStatusTracker.set_statusが呼ばれる","高","オンライン状態"
"217","UT-APP-217","AccountUser","user_id validation","異常系","同一アカウントで重複user_idでエラーになること","同一user_idのAccountUserが存在","user_id=1","uniquenessエラー","高","一意制約"
"218","UT-APP-218","Note","ensure_account_id","正常系","contactからaccount_idが設定されること","contact設定済み","なし","account_id=contact.account_idになる","中","自動設定"
"219","UT-APP-219","Note","content validation","異常系","contentが空の場合にエラーになること","なし","content=''","presence: trueエラー","高","必須項目"
"220","UT-APP-220","Note","account_id validation","異常系","account_idが空の場合にエラーになること","contact未設定","account_id=nil","presence: trueエラー","高","必須項目"
"221","UT-APP-221","Note","contact_id validation","異常系","contact_idが空の場合にエラーになること","なし","contact_id=nil","presence: trueエラー","高","必須項目"
"222","UT-APP-222","Portal","file_base_data","正常系","ロゴファイルデータが生成されること","logo添付済み","なし","id, file_type, file_url等を含むハッシュが返却される","中","ファイル管理"
"223","UT-APP-223","Portal","default_locale","正常系","設定されたデフォルトロケールが返ること","config['default_locale']='ja'","なし","'ja'が返却される","中","多言語対応"
"224","UT-APP-224","Portal","default_locale","異常系","未設定時に'en'が返ること","config['default_locale']未設定","なし","'en'が返却される","中","デフォルト値"
"225","UT-APP-225","Portal","config_json_format","異常系","許可されていないキーでエラーになること","なし","config={'invalid_key': 'value'}","cofigエラー","中","設定検証"
"226","UT-APP-226","Portal","name validation","異常系","nameが空の場合にエラーになること","なし","name=''","presence: trueエラー","高","必須項目"
"227","UT-APP-227","Portal","slug validation","異常系","slugが空の場合にエラーになること","なし","slug=''","presence: trueエラー","高","必須項目"
"228","UT-APP-228","Portal","slug validation","異常系","重複slugでエラーになること","同一slugのPortalが存在","slug='existing'","uniquenessエラー","高","一意制約"
"229","UT-APP-229","Portal","custom_domain validation","異常系","重複custom_domainでエラーになること","同一domainのPortalが存在","custom_domain='existing.com'","uniquenessエラー","中","一意制約"
"230","UT-APP-230","CannedResponse","content validation","異常系","contentが空の場合にエラーになること","なし","content=''","presence: trueエラー","高","必須項目"
"231","UT-APP-231","CannedResponse","short_code validation","異常系","short_codeが空の場合にエラーになること","なし","short_code=''","presence: trueエラー","高","必須項目"
"232","UT-APP-232","CannedResponse","short_code validation","異常系","同一アカウントで重複short_codeでエラーになること","同一short_codeが存在","short_code='existing'","uniquenessエラー","高","一意制約"
"233","UT-APP-233","CannedResponse","order_by_search","正常系","検索スコア順にソートされること","複数の定型文が存在","search='hello'","スコア順の結果が返却される","中","検索順序"
"234","UT-APP-234","Article","search","正常系","複合条件で記事が検索できること","複数の記事が存在","params={locale: 'en', status: 'published'}","条件に合う記事が返却される","中","検索機能"
"235","UT-APP-235","Article","associate_root_article","正常系","関連記事が正しく関連付けられること","関連先記事が存在","associated_article_id=1","associated_article_idが設定される","中","記事関連付け"
"236","UT-APP-236","Article","find_root_article_id","正常系","ルート記事IDが取得できること","記事が存在","なし","root記事のIDが返却される","中","階層管理"
"237","UT-APP-237","Article","draft!","正常系","記事がdraft状態になること","status=published","なし","status=draftになる","中","ステータス変更"
"238","UT-APP-238","Article","increment_view_count","正常系","閲覧数が増加すること","views=10","なし","views=11になる","中","閲覧カウント"
"239","UT-APP-239","Article","increment_view_count","境界値","views=nilから1になること","views=nil","なし","views=1になる","中","初回閲覧"
"240","UT-APP-240","Article","update_positions","正常系","記事の位置が更新されること","複数記事が存在","positions_hash={1=>10, 2=>20}","各記事のpositionが更新される","中","並び順管理"
"241","UT-APP-241","Article","title validation","異常系","titleが空の場合にエラーになること","なし","title=''","presence: trueエラー","高","必須項目"
"242","UT-APP-242","Article","content validation","異常系","contentが空の場合にエラーになること","なし","content=''","presence: trueエラー","高","必須項目"
"243","UT-APP-243","Category","search","正常系","ロケールで絞り込み検索できること","複数カテゴリが存在","params={locale: 'ja'}","jaロケールのカテゴリが返却される","中","検索機能"
"244","UT-APP-244","Category","current_page","正常系","現在ページが取得できること","なし","params={page: 2}","2が返却される","低","ページング"
"245","UT-APP-245","Category","ensure_account_id","正常系","portalからaccount_idが設定されること","portal設定済み","なし","account_id=portal.account_idになる","中","自動設定"
"246","UT-APP-246","Category","allowed_locales","異常系","許可されていないロケールでエラーになること","portal.config['allowed_locales']=['en']","locale='ja'","localeエラー","中","ロケール検証"
"247","UT-APP-247","Category","slug validation","異常系","slugが空の場合にエラーになること","なし","slug=''","presence: trueエラー","高","必須項目"
"248","UT-APP-248","Category","name validation","異常系","nameが空の場合にエラーになること","なし","name=''","presence: trueエラー","高","必須項目"
"249","UT-APP-249","Category","locale validation","異常系","同一slug/locale/portalで重複する場合にエラーになること","同一組み合わせのカテゴリが存在","slug='existing', locale='en'","uniquenessエラー","高","複合一意制約"
"250","UT-APP-250","Folder","name validation","異常系","nameが空の場合にエラーになること","なし","name=''","presence: trueエラー","高","必須項目"
"251","UT-APP-251","Folder","category_id validation","異常系","category_idが空の場合にエラーになること","なし","category_id=nil","presence: trueエラー","高","必須項目"
"252","UT-APP-252","CustomFilter","validate_number_of_filters","異常系","フィルタ数制限を超える場合にエラーになること","既にMAX_CUSTOM_FILTERS_PER_USER件のフィルタが存在","なし","number_of_recordsエラー","中","数量制限"
"253","UT-APP-253","CustomFilter","filter_type enum","正常系","conversation/contact/reportが設定できること","なし","filter_type=:contact","filter_type=contactになる","低","enum確認"
"254","UT-APP-254","Macro","set_visibility","正常系","管理者が指定したvisibilityが設定されること","user=administrator","visibility='global'","visibility=globalになる","中","可視性設定"
"255","UT-APP-255","Macro","set_visibility","正常系","エージェントは常にpersonalになること","user=agent","visibility='global'","visibility=personalになる","中","権限制限"
"256","UT-APP-256","Macro","with_visibility","正常系","ユーザーに見えるマクロが取得できること","global+自分のpersonalマクロが存在","なし","global + 自分のpersonalマクロが返却される","中","可視性フィルタ"
"257","UT-APP-257","Macro","file_base_data","正常系","添付ファイルデータが生成されること","filesが添付されている","なし","ファイル情報の配列が返却される","中","ファイル管理"
"258","UT-APP-258","Macro","json_actions_format","異常系","サポートされていないアクションでエラーになること","なし","actions=[{action_name: 'invalid'}]","actionsエラー","中","アクション検証"
"259","UT-APP-259","CustomAttributeDefinition","STANDARD_ATTRIBUTES","正常系","標準属性リストが定数として定義されていること","なし","なし","conversation/contact用の属性配列が存在する","低","定数確認"
"260","UT-APP-260","CustomAttributeDefinition","attribute_must_not_conflict","異常系","標準属性キーと競合する場合にエラーになること","なし","attribute_key='status'","key_conflictエラー","高","キー検証"
"261","UT-APP-261","CustomAttributeDefinition","attribute_key validation","異常系","attribute_keyが空の場合にエラーになること","なし","attribute_key=''","presence: trueエラー","高","必須項目"
"262","UT-APP-262","CustomAttributeDefinition","attribute_key validation","異常系","同一account/modelで重複keyでエラーになること","同一keyが存在","attribute_key='existing'","uniquenessエラー","高","一意制約"
"263","UT-APP-263","ContactInbox","webhook_data","正常系","Webhook用データが生成されること","ContactInboxが存在","なし","contact, inbox, account, source_id等を含むハッシュが返却される","中","外部連携"
"264","UT-APP-264","ContactInbox","current_conversation","正常系","最新の会話が取得できること","複数会話が存在","なし","conversations.lastが返却される","中","会話取得"
"265","UT-APP-265","ContactInbox","validate_twilio_source_id","異常系","Twilio SMS用に不正なsource_idでエラーになること","Channel::TwilioSms, medium='sms'","source_id='invalid'","source_idエラー","中","形式検証"
"266","UT-APP-266","ContactInbox","validate_whatsapp_source_id","異常系","WhatsApp用に不正なsource_idでエラーになること","Channel::Whatsapp","source_id='invalid'","source_idエラー","中","形式検証"
"267","UT-APP-267","ContactInbox","inbox_id validation","異常系","inbox_idが空の場合にエラーになること","なし","inbox_id=nil","presence: trueエラー","高","必須項目"
"268","UT-APP-268","ContactInbox","source_id validation","異常系","source_idが空の場合にエラーになること","なし","source_id=''","presence: trueエラー","高","必須項目"
"269","UT-APP-269","InboxMember","add_agent_to_round_robin","正常系","作成時にラウンドロビンキューに追加されること","InboxMember作成時","なし","add_agent_to_queueが呼ばれる","高","自動割当"
"270","UT-APP-270","InboxMember","remove_agent_from_round_robin","正常系","削除時にラウンドロビンキューから削除されること","InboxMember削除時","なし","remove_agent_from_queueが呼ばれる","高","自動割当"
"271","UT-APP-271","InboxMember","user_id validation","異常系","同一inboxで重複user_idでエラーになること","同一user_idのInboxMemberが存在","user_id=1","uniquenessエラー","高","一意制約"
"272","UT-APP-272","TeamMember","user_id validation","異常系","同一チームで重複user_idでエラーになること","同一user_idのTeamMemberが存在","user_id=1","uniquenessエラー","高","一意制約"
"273","UT-APP-273","WorkingHour","today","正常系","今日の営業時間が取得できること","営業時間が設定済み","なし","今日の曜日のWorkingHourが返却される","中","営業時間判定"
"274","UT-APP-274","WorkingHour","open_at?","正常系","指定時刻が営業時間内の場合にtrueが返ること","営業時間内","time=営業時間内の時刻","trueが返却される","高","時間判定"
"275","UT-APP-275","WorkingHour","open_at?","正常系","closed_all_dayの場合にfalseが返ること","closed_all_day=true","time=任意","falseが返却される","高","終日休業"
"276","UT-APP-276","WorkingHour","open_now?","正常系","現在営業中の場合にtrueが返ること","営業時間内","なし","trueが返却される","高","リアルタイム判定"
"277","UT-APP-277","WorkingHour","closed_now?","正常系","現在営業外の場合にtrueが返ること","営業時間外","なし","trueが返却される","高","リアルタイム判定"
"278","UT-APP-278","WorkingHour","close_after_open","異常系","閉店時刻が開店時刻より前の場合にエラーになること","なし","open_hour=18, close_hour=9","close_hourエラー","中","時間検証"
"279","UT-APP-279","WorkingHour","ensure_open_all_day_hours","正常系","open_all_day時に0:00-23:59が設定されること","open_all_day=true","なし","open=0:00, close=23:59になる","中","終日営業"
"280","UT-APP-280","WorkingHour","open_all_day_and_closed_all_day","異常系","両方trueの場合にエラーになること","open_all_day=true, closed_all_day=true","なし","baseエラー","中","矛盾検証"
"281","UT-APP-281","NotificationSetting","EMAIL_NOTIFICATION_FLAGS","正常系","メール通知フラグが定数として定義されていること","なし","なし","定数ハッシュが存在する","低","定数確認"
"282","UT-APP-282","NotificationSetting","PUSH_NOTIFICATION_FLAGS","正常系","プッシュ通知フラグが定数として定義されていること","なし","なし","定数ハッシュが存在する","低","定数確認"
"283","UT-APP-283","NotificationSubscription","identifier validation","異常系","identifierが空の場合にエラーになること","なし","identifier=''","presence: trueエラー","高","必須項目"
"284","UT-APP-284","NotificationSubscription","subscription_type enum","正常系","browser_push/fcmが設定できること","なし","subscription_type=:fcm","subscription_type=fcmになる","低","enum確認"
"285","UT-APP-285","CsatSurveyResponse","rating validation","異常系","範囲外のratingでエラーになること","なし","rating=6","inclusionエラー","高","範囲検証"
"286","UT-APP-286","CsatSurveyResponse","rating validation","異常系","ratingが空の場合にエラーになること","なし","rating=nil","presence: trueエラー","高","必須項目"
"287","UT-APP-287","CsatSurveyResponse","filter_by_created_at","正常系","日付範囲でフィルタできること","複数レスポンスが存在","range=1.week.ago..Time.now","範囲内のレスポンスが返却される","中","スコープ"
"288","UT-APP-288","Mention","ensure_account_id","正常系","conversationからaccount_idが設定されること","conversation設定済み","なし","account_id=conversation.account_idになる","中","自動設定"
"289","UT-APP-289","Mention","notify_mentioned_user","正常系","メンション作成時にイベントが発火すること","Mention作成時","なし","CONVERSATION_MENTIONEDイベントが発火される","高","通知"
"290","UT-APP-290","Mention","user validation","異常系","同一会話で重複userでエラーになること","同一user/conversationのMentionが存在","user_id=1","uniquenessエラー","高","一意制約"
"291","UT-APP-291","ConversationParticipant","ensure_account_id","正常系","conversationからaccount_idが設定されること","conversation設定済み","なし","account_id=conversation.account_idになる","中","自動設定"
"292","UT-APP-292","ConversationParticipant","ensure_inbox_access","異常系","inbox権限がない場合にエラーになること","userがinboxにアクセス不可","なし","'must have inbox access'エラー","高","権限検証"
"293","UT-APP-293","ConversationParticipant","user_id validation","異常系","同一会話で重複user_idでエラーになること","同一user_idの参加者が存在","user_id=1","uniquenessエラー","高","一意制約"
"294","UT-APP-294","DataImport","data_type validation","異常系","許可されていないdata_typeでエラーになること","なし","data_type='invalid'","data_typeエラー","中","型検証"
"295","UT-APP-295","DataImport","process_data_import","正常系","作成後にインポートジョブがenqueueされること","DataImport作成時","なし","DataImportJobがenqueueされる","高","非同期処理"
"296","UT-APP-296","ReportingEvent","account_id validation","異常系","account_idが空の場合にエラーになること","なし","account_id=nil","presence: trueエラー","高","必須項目"
"297","UT-APP-297","ReportingEvent","name validation","異常系","nameが空の場合にエラーになること","なし","name=''","presence: trueエラー","高","必須項目"
"298","UT-APP-298","ReportingEvent","value validation","異常系","valueが空の場合にエラーになること","なし","value=nil","presence: trueエラー","高","必須項目"
"299","UT-APP-299","AgentBotInbox","ensure_account_id","正常系","inboxからaccount_idが設定されること","inbox設定済み","なし","account_id=inbox.account_idになる","中","自動設定"
"300","UT-APP-300","AgentBotInbox","status enum","正常系","active/inactiveが設定できること","なし","status=:inactive","status=inactiveになる","低","enum確認"
"301","UT-APP-301","PlatformApp","name validation","異常系","nameが空の場合にエラーになること","なし","name=''","presence: trueエラー","高","必須項目"
"302","UT-APP-302","PlatformAppPermissible","platform_app_id validation","異常系","同一permissibleで重複platform_app_idでエラーになること","同一組み合わせが存在","platform_app_id=1","uniquenessエラー","高","一意制約"
"303","UT-APP-303","DashboardApp","validate_content","異常系","contentが配列でない場合にエラーになること","なし","content='string'","contentエラー","中","型検証"
"304","UT-APP-304","DashboardApp","validate_content","異常系","不正なcontent構造でエラーになること","なし","content=[{type: 'invalid'}]","contentエラー","中","スキーマ検証"
"305","UT-APP-305","InstallationConfig","value getter","正常系","valueが取得できること","serialized_value設定済み","なし","serialized_value[:value]が返却される","中","値アクセス"
"306","UT-APP-306","InstallationConfig","value setter","正常系","valueが設定できること","なし","value='test'","serialized_value={value: 'test'}になる","中","値設定"
"307","UT-APP-307","InstallationConfig","saml_sso_users_check","異常系","SAMLユーザー存在時にSSO無効化でエラーになること","SAMLユーザーが存在","value=false","baseエラー","高","SSO保護"
"308","UT-APP-308","InstallationConfig","name validation","異常系","nameが空の場合にエラーになること","なし","name=''","presence: trueエラー","高","必須項目"
"309","UT-APP-309","SuperAdmin","継承確認","正常系","Userを継承していること","なし","なし","User < SuperAdminであること","低","継承関係"
"310","UT-APP-310","AccessToken","token generation","正常系","トークンが自動生成されること","AccessToken作成時","なし","tokenが設定される","高","セキュリティ"
"311","UT-APP-311","ApplicationRecord","validates_column_content_length","正常系","string列の最大255文字バリデーション","文字列が256文字","なし","lengthエラー","中","汎用バリデーション"
"312","UT-APP-312","ApplicationRecord","validates_column_content_length","正常系","text列の最大20000文字バリデーション","テキストが20001文字","なし","lengthエラー","中","汎用バリデーション"
"313","UT-APP-313","ApplicationRecord","to_drop","正常系","Liquidable対象の場合にDropオブジェクトが返ること","Account等のドロップ可能モデル","なし","AccountDropインスタンスが返却される","中","Liquid連携"
"314","UT-APP-314","ApplicationRecord","to_drop","異常系","Liquidable対象外の場合にnilが返ること","非対象モデル","なし","nilが返却される","中","Liquid対象外"
"315","UT-APP-315","ApplicationRecord","normalize_empty_string_to_nil","正常系","空文字列がnilに変換されること","attr=''","attrs=[:attr]","attr=nilになる","中","正規化"
"316","UT-APP-316","EmailTemplate","resolver","正常系","DbResolverServiceが返却されること","なし","なし","DbResolverServiceインスタンスが返却される","低","テンプレート解決"
"317","UT-APP-317","EmailTemplate","name validation","異常系","同一accountで重複nameでエラーになること","同一nameのテンプレートが存在","name='existing'","uniquenessエラー","中","一意制約"
"318","UT-APP-318","RelatedCategory","belongs_to associations","正常系","category/related_category関連が取得できること","関連が設定済み","なし","両方のCategoryが返却される","中","関連取得"
"319","UT-APP-319","AssignmentPolicy","name validation","異常系","nameが空の場合にエラーになること","なし","name=''","presence: trueエラー","高","必須項目"
"320","UT-APP-320","AssignmentPolicy","name validation","異常系","同一アカウントで重複nameでエラーになること","同一nameのポリシーが存在","name='existing'","uniquenessエラー","高","一意制約"
"321","UT-APP-321","AssignmentPolicy","fair_distribution_limit validation","異常系","0以下の場合にエラーになること","なし","fair_distribution_limit=0","numericalityエラー","中","数値検証"
"322","UT-APP-322","AssignmentPolicy","fair_distribution_window validation","異常系","0以下の場合にエラーになること","なし","fair_distribution_window=0","numericalityエラー","中","数値検証"
"323","UT-APP-323","InboxAssignmentPolicy","inbox_id validation","異常系","重複inbox_idでエラーになること","同一inbox_idのポリシーが存在","inbox_id=1","uniquenessエラー","高","一意制約"
"324","UT-APP-324","JsonbAttributesLengthValidator","validate_keys String","異常系","文字列が1500文字を超える場合にエラーになること","なし","key='a'*1501","lengthエラー","中","文字列長検証"
"325","UT-APP-325","JsonbAttributesLengthValidator","validate_keys Integer","異常系","数値が9999999999を超える場合にエラーになること","なし","key=10000000000","valueエラー","中","数値上限検証"
