github.com/secman-team/gh-api@v1.8.2/pkg/cmd/repo/list/http_test.go (about)

     1  package list
     2  
     3  import (
     4  	"encoding/json"
     5  	"io/ioutil"
     6  	"net/http"
     7  	"os"
     8  	"testing"
     9  
    10  	"github.com/secman-team/gh-api/pkg/httpmock"
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  func Test_listReposWithLanguage(t *testing.T) {
    16  	reg := httpmock.Registry{}
    17  	defer reg.Verify(t)
    18  
    19  	var searchData struct {
    20  		Query     string
    21  		Variables map[string]interface{}
    22  	}
    23  	reg.Register(
    24  		httpmock.GraphQL(`query RepositoryListSearch\b`),
    25  		func(req *http.Request) (*http.Response, error) {
    26  			jsonData, err := ioutil.ReadAll(req.Body)
    27  			if err != nil {
    28  				return nil, err
    29  			}
    30  			err = json.Unmarshal(jsonData, &searchData)
    31  			if err != nil {
    32  				return nil, err
    33  			}
    34  
    35  			respBody, err := os.Open("./fixtures/repoSearch.json")
    36  			if err != nil {
    37  				return nil, err
    38  			}
    39  
    40  			return &http.Response{
    41  				StatusCode: 200,
    42  				Request:    req,
    43  				Body:       respBody,
    44  			}, nil
    45  		},
    46  	)
    47  
    48  	client := http.Client{Transport: &reg}
    49  	res, err := listRepos(&client, "github.com", 10, "", FilterOptions{
    50  		Language: "go",
    51  	})
    52  	require.NoError(t, err)
    53  
    54  	assert.Equal(t, 3, res.TotalCount)
    55  	assert.Equal(t, true, res.FromSearch)
    56  	assert.Equal(t, "octocat", res.Owner)
    57  	assert.Equal(t, "octocat/hello-world", res.Repositories[0].NameWithOwner)
    58  
    59  	assert.Equal(t, float64(10), searchData.Variables["perPage"])
    60  	assert.Equal(t, `user:@me language:go fork:true sort:updated-desc`, searchData.Variables["query"])
    61  }
    62  
    63  func Test_searchQuery(t *testing.T) {
    64  	type args struct {
    65  		owner  string
    66  		filter FilterOptions
    67  	}
    68  	tests := []struct {
    69  		name string
    70  		args args
    71  		want string
    72  	}{
    73  		{
    74  			name: "blank",
    75  			want: "user:@me fork:true sort:updated-desc",
    76  		},
    77  		{
    78  			name: "in org",
    79  			args: args{
    80  				owner: "cli",
    81  			},
    82  			want: "user:cli fork:true sort:updated-desc",
    83  		},
    84  		{
    85  			name: "only public",
    86  			args: args{
    87  				owner: "",
    88  				filter: FilterOptions{
    89  					Visibility: "public",
    90  				},
    91  			},
    92  			want: "user:@me is:public fork:true sort:updated-desc",
    93  		},
    94  		{
    95  			name: "only private",
    96  			args: args{
    97  				owner: "",
    98  				filter: FilterOptions{
    99  					Visibility: "private",
   100  				},
   101  			},
   102  			want: "user:@me is:private fork:true sort:updated-desc",
   103  		},
   104  		{
   105  			name: "only forks",
   106  			args: args{
   107  				owner: "",
   108  				filter: FilterOptions{
   109  					Fork: true,
   110  				},
   111  			},
   112  			want: "user:@me fork:only sort:updated-desc",
   113  		},
   114  		{
   115  			name: "no forks",
   116  			args: args{
   117  				owner: "",
   118  				filter: FilterOptions{
   119  					Source: true,
   120  				},
   121  			},
   122  			want: "user:@me fork:false sort:updated-desc",
   123  		},
   124  		{
   125  			name: "with language",
   126  			args: args{
   127  				owner: "",
   128  				filter: FilterOptions{
   129  					Language: "ruby",
   130  				},
   131  			},
   132  			want: `user:@me language:ruby fork:true sort:updated-desc`,
   133  		},
   134  		{
   135  			name: "only archived",
   136  			args: args{
   137  				owner: "",
   138  				filter: FilterOptions{
   139  					Archived: true,
   140  				},
   141  			},
   142  			want: "user:@me fork:true archived:true sort:updated-desc",
   143  		},
   144  		{
   145  			name: "only non-archived",
   146  			args: args{
   147  				owner: "",
   148  				filter: FilterOptions{
   149  					NonArchived: true,
   150  				},
   151  			},
   152  			want: "user:@me fork:true archived:false sort:updated-desc",
   153  		},
   154  	}
   155  	for _, tt := range tests {
   156  		t.Run(tt.name, func(t *testing.T) {
   157  			if got := searchQuery(tt.args.owner, tt.args.filter); got != tt.want {
   158  				t.Errorf("searchQuery() = %q, want %q", got, tt.want)
   159  			}
   160  		})
   161  	}
   162  }