@@ -410,6 +410,15 @@ func TestIssueCreate_web(t *testing.T) {
410410 http := & httpmock.Registry {}
411411 defer http .Verify (t )
412412
413+ http .Register (
414+ httpmock .GraphQL (`query UserCurrent\b` ),
415+ httpmock .StringResponse (`
416+ { "data": {
417+ "viewer": { "login": "MonaLisa" }
418+ } }
419+ ` ),
420+ )
421+
413422 var seenCmd * exec.Cmd
414423 //nolint:staticcheck // SA1019 TODO: rewrite to use run.Stub
415424 restoreCmd := run .SetPrepareCmd (func (cmd * exec.Cmd ) run.Runnable {
@@ -418,7 +427,7 @@ func TestIssueCreate_web(t *testing.T) {
418427 })
419428 defer restoreCmd ()
420429
421- output , err := runCommand (http , true , `--web` )
430+ output , err := runCommand (http , true , `--web -a @me ` )
422431 if err != nil {
423432 t .Errorf ("error running command `issue create`: %v" , err )
424433 }
@@ -427,7 +436,7 @@ func TestIssueCreate_web(t *testing.T) {
427436 t .Fatal ("expected a command to run" )
428437 }
429438 url := seenCmd .Args [len (seenCmd .Args )- 1 ]
430- assert .Equal (t , "https://github.com/OWNER/REPO/issues/new" , url )
439+ assert .Equal (t , "https://github.com/OWNER/REPO/issues/new?assignees=MonaLisa " , url )
431440 assert .Equal (t , "" , output .String ())
432441 assert .Equal (t , "Opening github.com/OWNER/REPO/issues/new in your browser.\n " , output .Stderr ())
433442}
@@ -457,3 +466,91 @@ func TestIssueCreate_webTitleBody(t *testing.T) {
457466 assert .Equal (t , "" , output .String ())
458467 assert .Equal (t , "Opening github.com/OWNER/REPO/issues/new in your browser.\n " , output .Stderr ())
459468}
469+
470+ func TestIssueCreate_webTitleBodyAtMeAssignee (t * testing.T ) {
471+ http := & httpmock.Registry {}
472+ defer http .Verify (t )
473+
474+ http .Register (
475+ httpmock .GraphQL (`query UserCurrent\b` ),
476+ httpmock .StringResponse (`
477+ { "data": {
478+ "viewer": { "login": "MonaLisa" }
479+ } }
480+ ` ),
481+ )
482+
483+ var seenCmd * exec.Cmd
484+ //nolint:staticcheck // SA1019 TODO: rewrite to use run.Stub
485+ restoreCmd := run .SetPrepareCmd (func (cmd * exec.Cmd ) run.Runnable {
486+ seenCmd = cmd
487+ return & test.OutputStub {}
488+ })
489+ defer restoreCmd ()
490+
491+ output , err := runCommand (http , true , `-w -t mytitle -b mybody -a @me` )
492+ if err != nil {
493+ t .Errorf ("error running command `issue create`: %v" , err )
494+ }
495+
496+ if seenCmd == nil {
497+ t .Fatal ("expected a command to run" )
498+ }
499+ url := strings .ReplaceAll (seenCmd .Args [len (seenCmd .Args )- 1 ], "^" , "" )
500+ assert .Equal (t , "https://github.com/OWNER/REPO/issues/new?assignees=MonaLisa&body=mybody&title=mytitle" , url )
501+ assert .Equal (t , "" , output .String ())
502+ assert .Equal (t , "Opening github.com/OWNER/REPO/issues/new in your browser.\n " , output .Stderr ())
503+ }
504+
505+ func TestIssueCreate_AtMeAssignee (t * testing.T ) {
506+ http := & httpmock.Registry {}
507+ defer http .Verify (t )
508+
509+ http .Register (
510+ httpmock .GraphQL (`query UserCurrent\b` ),
511+ httpmock .StringResponse (`
512+ { "data": {
513+ "viewer": { "login": "MonaLisa" }
514+ } }
515+ ` ),
516+ )
517+ http .Register (
518+ httpmock .GraphQL (`query RepositoryInfo\b` ),
519+ httpmock .StringResponse (`
520+ { "data": { "repository": {
521+ "id": "REPOID",
522+ "hasIssuesEnabled": true
523+ } } }
524+ ` ))
525+ http .Register (
526+ httpmock .GraphQL (`query RepositoryResolveMetadataIDs\b` ),
527+ httpmock .StringResponse (`
528+ { "data": {
529+ "u000": { "login": "MonaLisa", "id": "MONAID" },
530+ "u001": { "login": "SomeOneElse", "id": "SOMEID" },
531+ "repository": {
532+ "l000": { "name": "bug", "id": "BUGID" },
533+ "l001": { "name": "TODO", "id": "TODOID" }
534+ }
535+ } }
536+ ` ),
537+ )
538+ http .Register (
539+ httpmock .GraphQL (`mutation IssueCreate\b` ),
540+ httpmock .GraphQLMutation (`
541+ { "data": { "createIssue": { "issue": {
542+ "URL": "https://github.com/OWNER/REPO/issues/12"
543+ } } } }
544+ ` , func (inputs map [string ]interface {}) {
545+ assert .Equal (t , "hello" , inputs ["title" ])
546+ assert .Equal (t , "cash rules everything around me" , inputs ["body" ])
547+ assert .Equal (t , []interface {}{"MONAID" , "SOMEID" }, inputs ["assigneeIds" ])
548+ }))
549+
550+ output , err := runCommand (http , true , `-a @me -a someoneelse -t hello -b "cash rules everything around me"` )
551+ if err != nil {
552+ t .Errorf ("error running command `issue create`: %v" , err )
553+ }
554+
555+ assert .Equal (t , "https://github.com/OWNER/REPO/issues/12\n " , output .String ())
556+ }
0 commit comments