github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/pkg/cmd/repo/list/http_test.go (about) 1 package list 2 3 import ( 4 "encoding/json" 5 "io" 6 "net/http" 7 "os" 8 "testing" 9 10 "github.com/ungtb10d/cli/v2/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 := io.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: ®} 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, `sort:updated-desc fork:true language:go user:@me`, 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: "sort:updated-desc fork:true user:@me", 76 }, 77 { 78 name: "in org", 79 args: args{ 80 owner: "cli", 81 }, 82 want: "sort:updated-desc fork:true user:cli", 83 }, 84 { 85 name: "only public", 86 args: args{ 87 owner: "", 88 filter: FilterOptions{ 89 Visibility: "public", 90 }, 91 }, 92 want: "sort:updated-desc fork:true is:public user:@me", 93 }, 94 { 95 name: "only private", 96 args: args{ 97 owner: "", 98 filter: FilterOptions{ 99 Visibility: "private", 100 }, 101 }, 102 want: "sort:updated-desc fork:true is:private user:@me", 103 }, 104 { 105 name: "only forks", 106 args: args{ 107 owner: "", 108 filter: FilterOptions{ 109 Fork: true, 110 }, 111 }, 112 want: "sort:updated-desc fork:only user:@me", 113 }, 114 { 115 name: "no forks", 116 args: args{ 117 owner: "", 118 filter: FilterOptions{ 119 Source: true, 120 }, 121 }, 122 want: "sort:updated-desc fork:false user:@me", 123 }, 124 { 125 name: "with language", 126 args: args{ 127 owner: "", 128 filter: FilterOptions{ 129 Language: "ruby", 130 }, 131 }, 132 want: `sort:updated-desc fork:true language:ruby user:@me`, 133 }, 134 { 135 name: "only archived", 136 args: args{ 137 owner: "", 138 filter: FilterOptions{ 139 Archived: true, 140 }, 141 }, 142 want: "sort:updated-desc archived:true fork:true user:@me", 143 }, 144 { 145 name: "only non-archived", 146 args: args{ 147 owner: "", 148 filter: FilterOptions{ 149 NonArchived: true, 150 }, 151 }, 152 want: "sort:updated-desc archived:false fork:true user:@me", 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 }