Skip to content

Commit 235852d

Browse files
committed
Merge pull request #307 from exercism/auth-single-exercise
Pass API key when fetching individual exercises
2 parents 2e70215 + 8a244fd commit 235852d

2 files changed

Lines changed: 23 additions & 16 deletions

File tree

api/api.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ func (c *Client) Fetch(args []string) ([]*Problem, error) {
5050
url = fmt.Sprintf("%s/v2/exercises/%s?key=%s", c.XAPIHost, args[0], c.APIKey)
5151
case 2:
5252
url = fmt.Sprintf("%s/v2/exercises/%s/%s", c.XAPIHost, args[0], args[1])
53+
if c.APIKey != "" {
54+
url = fmt.Sprintf("%s?key=%s", url, c.APIKey)
55+
}
5356
default:
5457
return nil, fmt.Errorf("Usage: exercism fetch\n or: exercism fetch TRACK_ID\n or: exercism fetch TRACK_ID PROBLEM")
5558
}

api/api_test.go

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -66,25 +66,29 @@ func TestFetchATrack(t *testing.T) {
6666
}
6767

6868
func TestFetchASpecificProblem(t *testing.T) {
69-
var (
70-
APIKey = "mykey"
71-
trackID = "go"
72-
slug = "leap"
73-
)
74-
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
75-
trackProblemsAPI := fmt.Sprintf("/v2/exercises/%s/%s", trackID, slug)
76-
assert.Equal(t, trackProblemsAPI, req.RequestURI)
69+
tests := []struct {
70+
key, url string
71+
}{
72+
{"", "/v2/exercises/go/leap"},
73+
{"mykey", "/v2/exercises/go/leap?key=mykey"},
74+
}
7775

78-
if err := respondWithFixture(w, "problems.json"); err != nil {
79-
t.Fatal(err)
80-
}
81-
}))
82-
defer ts.Close()
76+
for _, test := range tests {
8377

84-
client := NewClient(&config.Config{XAPI: ts.URL, APIKey: APIKey})
78+
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
79+
assert.Equal(t, test.url, req.RequestURI)
8580

86-
_, err := client.Fetch([]string{trackID, slug})
87-
assert.NoError(t, err)
81+
if err := respondWithFixture(w, "problems.json"); err != nil {
82+
t.Fatal(err)
83+
}
84+
}))
85+
defer ts.Close()
86+
87+
client := NewClient(&config.Config{XAPI: ts.URL, APIKey: test.key})
88+
89+
_, err := client.Fetch([]string{"go", "leap"})
90+
assert.NoError(t, err)
91+
}
8892
}
8993

9094
func TestSkipProblem(t *testing.T) {

0 commit comments

Comments
 (0)