github.com/go-playground/webhooks/v6@v6.3.0/docker/docker_test.go (about) 1 package docker 2 3 import ( 4 "log" 5 "net/http" 6 "net/http/httptest" 7 "os" 8 "testing" 9 10 "reflect" 11 12 "github.com/stretchr/testify/require" 13 ) 14 15 // NOTES: 16 // - Run "go test" to run tests 17 // - Run "gocov test | gocov report" to report on test converage by file 18 // - Run "gocov test | gocov annotate -" to report on all code and functions, those ,marked with "MISS" were never called 19 // 20 // or 21 // 22 // -- may be a good idea to change to output path to somewherelike /tmp 23 // go test -coverprofile cover.out && go tool cover -html=cover.out -o cover.html 24 // 25 26 const ( 27 path = "/webhooks" 28 ) 29 30 var hook *Webhook 31 32 func TestMain(m *testing.M) { 33 34 // setup 35 var err error 36 hook, err = New() 37 if err != nil { 38 log.Fatal(err) 39 } 40 os.Exit(m.Run()) 41 // teardown 42 } 43 44 func newServer(handler http.HandlerFunc) *httptest.Server { 45 mux := http.NewServeMux() 46 mux.HandleFunc(path, handler) 47 return httptest.NewServer(mux) 48 } 49 50 func TestWebhooks(t *testing.T) { 51 assert := require.New(t) 52 tests := []struct { 53 name string 54 event Event 55 typ interface{} 56 filename string 57 headers http.Header 58 }{ 59 { 60 name: "BuildEvent", 61 event: BuildEvent, 62 typ: BuildPayload{}, 63 filename: "../testdata/docker/docker_hub_build_notice.json", 64 }, 65 } 66 67 for _, tt := range tests { 68 tc := tt 69 client := &http.Client{} 70 t.Run(tt.name, func(t *testing.T) { 71 t.Parallel() 72 payload, err := os.Open(tc.filename) 73 assert.NoError(err) 74 defer func() { 75 _ = payload.Close() 76 }() 77 78 var parseError error 79 var results interface{} 80 server := newServer(func(w http.ResponseWriter, r *http.Request) { 81 results, parseError = hook.Parse(r, tc.event) 82 }) 83 defer server.Close() 84 req, err := http.NewRequest(http.MethodPost, server.URL+path, payload) 85 assert.NoError(err) 86 req.Header.Set("Content-Type", "application/json") 87 88 resp, err := client.Do(req) 89 assert.NoError(err) 90 assert.Equal(http.StatusOK, resp.StatusCode) 91 assert.NoError(parseError) 92 assert.Equal(reflect.TypeOf(tc.typ), reflect.TypeOf(results)) 93 }) 94 } 95 }