@@ -2050,4 +2050,124 @@ defmodule Lightning.AiAssistantTest do
20502050 assert AiAssistant . title_max_length ( ) == 40
20512051 end
20522052 end
2053+
2054+ describe "list_sessions/2 - job scoping" do
2055+ test "only shows sessions for the currently selected job" do
2056+ user = insert ( :user )
2057+ project = insert ( :project )
2058+ workflow = insert ( :workflow , project: project )
2059+ job_a = insert ( :job , workflow: workflow , name: "Job A" )
2060+ job_b = insert ( :job , workflow: workflow , name: "Job B" )
2061+
2062+ # Create sessions directly in the database (bypass AI processing)
2063+ session_a1 =
2064+ insert ( :chat_session ,
2065+ job: job_a ,
2066+ user: user ,
2067+ title: "Help with Job A - 1" ,
2068+ session_type: "job_code"
2069+ )
2070+
2071+ session_a2 =
2072+ insert ( :chat_session ,
2073+ job: job_a ,
2074+ user: user ,
2075+ title: "Help with Job A - 2" ,
2076+ session_type: "job_code"
2077+ )
2078+
2079+ _session_b =
2080+ insert ( :chat_session ,
2081+ job: job_b ,
2082+ user: user ,
2083+ title: "Help with Job B" ,
2084+ session_type: "job_code"
2085+ )
2086+
2087+ # List sessions for job_a
2088+ result = AiAssistant . list_sessions ( job_a , :desc )
2089+
2090+ # Should only return job_a sessions
2091+ session_ids = Enum . map ( result . sessions , & & 1 . id )
2092+ assert session_a1 . id in session_ids
2093+ assert session_a2 . id in session_ids
2094+ assert length ( result . sessions ) == 2
2095+ end
2096+
2097+ test "list_sessions for job_b doesn't include job_a sessions" do
2098+ user = insert ( :user )
2099+ project = insert ( :project )
2100+ workflow = insert ( :workflow , project: project )
2101+ job_a = insert ( :job , workflow: workflow , name: "Job A" )
2102+ job_b = insert ( :job , workflow: workflow , name: "Job B" )
2103+
2104+ # Create sessions directly in the database
2105+ _session_a =
2106+ insert ( :chat_session ,
2107+ job: job_a ,
2108+ user: user ,
2109+ title: "Help with Job A" ,
2110+ session_type: "job_code"
2111+ )
2112+
2113+ session_b =
2114+ insert ( :chat_session ,
2115+ job: job_b ,
2116+ user: user ,
2117+ title: "Help with Job B" ,
2118+ session_type: "job_code"
2119+ )
2120+
2121+ # List sessions for job_b
2122+ result = AiAssistant . list_sessions ( job_b , :desc )
2123+
2124+ # Should only return job_b session
2125+ session_ids = Enum . map ( result . sessions , & & 1 . id )
2126+ assert session_b . id in session_ids
2127+ assert length ( result . sessions ) == 1
2128+ end
2129+
2130+ test "sessions from multiple jobs don't cross-contaminate" do
2131+ user = insert ( :user )
2132+ project = insert ( :project )
2133+ workflow = insert ( :workflow , project: project )
2134+ job_a = insert ( :job , workflow: workflow , name: "Job A" )
2135+ job_b = insert ( :job , workflow: workflow , name: "Job B" )
2136+ job_c = insert ( :job , workflow: workflow , name: "Job C" )
2137+
2138+ # Create sessions for all jobs
2139+ session_a =
2140+ insert ( :chat_session ,
2141+ job: job_a ,
2142+ user: user ,
2143+ title: "Session A" ,
2144+ session_type: "job_code"
2145+ )
2146+
2147+ session_b =
2148+ insert ( :chat_session ,
2149+ job: job_b ,
2150+ user: user ,
2151+ title: "Session B" ,
2152+ session_type: "job_code"
2153+ )
2154+
2155+ session_c =
2156+ insert ( :chat_session ,
2157+ job: job_c ,
2158+ user: user ,
2159+ title: "Session C" ,
2160+ session_type: "job_code"
2161+ )
2162+
2163+ # Each job should only see its own session
2164+ result_a = AiAssistant . list_sessions ( job_a , :desc )
2165+ result_b = AiAssistant . list_sessions ( job_b , :desc )
2166+ result_c = AiAssistant . list_sessions ( job_c , :desc )
2167+
2168+ assert [ session_a . id ] == Enum . map ( result_a . sessions , & & 1 . id )
2169+ assert [ session_b . id ] == Enum . map ( result_b . sessions , & & 1 . id )
2170+ assert [ session_c . id ] == Enum . map ( result_c . sessions , & & 1 . id )
2171+ end
2172+ end
20532173end
0 commit comments