diff --git a/app/converter/converter.go b/app/converter/converter.go index 6ccb8b67..f67f0b01 100644 --- a/app/converter/converter.go +++ b/app/converter/converter.go @@ -19,6 +19,14 @@ type Converter struct { workingDir string } +type noFileToConvertError struct{} + +const noFileToConvertErrorMessage = "No file to convert" + +func (e *noFileToConvertError) Error() string { + return noFileToConvertErrorMessage +} + // NewConverter instantiates a converter by parsing a request. func NewConverter(r *http.Request) (*Converter, error) { c := &Converter{ @@ -53,6 +61,10 @@ func NewConverter(r *http.Request) (*Converter, error) { c.files = append(c.files, f) } + if len(c.files) == 0 { + return c, &noFileToConvertError{} + } + return c, nil } diff --git a/app/converter/converter_test.go b/app/converter/converter_test.go index 23e747da..3ee44214 100644 --- a/app/converter/converter_test.go +++ b/app/converter/converter_test.go @@ -21,13 +21,18 @@ func makeRequest(filesPaths ...string) *http.Request { var part io.Writer defer w.Close() - for _, filePath := range filesPaths { - file, _ := os.Open(filePath) - defer file.Close() + if len(filesPaths) == 0 { + part, _ = mpw.CreateFormField("foo") + part.Write([]byte("bar")) + } else { + for _, filePath := range filesPaths { + file, _ := os.Open(filePath) + defer file.Close() - fileInfo, _ := file.Stat() - part, _ = mpw.CreateFormFile("files", fileInfo.Name()) - io.Copy(part, file) + fileInfo, _ := file.Stat() + part, _ = mpw.CreateFormFile("files", fileInfo.Name()) + io.Copy(part, file) + } } mpw.Close() @@ -64,6 +69,11 @@ func TestNewConverter(t *testing.T) { if _, err := NewConverter(makeRequest(oPath, path)); err == nil { t.Error("Converter should not have been instantiated!") } + + // case 5: uses a request with no file. + if _, err := NewConverter(makeRequest()); err == nil { + t.Error("Converter should not have been instantiated!") + } } func TestConvert(t *testing.T) { @@ -115,3 +125,11 @@ func TestClear(t *testing.T) { t.Error("Converter should have been able to clear itself!") } } + +func TestNoFileToConvertError(t *testing.T) { + err := &noFileToConvertError{} + + if err.Error() != noFileToConvertErrorMessage { + t.Errorf("Error returned a wrong message: got %s want %s", err.Error(), noFileToConvertErrorMessage) + } +}