@@ -1175,6 +1175,117 @@ func containsSubstr(s, substr string) bool {
11751175 return false
11761176}
11771177
1178+ func TestLatestPermissionPrompt_PermissionMessage (t * testing.T ) {
1179+ database , err := db .Open (":memory:" )
1180+ if err != nil {
1181+ t .Fatalf ("Failed to create test database: %v" , err )
1182+ }
1183+ defer database .Close ()
1184+
1185+ m := & AppModel {db : database }
1186+
1187+ // Create a task
1188+ task := & db.Task {Title : "Test task" , Status : db .StatusBlocked }
1189+ if err := database .CreateTask (task ); err != nil {
1190+ t .Fatalf ("Failed to create task: %v" , err )
1191+ }
1192+
1193+ // Log a permission message (as the notification hook would)
1194+ database .AppendTaskLog (task .ID , "system" , "Waiting for permission: Edit(src/models/offer.rb)" )
1195+
1196+ // Should return the full permission message
1197+ result := m .latestPermissionPrompt (task .ID )
1198+ if result != "Waiting for permission: Edit(src/models/offer.rb)" {
1199+ t .Errorf ("expected 'Waiting for permission: Edit(src/models/offer.rb)', got '%s'" , result )
1200+ }
1201+ }
1202+
1203+ func TestLatestPermissionPrompt_GenericWaiting (t * testing.T ) {
1204+ database , err := db .Open (":memory:" )
1205+ if err != nil {
1206+ t .Fatalf ("Failed to create test database: %v" , err )
1207+ }
1208+ defer database .Close ()
1209+
1210+ m := & AppModel {db : database }
1211+
1212+ task := & db.Task {Title : "Test task" , Status : db .StatusBlocked }
1213+ if err := database .CreateTask (task ); err != nil {
1214+ t .Fatalf ("Failed to create task: %v" , err )
1215+ }
1216+
1217+ // Log a generic waiting message (no specific message from hook)
1218+ database .AppendTaskLog (task .ID , "system" , "Waiting for permission" )
1219+
1220+ result := m .latestPermissionPrompt (task .ID )
1221+ if result != "Waiting for permission" {
1222+ t .Errorf ("expected 'Waiting for permission', got '%s'" , result )
1223+ }
1224+ }
1225+
1226+ func TestLatestPermissionPrompt_ResumedClears (t * testing.T ) {
1227+ database , err := db .Open (":memory:" )
1228+ if err != nil {
1229+ t .Fatalf ("Failed to create test database: %v" , err )
1230+ }
1231+ defer database .Close ()
1232+
1233+ m := & AppModel {db : database }
1234+
1235+ task := & db.Task {Title : "Test task" , Status : db .StatusBlocked }
1236+ if err := database .CreateTask (task ); err != nil {
1237+ t .Fatalf ("Failed to create task: %v" , err )
1238+ }
1239+
1240+ // Log a permission message, then a resumed message
1241+ database .AppendTaskLog (task .ID , "system" , "Waiting for permission: Edit(file.go)" )
1242+ database .AppendTaskLog (task .ID , "system" , "Claude resumed working" )
1243+
1244+ // Should return empty since Claude resumed
1245+ result := m .latestPermissionPrompt (task .ID )
1246+ if result != "" {
1247+ t .Errorf ("expected empty string after resume, got '%s'" , result )
1248+ }
1249+ }
1250+
1251+ func TestLatestPermissionPrompt_NoLogs (t * testing.T ) {
1252+ database , err := db .Open (":memory:" )
1253+ if err != nil {
1254+ t .Fatalf ("Failed to create test database: %v" , err )
1255+ }
1256+ defer database .Close ()
1257+
1258+ m := & AppModel {db : database }
1259+
1260+ // No task or logs - should return empty
1261+ result := m .latestPermissionPrompt (999 )
1262+ if result != "" {
1263+ t .Errorf ("expected empty string for nonexistent task, got '%s'" , result )
1264+ }
1265+ }
1266+
1267+ func TestLatestPermissionPrompt_UserInputMessage (t * testing.T ) {
1268+ database , err := db .Open (":memory:" )
1269+ if err != nil {
1270+ t .Fatalf ("Failed to create test database: %v" , err )
1271+ }
1272+ defer database .Close ()
1273+
1274+ m := & AppModel {db : database }
1275+
1276+ task := & db.Task {Title : "Test task" , Status : db .StatusBlocked }
1277+ if err := database .CreateTask (task ); err != nil {
1278+ t .Fatalf ("Failed to create task: %v" , err )
1279+ }
1280+
1281+ database .AppendTaskLog (task .ID , "system" , "Waiting for user input" )
1282+
1283+ result := m .latestPermissionPrompt (task .ID )
1284+ if result != "Waiting for user input" {
1285+ t .Errorf ("expected 'Waiting for user input', got '%s'" , result )
1286+ }
1287+ }
1288+
11781289func TestJumpToNotificationKey_FocusExecutor (t * testing.T ) {
11791290 // Create app model with kanban board and notification
11801291 tasks := []* db.Task {
0 commit comments