11package cogito_test
22
33import (
4+ "encoding/json"
5+ "fmt"
46 "net/http"
57 "net/http/httptest"
68 "net/url"
@@ -28,7 +30,7 @@ func TestSinkGitHubCommitStatusSendSuccess(t *testing.T) {
2830 Log : testhelp .MakeTestLog (),
2931 GitRef : wantGitRef ,
3032 Request : cogito.PutRequest {
31- Source : cogito.Source {GhHostname : gitHubSpyURL .Host },
33+ Source : cogito.Source {GhHostname : gitHubSpyURL .Host , AccessToken : "dummy-token" },
3234 Params : cogito.PutParams {State : wantState },
3335 Env : cogito.Environment {BuildJobName : jobName },
3436 },
@@ -43,6 +45,62 @@ func TestSinkGitHubCommitStatusSendSuccess(t *testing.T) {
4345 assert .Equal (t , ghReq .Context , wantContext )
4446}
4547
48+ func TestSinkGitHubCommitStatusSendGhAppSuccess (t * testing.T ) {
49+ wantGitRef := "deadbeefdeadbeef"
50+ wantState := cogito .StatePending
51+ jobName := "the-job"
52+ wantContext := jobName
53+ var ghReq github.AddRequest
54+
55+ handler := func (w http.ResponseWriter , r * http.Request ) {
56+ if r .URL .String () == "/repos/statuses/deadbeefdeadbeef" {
57+ dec := json .NewDecoder (r .Body )
58+ if err := dec .Decode (& ghReq ); err != nil {
59+ w .WriteHeader (http .StatusTeapot )
60+ fmt .Fprintln (w , "test: decoding request:" , err )
61+ return
62+ }
63+ }
64+
65+ w .WriteHeader (http .StatusCreated )
66+ if r .URL .String () == "/app/installations/12345/access_tokens" {
67+ fmt .Fprintln (w , `{"token": "dummy_installation_token"}` )
68+ return
69+ }
70+ }
71+ ts := httptest .NewServer (http .HandlerFunc (handler ))
72+ defer ts .Close ()
73+
74+ gitHubSpyURL , err := url .Parse (ts .URL )
75+ assert .NilError (t , err , "error parsing SpyHttpServer URL: %s" , err )
76+
77+ privateKey , err := testhelp .GeneratePrivateKey (t , 2048 )
78+ assert .NilError (t , err )
79+
80+ sink := cogito.GitHubCommitStatusSink {
81+ Log : testhelp .MakeTestLog (),
82+ GitRef : wantGitRef ,
83+ Request : cogito.PutRequest {
84+ Source : cogito.Source {
85+ GhHostname : gitHubSpyURL .Host ,
86+ GitHubApp : github.GitHubApp {
87+ ClientId : "client-id" ,
88+ InstallationId : 12345 ,
89+ PrivateKey : string (testhelp .EncodePrivateKeyToPEM (privateKey )),
90+ },
91+ },
92+ Params : cogito.PutParams {State : wantState },
93+ Env : cogito.Environment {BuildJobName : jobName },
94+ },
95+ }
96+
97+ err = sink .Send ()
98+
99+ assert .NilError (t , err )
100+ assert .Equal (t , ghReq .State , string (wantState ))
101+ assert .Equal (t , ghReq .Context , wantContext )
102+ }
103+
46104func TestSinkGitHubCommitStatusSendFailure (t * testing.T ) {
47105 ts := httptest .NewServer (
48106 http .HandlerFunc (func (w http.ResponseWriter , req * http.Request ) {
@@ -55,7 +113,7 @@ func TestSinkGitHubCommitStatusSendFailure(t *testing.T) {
55113 Log : testhelp .MakeTestLog (),
56114 GitRef : "deadbeefdeadbeef" ,
57115 Request : cogito.PutRequest {
58- Source : cogito.Source {GhHostname : gitHubSpyURL .Host },
116+ Source : cogito.Source {GhHostname : gitHubSpyURL .Host , AccessToken : "dummy-token" },
59117 Params : cogito.PutParams {State : cogito .StatePending },
60118 },
61119 }
0 commit comments