Skip to content

Commit 08d56c1

Browse files
author
Jamario Rankins
committed
Error message returned if the track is locked
1 parent 2bfd6c8 commit 08d56c1

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

cmd/download.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package cmd
22

33
import (
4+
"bytes"
45
"encoding/json"
56
"errors"
67
"fmt"
78
"io"
9+
"io/ioutil"
810
"net/http"
911
netURL "net/url"
1012
"os"
@@ -185,12 +187,12 @@ func newDownload(flags *pflag.FlagSet, usrCfg *viper.Viper) (*download, error) {
185187
}
186188
defer res.Body.Close()
187189

188-
if err := json.NewDecoder(res.Body).Decode(&d.payload); err != nil {
190+
body, err := ioutil.ReadAll(res.Body)
191+
res.Body = ioutil.NopCloser(bytes.NewReader(body))
192+
193+
if err := json.Unmarshal(body, &d.payload); err != nil || res.StatusCode < 200 || res.StatusCode > 299 {
189194
return nil, decodedAPIError(res)
190195
}
191-
if d.payload.Error.Message != "" {
192-
return nil, errors.New(d.payload.Error.Message)
193-
}
194196

195197
return d, nil
196198
}

cmd/download_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,42 @@ func assertDownloadedCorrectFiles(t *testing.T, targetDir string) {
272272
assert.True(t, os.IsNotExist(err), "It should not write the file if empty.")
273273
}
274274

275+
func TestDownloadError(t *testing.T) {
276+
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
277+
w.WriteHeader(http.StatusBadRequest)
278+
fmt.Fprintf(w, `{"error": {"type": "error", "message": "test error"}}`)
279+
})
280+
281+
ts := httptest.NewServer(handler)
282+
defer ts.Close()
283+
284+
tmpDir, err := ioutil.TempDir("", "submit-err-tmp-dir")
285+
defer os.RemoveAll(tmpDir)
286+
assert.NoError(t, err)
287+
288+
v := viper.New()
289+
v.Set("token", "abc123")
290+
v.Set("workspace", tmpDir)
291+
v.Set("apibaseurl", ts.URL)
292+
293+
cfg := config.Config{
294+
Persister: config.InMemoryPersister{},
295+
UserViperConfig: v,
296+
DefaultBaseURL: "http://example.com",
297+
}
298+
299+
flags := pflag.NewFlagSet("fake", pflag.PanicOnError)
300+
setupDownloadFlags(flags)
301+
flags.Set("uuid", "value")
302+
303+
err = runDownload(cfg, flags, []string{})
304+
305+
fmt.Println(err)
306+
307+
assert.Regexp(t, "test error", err.Error())
308+
309+
}
310+
275311
const payloadTemplate = `
276312
{
277313
"solution": {

0 commit comments

Comments
 (0)