Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion cmd/submit.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ var submitCmd = &cobra.Command{

Call the command with the list of files you want to submit.
`,
Args: cobra.MinimumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
cfg := config.NewConfig()

Expand All @@ -45,6 +44,14 @@ var submitCmd = &cobra.Command{
// Ignore error. If the file doesn't exist, that is fine.
_ = v.ReadInConfig()

if len(args) == 0 {
files, err := getExerciseSolutionFiles(".")
if err != nil {
return err
}
args = files
}

return runSubmit(cfg, cmd.Flags(), args)
},
}
Expand Down Expand Up @@ -114,6 +121,23 @@ func runSubmit(cfg config.Config, flags *pflag.FlagSet, args []string) error {
return nil
}

func getExerciseSolutionFiles(baseDir string) ([]string, error) {
v := viper.New()
v.AddConfigPath(filepath.Join(baseDir, ".exercism"))
Comment thread
ErikSchierboom marked this conversation as resolved.
v.SetConfigName("config")
v.SetConfigType("json")
err := v.ReadInConfig()
if err != nil {
return nil, errors.New("no files to submit")
}
solutionFiles := v.GetStringSlice("files.solution")
if len(solutionFiles) == 0 {
return nil, errors.New("no files to submit")
}
Comment thread
andrerfcsantos marked this conversation as resolved.

return solutionFiles, nil
}

type submitCmdContext struct {
usrCfg *viper.Viper
flags *pflag.FlagSet
Expand Down
39 changes: 39 additions & 0 deletions cmd/submit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,45 @@ func TestSubmitExerciseWithoutMetadataFile(t *testing.T) {
}
}

func TestGetExerciseSolutionFiles(t *testing.T) {

tmpDir, err := ioutil.TempDir("", "dir-with-no-metadata")
defer os.RemoveAll(tmpDir)
assert.NoError(t, err)

_, err = getExerciseSolutionFiles(tmpDir)
if assert.Error(t, err) {
assert.Regexp(t, "no files to submit", err.Error())
}

validTmpDir, err := ioutil.TempDir("", "dir-with-valid-metadata")
defer os.RemoveAll(validTmpDir)
assert.NoError(t, err)

metadataDir := filepath.Join(validTmpDir, ".exercism")
err = os.MkdirAll(metadataDir, os.FileMode(0755))
assert.NoError(t, err)

err = ioutil.WriteFile(
filepath.Join(metadataDir, "config.json"),
[]byte(`
{
"files": {
"solution": [
"expenses.go"
]
}
}
`), os.FileMode(0755))
assert.NoError(t, err)

files, err := getExerciseSolutionFiles(validTmpDir)
assert.NoError(t, err)
if assert.Equal(t, len(files), 1) {
assert.Equal(t, files[0], "expenses.go")
}
}

func TestSubmitFilesAndDir(t *testing.T) {
tmpDir, err := ioutil.TempDir("", "submit-no-such-file")
defer os.RemoveAll(tmpDir)
Expand Down