@@ -3,6 +3,7 @@ package github
33import (
44 "context"
55 "encoding/json"
6+ "maps"
67 "net/http"
78 "testing"
89
@@ -192,14 +193,24 @@ func Test_ProjectsWrite_UpdateProjectItem_AttachedIssueFieldTypes(t *testing.T)
192193 tests := []struct {
193194 name string
194195 fieldNode map [string ]any
195- fieldName string
196+ fieldRef map [ string ] any
196197 value any
197198 want IssueFieldCreateOrUpdateInput
198199 }{
199200 {
200201 name : "text" ,
201202 fieldNode : attachedIssueFieldNode ("PVTF_customer" , 701 , "IF_customer" , "Customer" , "TEXT" , nil ),
202- fieldName : "cUsToMeR" ,
203+ fieldRef : map [string ]any {"name" : "cUsToMeR" },
204+ value : "Acme" ,
205+ want : IssueFieldCreateOrUpdateInput {
206+ FieldID : githubv4 .ID ("IF_customer" ),
207+ TextValue : githubv4 .NewString (githubv4 .String ("Acme" )),
208+ },
209+ },
210+ {
211+ name : "text by project field ID" ,
212+ fieldNode : attachedIssueFieldNode ("PVTF_customer" , 701 , "IF_customer" , "Customer" , "TEXT" , nil ),
213+ fieldRef : map [string ]any {"id" : float64 (701 )},
203214 value : "Acme" ,
204215 want : IssueFieldCreateOrUpdateInput {
205216 FieldID : githubv4 .ID ("IF_customer" ),
@@ -209,7 +220,7 @@ func Test_ProjectsWrite_UpdateProjectItem_AttachedIssueFieldTypes(t *testing.T)
209220 {
210221 name : "number" ,
211222 fieldNode : attachedIssueFieldNode ("PVTF_score" , 702 , "IF_score" , "Score" , "NUMBER" , nil ),
212- fieldName : " Score" ,
223+ fieldRef : map [ string ] any { "name" : " Score"} ,
213224 value : 3.5 ,
214225 want : IssueFieldCreateOrUpdateInput {
215226 FieldID : githubv4 .ID ("IF_score" ),
@@ -219,7 +230,7 @@ func Test_ProjectsWrite_UpdateProjectItem_AttachedIssueFieldTypes(t *testing.T)
219230 {
220231 name : "date" ,
221232 fieldNode : attachedIssueFieldNode ("PVTF_due" , 703 , "IF_due" , "Due" , "DATE" , nil ),
222- fieldName : " Due" ,
233+ fieldRef : map [ string ] any { "name" : " Due"} ,
223234 value : "2026-08-01" ,
224235 want : IssueFieldCreateOrUpdateInput {
225236 FieldID : githubv4 .ID ("IF_due" ),
@@ -232,8 +243,21 @@ func Test_ProjectsWrite_UpdateProjectItem_AttachedIssueFieldTypes(t *testing.T)
232243 {"id" : "IFO_low" , "name" : "Low" },
233244 {"id" : "IFO_high" , "name" : "High" },
234245 }),
235- fieldName : "rIsK" ,
236- value : "hIgH" ,
246+ fieldRef : map [string ]any {"name" : "rIsK" },
247+ value : "hIgH" ,
248+ want : IssueFieldCreateOrUpdateInput {
249+ FieldID : githubv4 .ID ("IF_risk" ),
250+ SingleSelectOptionID : & optionID ,
251+ },
252+ },
253+ {
254+ name : "single select by project field ID" ,
255+ fieldNode : attachedIssueFieldNode ("PVTSSF_risk" , 704 , "IF_risk" , "Risk" , "SINGLE_SELECT" , []map [string ]any {
256+ {"id" : "IFO_low" , "name" : "Low" },
257+ {"id" : "IFO_high" , "name" : "High" },
258+ }),
259+ fieldRef : map [string ]any {"id" : float64 (704 )},
260+ value : "IFO_high" ,
237261 want : IssueFieldCreateOrUpdateInput {
238262 FieldID : githubv4 .ID ("IF_risk" ),
239263 SingleSelectOptionID : & optionID ,
@@ -242,7 +266,7 @@ func Test_ProjectsWrite_UpdateProjectItem_AttachedIssueFieldTypes(t *testing.T)
242266 {
243267 name : "clear" ,
244268 fieldNode : attachedIssueFieldNode ("PVTF_customer" , 701 , "IF_customer" , "Customer" , "TEXT" , nil ),
245- fieldName : " Customer" ,
269+ fieldRef : map [ string ] any { "name" : " Customer"} ,
246270 value : nil ,
247271 want : IssueFieldCreateOrUpdateInput {
248272 FieldID : githubv4 .ID ("IF_customer" ),
@@ -275,16 +299,15 @@ func Test_ProjectsWrite_UpdateProjectItem_AttachedIssueFieldTypes(t *testing.T)
275299 deps := BaseDeps {Client : mustNewGHClient (t , rest ), GQLClient : gql }
276300 serverTool := ProjectsWrite (translations .NullTranslationHelper )
277301 handler := serverTool .Handler (deps )
302+ updatedField := map [string ]any {"value" : tt .value }
303+ maps .Copy (updatedField , tt .fieldRef )
278304 request := createMCPRequest (map [string ]any {
279305 "method" : projectsMethodUpdateProjectItem ,
280306 "owner" : "octo-org" ,
281307 "owner_type" : "org" ,
282308 "project_number" : float64 (1 ),
283309 "item_id" : float64 (1001 ),
284- "updated_field" : map [string ]any {
285- "name" : tt .fieldName ,
286- "value" : tt .value ,
287- },
310+ "updated_field" : updatedField ,
288311 })
289312 result , err := handler (ContextWithDeps (context .Background (), deps ), & request )
290313 require .NoError (t , err )
0 commit comments