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  }