@@ -1148,3 +1148,64 @@ Hello!
11481148 t .Fatalf ("Failed to execute prompt: %v" , err )
11491149 }
11501150}
1151+
1152+ func TestMultiMessagesRenderPrompt (t * testing.T ) {
1153+ tempDir := t .TempDir ()
1154+
1155+ mockPromptFile := filepath .Join (tempDir , "example.prompt" )
1156+ mockPromptContent := `---
1157+ model: test/chat
1158+ description: A test prompt
1159+ ---
1160+ <<<dotprompt:role:system>>>
1161+ You are a pirate!
1162+
1163+ <<<dotprompt:role:user>>>
1164+ Hello!
1165+ `
1166+
1167+ if err := os .WriteFile (mockPromptFile , []byte (mockPromptContent ), 0644 ); err != nil {
1168+ t .Fatalf ("Failed to create mock prompt file: %v" , err )
1169+ }
1170+
1171+ prompt := LoadPrompt (registry .New (), tempDir , "example.prompt" , "multi-namespace-roles" )
1172+
1173+ actionOpts , err := prompt .Render (context .Background (), map [string ]any {})
1174+ if err != nil {
1175+ t .Fatalf ("Failed to execute prompt: %v" , err )
1176+ }
1177+
1178+ // Check that actionOpts is not nil
1179+ if actionOpts == nil {
1180+ t .Fatal ("Expected actionOpts to be non-nil" )
1181+ }
1182+
1183+ // Check that we have exactly 2 messages (system and user)
1184+ if len (actionOpts .Messages ) != 2 {
1185+ t .Fatalf ("Expected 2 messages, got %d" , len (actionOpts .Messages ))
1186+ }
1187+
1188+ // Check first message (system role)
1189+ systemMsg := actionOpts .Messages [0 ]
1190+ if systemMsg .Role != RoleSystem {
1191+ t .Errorf ("Expected first message role to be 'system', got '%s'" , systemMsg .Role )
1192+ }
1193+ if len (systemMsg .Content ) == 0 {
1194+ t .Fatal ("Expected system message to have content" )
1195+ }
1196+ if strings .TrimSpace (systemMsg .Content [0 ].Text ) != "You are a pirate!" {
1197+ t .Errorf ("Expected system message text to be 'You are a pirate!', got '%s'" , systemMsg .Content [0 ].Text )
1198+ }
1199+
1200+ // Check second message (user role)
1201+ userMsg := actionOpts .Messages [1 ]
1202+ if userMsg .Role != RoleUser {
1203+ t .Errorf ("Expected second message role to be 'user', got '%s'" , userMsg .Role )
1204+ }
1205+ if len (userMsg .Content ) == 0 {
1206+ t .Fatal ("Expected user message to have content" )
1207+ }
1208+ if strings .TrimSpace (userMsg .Content [0 ].Text ) != "Hello!" {
1209+ t .Errorf ("Expected user message text to be 'Hello!', got '%s'" , userMsg .Content [0 ].Text )
1210+ }
1211+ }
0 commit comments