Skip to content

Commit 3353734

Browse files
committed
Submit handles non 2xx responses
Previously, 404s silently continue to misleading success output
1 parent 1d02944 commit 3353734

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

cmd/submit.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,10 @@ func (s *submitCmdContext) submit(metadata *workspace.ExerciseMetadata, docs []w
272272
return decodedAPIError(resp)
273273
}
274274

275+
if resp.StatusCode < 200 || resp.StatusCode > 299 {
276+
return fmt.Errorf("submission unsuccessful (%s)", resp.Status)
277+
}
278+
275279
bb := &bytes.Buffer{}
276280
_, err = bb.ReadFrom(resp.Body)
277281
if err != nil {

cmd/submit_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,45 @@ func TestSubmitServerErr(t *testing.T) {
611611
assert.Regexp(t, "test error", err.Error())
612612
}
613613

614+
func TestHandle404Response(t *testing.T) {
615+
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
616+
w.WriteHeader(404)
617+
})
618+
619+
ts := httptest.NewServer(handler)
620+
defer ts.Close()
621+
622+
tmpDir, err := ioutil.TempDir("", "submit-nonsuccess")
623+
defer os.RemoveAll(tmpDir)
624+
assert.NoError(t, err)
625+
626+
v := viper.New()
627+
v.Set("token", "abc123")
628+
v.Set("workspace", tmpDir)
629+
v.Set("apibaseurl", ts.URL)
630+
631+
cfg := config.Config{
632+
Persister: config.InMemoryPersister{},
633+
UserViperConfig: v,
634+
DefaultBaseURL: "http://example.com",
635+
}
636+
637+
dir := filepath.Join(tmpDir, "bogus-track", "bogus-exercise")
638+
os.MkdirAll(filepath.Join(dir, "subdir"), os.FileMode(0755))
639+
writeFakeMetadata(t, dir, "bogus-track", "bogus-exercise")
640+
641+
err = ioutil.WriteFile(filepath.Join(dir, "file-1.txt"), []byte("This is file 1"), os.FileMode(0755))
642+
assert.NoError(t, err)
643+
644+
files := []string{
645+
filepath.Join(dir, "file-1.txt"),
646+
}
647+
648+
err = runSubmit(cfg, pflag.NewFlagSet("fake", pflag.PanicOnError), files)
649+
if assert.Error(t, err) {
650+
assert.Contains(t, err.Error(), "unsuccessful")
651+
}
652+
}
614653
func TestSubmissionNotConnectedToRequesterAccount(t *testing.T) {
615654
submittedFiles := map[string]string{}
616655
ts := fakeSubmitServer(t, submittedFiles)

0 commit comments

Comments
 (0)