github.com/goreleaser/goreleaser@v1.25.1/internal/pipe/linkedin/client_test.go (about)

     1  package linkedin
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"net/http"
     7  	"net/http/httptest"
     8  	"testing"
     9  
    10  	"github.com/goreleaser/goreleaser/internal/testctx"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestCreateLinkedInClient(t *testing.T) {
    15  	tests := []struct {
    16  		name    string
    17  		cfg     oauthClientConfig
    18  		wantErr error
    19  	}{
    20  		{
    21  			"non-empty context and access token",
    22  			oauthClientConfig{
    23  				Context:     testctx.New(),
    24  				AccessToken: "foo",
    25  			},
    26  			nil,
    27  		},
    28  		{
    29  			"empty context",
    30  			oauthClientConfig{
    31  				Context:     nil,
    32  				AccessToken: "foo",
    33  			},
    34  			fmt.Errorf("context is nil"),
    35  		},
    36  		{
    37  			"empty access token",
    38  			oauthClientConfig{
    39  				Context:     testctx.New(),
    40  				AccessToken: "",
    41  			},
    42  			fmt.Errorf("empty access token"),
    43  		},
    44  	}
    45  	for _, tt := range tests {
    46  		t.Run(tt.name, func(t *testing.T) {
    47  			_, err := createLinkedInClient(tt.cfg)
    48  			if tt.wantErr != nil {
    49  				require.EqualError(t, err, tt.wantErr.Error())
    50  			} else {
    51  				require.NoError(t, err)
    52  			}
    53  		})
    54  	}
    55  }
    56  
    57  func TestClient_Share(t *testing.T) {
    58  	server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, _ *http.Request) {
    59  		_, _ = io.WriteString(rw, `
    60  {
    61  	"sub": "foo",
    62  	"activity": "123456789"
    63  }
    64  `)
    65  	}))
    66  	defer server.Close()
    67  
    68  	c, err := createLinkedInClient(oauthClientConfig{
    69  		Context:     testctx.New(),
    70  		AccessToken: "foo",
    71  	})
    72  	if err != nil {
    73  		t.Fatalf("could not create client: %v", err)
    74  	}
    75  
    76  	c.baseURL = server.URL
    77  
    78  	link, err := c.Share("test")
    79  	if err != nil {
    80  		t.Fatalf("could not share: %v", err)
    81  	}
    82  
    83  	wantLink := "https://www.linkedin.com/feed/update/123456789"
    84  	require.Equal(t, wantLink, link)
    85  }
    86  
    87  func TestClientLegacyProfile_Share(t *testing.T) {
    88  	server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
    89  		if req.URL.Path == "/v2/userinfo" {
    90  			rw.WriteHeader(http.StatusForbidden)
    91  			return
    92  		}
    93  		// this is the response from /v2/me (legacy as a fallback)
    94  		_, _ = io.WriteString(rw, `
    95  		{
    96  			"id": "foo",
    97  			"activity": "123456789"
    98  		}
    99  		`)
   100  	}))
   101  	defer server.Close()
   102  
   103  	c, err := createLinkedInClient(oauthClientConfig{
   104  		Context:     testctx.New(),
   105  		AccessToken: "foo",
   106  	})
   107  	if err != nil {
   108  		t.Fatalf("could not create client: %v", err)
   109  	}
   110  
   111  	c.baseURL = server.URL
   112  
   113  	link, err := c.Share("test")
   114  	if err != nil {
   115  		t.Fatalf("could not share: %v", err)
   116  	}
   117  
   118  	wantLink := "https://www.linkedin.com/feed/update/123456789"
   119  	require.Equal(t, wantLink, link)
   120  }