"No","テストID","対象クラス","対象メソッド","テスト観点","テストケース名","前提条件","入力値","期待結果","優先度","備考"
"1","UT-ENT-001","Enterprise::Account","manually_managed_features","正常系","仮想属性メソッドが正常に呼び出せること","なし","なし","nilが返却される","低","administrate互換用の空メソッド"
"2","UT-ENT-002","Enterprise::Account","mark_for_deletion","正常系","手動削除理由で削除マーク設定が成功すること","アカウントが存在","reason='manual_deletion'","custom_attributesにmarked_for_deletion_atとmarked_for_deletion_reasonが設定される","高","削除予約機能"
"3","UT-ENT-003","Enterprise::Account","mark_for_deletion","正常系","非アクティブ理由で削除マーク設定が成功すること","アカウントが存在","reason='inactivity'","custom_attributesにinactivityが設定される","高","削除予約機能"
"4","UT-ENT-004","Enterprise::Account","mark_for_deletion","正常系","不正な理由が渡された場合inactivityに変換されること","アカウントが存在","reason='invalid_reason'","marked_for_deletion_reasonがinactivityになる","中","入力値のサニタイズ"
"5","UT-ENT-005","Enterprise::Account","mark_for_deletion","正常系","削除マーク成功時に通知メールが送信されること","アカウントが存在","reason='manual_deletion'","AdministratorNotifications::AccountNotificationMailerが呼び出される","高","通知機能"
"6","UT-ENT-006","Enterprise::Account","unmark_for_deletion","正常系","削除マークが解除されること","削除マークが設定済み","なし","custom_attributesからmarked_for_deletion_atとmarked_for_deletion_reasonが削除される","高","削除取り消し機能"
"7","UT-ENT-007","Enterprise::Account","unmark_for_deletion","境界値","削除マークが設定されていない場合も正常終了すること","削除マークなし","なし","エラーなく処理が完了する","中","冪等性確認"
"8","UT-ENT-008","Enterprise::Account","saml_enabled?","正常系","SAML設定が有効な場合trueが返却されること","saml_settingsが存在しsaml_enabled?がtrue","なし","trueが返却される","高","認証機能"
"9","UT-ENT-009","Enterprise::Account","saml_enabled?","正常系","SAML設定が無効な場合falseが返却されること","saml_settingsが存在しsaml_enabled?がfalse","なし","falseが返却される","高","認証機能"
"10","UT-ENT-010","Enterprise::Account","saml_enabled?","境界値","saml_settingsがnilの場合falseが返却されること","saml_settingsがnil","なし","falseが返却される","高","null安全性"
"11","UT-ENT-011","Enterprise::AccountUser","permissions","正常系","カスタムロールがある場合権限にcustom_roleが追加されること","custom_roleが設定済み","なし","custom_roleの権限 + ['custom_role']が返却される","高","権限管理"
"12","UT-ENT-012","Enterprise::AccountUser","permissions","正常系","カスタムロールがない場合親クラスの権限が返却されること","custom_roleがnil","なし","superの結果が返却される","高","権限管理"
"13","UT-ENT-013","Enterprise::ActivityMessageHandler","automation_status_change_activity_content","正常系","Captain::Assistantによる解決時のメッセージが返却されること","Current.executed_byがCaptain::Assistantでresolved?がtrue","なし","captain.resolvedのi18nメッセージが返却される","中","アクティビティログ"
"14","UT-ENT-014","Enterprise::ActivityMessageHandler","automation_status_change_activity_content","正常系","Captain::Assistantによるオープン時のメッセージが返却されること","Current.executed_byがCaptain::Assistantでopen?がtrue","なし","captain.openのi18nメッセージが返却される","中","アクティビティログ"
"15","UT-ENT-015","Enterprise::ActivityMessageHandler","automation_status_change_activity_content","正常系","Captain::Assistant以外の場合親クラスのメソッドが呼ばれること","Current.executed_byがUser","なし","superの結果が返却される","中","アクティビティログ"
"16","UT-ENT-016","Enterprise::ApplicationRecord","droppables","正常系","SlaPolicyが追加されたドロップ可能リストが返却されること","なし","なし","親クラスのdroppables + ['SlaPolicy']が返却される","低","ドロップ対象設定"
"17","UT-ENT-017","Enterprise::AuditLog","log_additional_information","正常系","Account監査時にassociated_typeとusernameが設定されること","auditable_type='Account'でauditable_idが存在","なし","associated_type、associated_id、usernameが更新される","高","監査ログ"
"18","UT-ENT-018","Enterprise::AuditLog","log_additional_information","正常系","Account以外の監査時にusernameのみが設定されること","auditable_type='Inbox'","なし","usernameのみが更新される","高","監査ログ"
"19","UT-ENT-019","Enterprise::AuditLog","log_additional_information","境界値","userがnilの場合usernameがnilになること","userがnil","なし","usernameがnilで設定される","中","null安全性"
"20","UT-ENT-020","Enterprise::AutomationRule","conditions_attributes","正常系","sla_policy_idが条件属性に追加されること","なし","なし","親クラスの条件属性 + ['sla_policy_id']が返却される","中","自動化ルール拡張"
"21","UT-ENT-021","Enterprise::AutomationRule","actions_attributes","正常系","add_slaがアクション属性に追加されること","なし","なし","親クラスのアクション属性 + ['add_sla']が返却される","中","自動化ルール拡張"
"22","UT-ENT-022","Enterprise::Channelable","create_audit_log_entry","正常系","変更があった場合に監査ログが作成されること","inboxが存在し変更がある","saved_changesに変更あり","Enterprise::AuditLogが作成される","高","監査ログ"
"23","UT-ENT-023","Enterprise::Channelable","create_audit_log_entry","境界値","inboxがnilの場合ログが作成されないこと","inboxがnil","なし","early returnで処理終了","中","null安全性"
"24","UT-ENT-024","Enterprise::Channelable","create_audit_log_entry","境界値","変更がない場合ログが作成されないこと","saved_changesが空","なし","early returnで処理終了","中","冪等性確認"
"25","UT-ENT-025","Enterprise::Channelable","messaging_template_updates?","正常系","message_templates_last_updatedのみの変更でtrueが返却されること","なし","changes={'message_templates_last_updated'=>[old, new]}","trueが返却される","中","テンプレート更新判定"
"26","UT-ENT-026","Enterprise::Channelable","messaging_template_updates?","正常系","複数の変更がある場合falseが返却されること","なし","changes={'key1'=>[old, new], 'key2'=>[old, new]}","falseが返却される","中","テンプレート更新判定"
"27","UT-ENT-027","Enterprise::Conversation","list_of_keys","正常系","sla_policy_idがキーリストに追加されること","なし","なし","親クラスのキーリスト + ['sla_policy_id']が返却される","中","会話拡張"
"28","UT-ENT-028","Enterprise::Conversation","allowed_keys?","正常系","親クラスがtrueを返す場合trueが返却されること","superがtrue","なし","trueが返却される","中","会話拡張"
"29","UT-ENT-029","Enterprise::Conversation","allowed_keys?","正常系","call_statusの変更がある場合trueが返却されること","previous_changes['additional_attributes']にcall_statusを含む","なし","trueが返却される","中","通話ステータス対応"
"30","UT-ENT-030","Enterprise::Conversation","allowed_keys?","境界値","attrs_changeがArrayでない場合falseが返却されること","previous_changes['additional_attributes']がnil","なし","falseが返却される","中","型チェック"
"31","UT-ENT-031","Enterprise::Inbox","member_ids_with_assignment_capacity","正常系","自動割り当て無効時に親クラスの結果が返却されること","enable_auto_assignment?がfalse","なし","superの結果が返却される","高","エージェント割り当て"
"32","UT-ENT-032","Enterprise::Inbox","member_ids_with_assignment_capacity","正常系","上限超過エージェントが除外されること","enable_auto_assignment?がtrue、max_assignment_limitが5","なし","上限超過エージェントを除いたメンバーIDリストが返却される","高","エージェント割り当て"
"33","UT-ENT-033","Enterprise::Inbox","member_ids_with_assignment_capacity","境界値","max_assignment_limitが未設定の場合全員が返却されること","max_assignment_limitがblank","なし","superの結果がそのまま返却される","中","設定なし時の挙動"
"34","UT-ENT-034","Enterprise::Inbox","active_bot?","正常系","親クラスのactive_bot?がtrueの場合trueが返却されること","superがtrue","なし","trueが返却される","中","ボット判定"
"35","UT-ENT-035","Enterprise::Inbox","active_bot?","正常系","captain_active?がtrueの場合trueが返却されること","superがfalse、captain_active?がtrue","なし","trueが返却される","中","Captain対応"
"36","UT-ENT-036","Enterprise::Inbox","captain_active?","正常系","captain_assistantが存在しレスポンス残量がある場合trueが返却されること","captain_assistantが存在、current_available > 0","なし","trueが返却される","高","Captain判定"
"37","UT-ENT-037","Enterprise::Inbox","captain_active?","境界値","captain_assistantがnilの場合falseが返却されること","captain_assistantがnil","なし","falseが返却される","高","null安全性"
"38","UT-ENT-038","Enterprise::Inbox","captain_active?","境界値","レスポンス残量が0の場合falseが返却されること","captain_assistantが存在、current_available = 0","なし","falseが返却される","高","制限チェック"
"39","UT-ENT-039","Enterprise::Inbox","ensure_valid_max_assignment_limit","正常系","max_assignment_limitが正の値の場合エラーなし","auto_assignment_config['max_assignment_limit'] = 5","なし","エラーが追加されない","中","バリデーション"
"40","UT-ENT-040","Enterprise::Inbox","ensure_valid_max_assignment_limit","異常系","max_assignment_limitが0以下の場合エラーが追加されること","auto_assignment_config['max_assignment_limit'] = 0","なし","errors.add(:auto_assignment_config)が呼ばれる","中","バリデーション"
"41","UT-ENT-041","Enterprise::InboxAgentAvailability","member_ids_with_assignment_capacity","正常系","キャパシティフィルタリング無効時にmember_idsが返却されること","capacity_filtering_enabled?がfalse","なし","member_idsが返却される","高","エージェント割り当て"
"42","UT-ENT-042","Enterprise::InboxAgentAvailability","member_ids_with_assignment_capacity","正常系","キャパシティフィルタリング有効時にフィルタ後のIDが返却されること","capacity_filtering_enabled?がtrue","なし","キャパシティのあるエージェントのuser_idリストが返却される","高","エージェント割り当て"
"43","UT-ENT-043","Enterprise::InboxAgentAvailability","filter_by_capacity","正常系","キャパシティのあるエージェントのみが返却されること","capacity_filtering_enabled?がtrue","inbox_membersのスコープ","capacity_service.agent_has_capacity?がtrueのメンバーのみ返却","高","キャパシティフィルタ"
"44","UT-ENT-044","Enterprise::InboxAgentAvailability","capacity_filtering_enabled?","正常系","assignment_v2フィーチャーが有効でポリシーが存在する場合trueが返却されること","feature_enabled?('assignment_v2')がtrue、agent_capacity_policyが存在","なし","trueが返却される","中","フィーチャーフラグ"
"45","UT-ENT-045","Enterprise::InboxAgentAvailability","capacity_filtering_enabled?","境界値","assignment_v2フィーチャーが無効の場合falseが返却されること","feature_enabled?('assignment_v2')がfalse","なし","falseが返却される","中","フィーチャーフラグ"
"46","UT-ENT-046","Enterprise::Account::PlanUsageAndLimits","usage_limits","正常系","正しい形式の使用量制限が返却されること","アカウントが存在","なし","{agents:, inboxes:, captain:{documents:, responses:}}が返却される","高","プラン制限"
"47","UT-ENT-047","Enterprise::Account::PlanUsageAndLimits","increment_response_usage","正常系","レスポンス使用量が1増加すること","captain_responses_usage = 5","なし","captain_responses_usage = 6になる","高","使用量追跡"
"48","UT-ENT-048","Enterprise::Account::PlanUsageAndLimits","increment_response_usage","境界値","初回使用時に0から1になること","captain_responses_usageがnil","なし","captain_responses_usage = 1になる","高","初期化処理"
"49","UT-ENT-049","Enterprise::Account::PlanUsageAndLimits","reset_response_usage","正常系","レスポンス使用量が0にリセットされること","captain_responses_usage = 100","なし","captain_responses_usage = 0になる","高","使用量リセット"
"50","UT-ENT-050","Enterprise::Account::PlanUsageAndLimits","update_document_usage","正常系","ドキュメント使用量がドキュメント数に更新されること","captain_documents.count = 10","なし","captain_documents_usage = 10になる","高","使用量追跡"
"51","UT-ENT-051","Enterprise::Account::PlanUsageAndLimits","subscribed_features","正常系","プラン機能が返却されること","CHATWOOT_CLOUD_PLAN_FEATURESが設定済み","なし","plan_featuresの該当プラン配列が返却される","中","プラン機能"
"52","UT-ENT-052","Enterprise::Account::PlanUsageAndLimits","subscribed_features","境界値","設定がない場合空配列が返却されること","CHATWOOT_CLOUD_PLAN_FEATURESがblank","なし","[]が返却される","中","設定なし時"
"53","UT-ENT-053","Enterprise::Account::PlanUsageAndLimits","captain_monthly_limit","正常系","limitsから設定値が取得されること","limits['captain_documents'] = 100","なし","{documents: 100, responses: デフォルト値}が返却される","高","月間制限"
"54","UT-ENT-054","Enterprise::Account::PlanUsageAndLimits","get_captain_limits","正常系","正しい残量が計算されること","total_count = 100, consumed = 30","type = :responses","current_available = 70が返却される","高","制限計算"
"55","UT-ENT-055","Enterprise::Account::PlanUsageAndLimits","get_captain_limits","境界値","consumedが負の場合0として計算されること","consumed = -10","type = :responses","consumed = 0として計算される","中","負数ガード"
"56","UT-ENT-056","Enterprise::Account::PlanUsageAndLimits","get_captain_limits","境界値","使用量が上限を超えた場合current_availableが0になること","total_count = 100, consumed = 150","type = :responses","current_available = 0が返却される","高","上限超過時"
"57","UT-ENT-057","Enterprise::Account::PlanUsageAndLimits","default_captain_limits","正常系","プランに応じた制限が返却されること","CAPTAIN_CLOUD_PLAN_LIMITSが設定済み、plan_nameが有効","なし","該当プランの制限が返却される","高","デフォルト制限"
"58","UT-ENT-058","Enterprise::Account::PlanUsageAndLimits","default_captain_limits","境界値","設定がない場合max_limitが返却されること","CAPTAIN_CLOUD_PLAN_LIMITSがblank","なし","max_limits（無制限）が返却される","中","設定なし時"
"59","UT-ENT-059","Enterprise::Account::PlanUsageAndLimits","default_captain_limits","境界値","plan_nameがない場合zero_limitsが返却されること","plan_nameがblank","なし","zero_limits（0制限）が返却される","中","プラン未設定時"
"60","UT-ENT-060","Enterprise::Account::PlanUsageAndLimits","default_captain_limits","異常系","JSON解析エラー時にmax_limitsが返却されること","CAPTAIN_CLOUD_PLAN_LIMITSが不正なJSON","なし","max_limits（無制限）が返却される","中","エラーハンドリング"
"61","UT-ENT-061","Enterprise::Account::PlanUsageAndLimits","validate_limit_keys","正常系","有効なlimitsでエラーなし","limits = {inboxes: 10, agents: 5}","なし","エラーが追加されない","高","バリデーション"
"62","UT-ENT-062","Enterprise::Account::PlanUsageAndLimits","validate_limit_keys","異常系","limitsがHashでない場合エラーが追加されること","limits = 'invalid'","なし","errors.add(:limits)が呼ばれる","高","バリデーション"
"63","UT-ENT-063","Enterprise::Account::PlanUsageAndLimits","validate_limit_keys","異常系","不正なキーがある場合エラーが追加されること","limits = {invalid_key: 10}","なし","errors.add(:limits)が呼ばれる","高","バリデーション"
"64","UT-ENT-064","Enterprise::Audit::Macro","included","正常系","accountに関連付けて監査されること","Macroモデル","なし","audited associated_with: :accountが設定される","中","監査設定"
"65","UT-ENT-065","Enterprise::Audit::Account","included","正常系","update時のみ監査されること","Accountモデル","なし","audited on: [:update]が設定される","中","監査設定"
"66","UT-ENT-066","Enterprise::Audit::Account","included","正常系","関連監査が有効化されること","Accountモデル","なし","has_associated_auditsが設定される","中","監査設定"
"67","UT-ENT-067","Enterprise::Audit::Inbox","included","正常系","create/update時に監査されること","Inboxモデル","なし","audited on: [:create, :update]が設定される","中","監査設定"
"68","UT-ENT-068","Enterprise::Audit::AccountUser","included","正常系","指定カラムのみ監査されること","AccountUserモデル","なし","availability, role, account_id, inviter_id, user_idのみ監査される","中","監査設定"
"69","UT-ENT-069","Enterprise::Audit::Team","included","正常系","accountに関連付けて監査されること","Teamモデル","なし","audited associated_with: :accountが設定される","中","監査設定"
"70","UT-ENT-070","Enterprise::Audit::Conversation","included","正常系","destroy時のみ監査されること","Conversationモデル","なし","audited only: [], on: [:destroy]が設定される","中","監査設定"
"71","UT-ENT-071","Enterprise::Audit::AutomationRule","included","正常系","accountに関連付けて監査されること","AutomationRuleモデル","なし","audited associated_with: :accountが設定される","中","監査設定"
"72","UT-ENT-072","Enterprise::Audit::Webhook","included","正常系","accountに関連付けて監査されること","Webhookモデル","なし","audited associated_with: :accountが設定される","中","監査設定"
"73","UT-ENT-073","Enterprise::Audit::InboxMember","create_audit_log_entry_on_create","正常系","作成時に監査ログが作成されること","InboxMemberが作成される","なし","Enterprise::AuditLogがaction='create'で作成される","高","監査ログ"
"74","UT-ENT-074","Enterprise::Audit::InboxMember","create_audit_log_entry_on_delete","正常系","削除時に監査ログが作成されること","InboxMemberが削除される","なし","Enterprise::AuditLogがaction='destroy'で作成される","高","監査ログ"
"75","UT-ENT-075","Enterprise::Audit::InboxMember","create_audit_log_entry","境界値","inboxがblankの場合ログが作成されないこと","inboxがnil","action='create'","early returnで処理終了","中","null安全性"
"76","UT-ENT-076","Enterprise::Audit::TeamMember","create_audit_log_entry_on_create","正常系","作成時に監査ログが作成されること","TeamMemberが作成される","なし","Enterprise::AuditLogがaction='create'で作成される","高","監査ログ"
"77","UT-ENT-077","Enterprise::Audit::TeamMember","create_audit_log_entry_on_delete","正常系","削除時に監査ログが作成されること","TeamMemberが削除される","なし","Enterprise::AuditLogがaction='destroy'で作成される","高","監査ログ"
"78","UT-ENT-078","Enterprise::Audit::TeamMember","create_audit_log_entry","境界値","teamがblankの場合ログが作成されないこと","teamがnil","action='create'","early returnで処理終了","中","null安全性"
"79","UT-ENT-079","Enterprise::Audit::User","included","正常系","指定カラムのみ監査対象となること","Userモデル","なし","availability, display_name, email, nameのみ対象になる","中","監査設定"
"80","UT-ENT-080","Enterprise::Audit::User","included","正常系","常にfalseを返すprocで監査が無効化されること","Userモデル","なし","unless条件により通常操作では監査されない","中","監査設定"
"81","UT-ENT-081","Enterprise::Concerns::CustomAttributeDefinition","cleanup_conversation_required_attributes","正常系","会話属性削除時にrequired_attributesから除外されること","conversation_attribute?がtrue、attribute_keyがrequired_attributesに含まれる","なし","account.conversation_required_attributesからattribute_keyが削除される","高","属性クリーンアップ"
"82","UT-ENT-082","Enterprise::Concerns::CustomAttributeDefinition","cleanup_conversation_required_attributes","境界値","会話属性でない場合処理がスキップされること","conversation_attribute?がfalse","なし","early returnで処理終了","中","条件チェック"
"83","UT-ENT-083","Enterprise::Concerns::CustomAttributeDefinition","cleanup_conversation_required_attributes","境界値","required_attributesに含まれない場合処理がスキップされること","attribute_keyがrequired_attributesに含まれない","なし","early returnで処理終了","中","条件チェック"
"84","UT-ENT-084","Enterprise::Concerns::Account","included","正常系","SLAポリシーのリレーションが定義されること","Accountモデル","なし","has_many :sla_policiesが設定される","中","リレーション定義"
"85","UT-ENT-085","Enterprise::Concerns::Account","included","正常系","カスタムロールのリレーションが定義されること","Accountモデル","なし","has_many :custom_rolesが設定される","中","リレーション定義"
"86","UT-ENT-086","Enterprise::Concerns::Account","included","正常系","Captain関連のリレーションが定義されること","Accountモデル","なし","captain_assistants, captain_documents等が設定される","中","リレーション定義"
"87","UT-ENT-087","Enterprise::Concerns::Account","included","正常系","SAML設定のリレーションが定義されること","Accountモデル","なし","has_one :saml_settingsが設定される","中","リレーション定義"
"88","UT-ENT-088","Enterprise::Concerns::Article","add_article_embedding","正常系","help_center_embedding_search有効時にジョブがキューされること","feature_enabled?がtrue、タイトルが変更された","なし","Portal::ArticleIndexingJobがperform_laterされる","高","埋め込み検索"
"89","UT-ENT-089","Enterprise::Concerns::Article","add_article_embedding","境界値","フィーチャーが無効の場合ジョブがキューされないこと","feature_enabled?がfalse","なし","ジョブがキューされない","中","フィーチャーフラグ"
"90","UT-ENT-090","Enterprise::Concerns::Article","vector_search","正常系","ベクトル検索で関連記事が返却されること","ArticleEmbeddingが存在","query='検索ワード'","最大5件の関連記事が返却される","高","検索機能"
"91","UT-ENT-091","Enterprise::Concerns::Article","generate_and_save_article_seach_terms","正常系","検索語が生成され埋め込みが保存されること","記事が存在","なし","article_embeddingsが作成される","中","検索語生成"
"92","UT-ENT-092","Enterprise::Concerns::Article","generate_article_search_terms","正常系","OpenAI APIから検索語が取得されること","OPENAI_API_KEYが設定済み","なし","search_terms配列が返却される","中","外部API連携"
"93","UT-ENT-093","Enterprise::Concerns::Article","openai_api_url","正常系","カスタムエンドポイントが使用されること","CAPTAIN_OPEN_AI_ENDPOINTが設定済み","なし","カスタムエンドポイントのURLが返却される","低","設定取得"
"94","UT-ENT-094","Enterprise::Concerns::Article","openai_api_url","境界値","デフォルトエンドポイントが使用されること","CAPTAIN_OPEN_AI_ENDPOINTが未設定","なし","https://api.openai.com/v1/chat/completionsが返却される","低","デフォルト設定"
"95","UT-ENT-095","Enterprise::Concerns::Contact","associate_company_from_email","正常系","メール設定時に会社が関連付けられること","email有効、company_id未設定、email初回設定","なし","Contacts::CompanyAssociationServiceが呼ばれる","高","会社関連付け"
"96","UT-ENT-096","Enterprise::Concerns::Contact","should_associate_company?","正常系","条件を満たす場合trueが返却されること","email有効、company_id nil、email変更あり、前回nil","なし","trueが返却される","中","条件判定"
"97","UT-ENT-097","Enterprise::Concerns::Contact","should_associate_company?","境界値","emailがない場合falseが返却されること","emailがblank","なし","falseが返却される","中","条件判定"
"98","UT-ENT-098","Enterprise::Concerns::Contact","should_associate_company?","境界値","company_idが設定済みの場合falseが返却されること","company_idが設定済み","なし","falseが返却される","中","条件判定"
"99","UT-ENT-099","Enterprise::Concerns::Contact","associate_company_from_email","異常系","サービスエラー時にログ出力のみで処理続行すること","CompanyAssociationServiceがエラー","なし","エラーログ出力後、例外は発生しない","中","エラーハンドリング"
"100","UT-ENT-100","Enterprise::Concerns::AssignmentPolicy","included","正常系","Enterprise環境でenumが定義されること","ChatwootApp.enterprise?がtrue","なし","assignment_order enumが定義される","中","条件付き定義"
"101","UT-ENT-101","Enterprise::Concerns::AssignmentPolicy","included","境界値","非Enterprise環境でenumが定義されないこと","ChatwootApp.enterprise?がfalse","なし","enumが定義されない","中","条件付き定義"
"102","UT-ENT-102","Enterprise::Concerns::Inbox","included","正常系","captain_inboxリレーションが定義されること","Inboxモデル","なし","has_one :captain_inboxが設定される","中","リレーション定義"
"103","UT-ENT-103","Enterprise::Concerns::Inbox","included","正常系","captain_assistantがthrough関係で定義されること","Inboxモデル","なし","has_one :captain_assistant, through: :captain_inboxが設定される","中","リレーション定義"
"104","UT-ENT-104","Enterprise::Concerns::Inbox","included","正常系","inbox_capacity_limitsリレーションが定義されること","Inboxモデル","なし","has_many :inbox_capacity_limitsが設定される","中","リレーション定義"
"105","UT-ENT-105","Enterprise::Concerns::AccountUser","included","正常系","custom_roleリレーションが定義されること","AccountUserモデル","なし","belongs_to :custom_roleが設定される","中","リレーション定義"
"106","UT-ENT-106","Enterprise::Concerns::AccountUser","included","正常系","agent_capacity_policyリレーションが定義されること","AccountUserモデル","なし","belongs_to :agent_capacity_policyが設定される","中","リレーション定義"
"107","UT-ENT-107","Enterprise::Concerns::Attachment","enqueue_audio_transcription","正常系","音声ファイル作成時に文字起こしジョブがキューされること","file_type = :audio","なし","Messages::AudioTranscriptionJobがperform_laterされる","高","音声文字起こし"
"108","UT-ENT-108","Enterprise::Concerns::Attachment","enqueue_audio_transcription","境界値","音声以外のファイルではジョブがキューされないこと","file_type = :image","なし","ジョブがキューされない","中","ファイルタイプチェック"
"109","UT-ENT-109","Enterprise::Concerns::Conversation","validate_sla_policy","正常系","有効なSLAポリシー設定でエラーなし","sla_policyが存在、account_idが一致、既存ポリシーなし","sla_policy_id = 1","エラーが追加されない","高","SLAバリデーション"
"110","UT-ENT-110","Enterprise::Concerns::Conversation","validate_sla_policy","異常系","SLAポリシー削除時にエラーが追加されること","既存sla_policy_idあり","sla_policy_id = nil","errors.add(:sla_policy)が呼ばれる","高","SLAバリデーション"
"111","UT-ENT-111","Enterprise::Concerns::Conversation","validate_sla_policy","異常系","既にSLAポリシーがある場合エラーが追加されること","既存sla_policy_idあり","新しいsla_policy_id","errors.add(:sla_policy)が呼ばれる","高","SLAバリデーション"
"112","UT-ENT-112","Enterprise::Concerns::Conversation","validate_sla_policy","異常系","アカウント不一致時にエラーが追加されること","sla_policy.account_id != conversation.account_id","sla_policy_id = 1","errors.add(:sla_policy)が呼ばれる","高","SLAバリデーション"
"113","UT-ENT-113","Enterprise::Concerns::Conversation","ensure_applied_sla_is_created","正常系","SLAポリシー設定時にAppliedSlaが作成されること","applied_slaがblank","sla_policy_id変更","create_applied_slaが呼ばれる","高","SLA適用"
"114","UT-ENT-114","Enterprise::Concerns::Conversation","ensure_applied_sla_is_created","境界値","既にAppliedSlaがある場合作成されないこと","applied_slaが存在","sla_policy_id変更","create_applied_slaが呼ばれない","中","冪等性確認"
"115","UT-ENT-115","Enterprise::Concerns::Conversation","ensure_applied_sla_is_created","異常系","RecordInvalid時にロールバックされること","AppliedSla作成がRecordInvalidを発生","sla_policy_id変更","ActiveRecord::Rollbackが発生","高","トランザクション"
"116","UT-ENT-116","Enterprise::Concerns::Portal","enqueue_cloudflare_verification","正常系","カスタムドメイン設定時にCloudflare検証ジョブがキューされること","custom_domainが設定、chatwoot_cloud?がtrue","なし","Enterprise::CloudflareVerificationJobがperform_laterされる","高","ドメイン検証"
"117","UT-ENT-117","Enterprise::Concerns::Portal","enqueue_cloudflare_verification","境界値","custom_domainがblankの場合ジョブがキューされないこと","custom_domainがblank","なし","early returnで処理終了","中","条件チェック"
"118","UT-ENT-118","Enterprise::Concerns::Portal","enqueue_cloudflare_verification","境界値","chatwoot_cloudでない場合ジョブがキューされないこと","chatwoot_cloud?がfalse","なし","early returnで処理終了","中","環境チェック"
"119","UT-ENT-119","Enterprise::Concerns::User","ensure_installation_pricing_plan_quantity","正常系","premium以外のプランではエラーなし","pricing_plan = 'free'","なし","エラーが追加されない","中","プラン制限"
"120","UT-ENT-120","Enterprise::Concerns::User","ensure_installation_pricing_plan_quantity","正常系","premiumプランで上限内の場合エラーなし","pricing_plan = 'premium'、User.count < pricing_plan_quantity","なし","エラーが追加されない","高","プラン制限"
"121","UT-ENT-121","Enterprise::Concerns::User","ensure_installation_pricing_plan_quantity","異常系","premiumプランで上限超過の場合エラーが追加されること","pricing_plan = 'premium'、User.count >= pricing_plan_quantity","なし","errors.add(:base)が呼ばれる","高","プラン制限"
"122","UT-ENT-122","Enterprise::Concerns::User","included","正常系","captain_responsesリレーションが定義されること","Userモデル","なし","has_many :captain_responsesが設定される","中","リレーション定義"
"123","UT-ENT-123","Enterprise::Concerns::User","included","正常系","copilot_threadsリレーションが定義されること","Userモデル","なし","has_many :copilot_threadsが設定される","中","リレーション定義"
