| package hooks |
| |
| import ( |
| "testing" |
| |
| "github.com/spf13/cobra" |
| "gotest.tools/v3/assert" |
| ) |
| |
| func TestParseTemplate(t *testing.T) { |
| type testFlag struct { |
| name string |
| value string |
| } |
| testCases := []struct { |
| template string |
| flags []testFlag |
| args []string |
| expectedOutput []string |
| }{ |
| { |
| template: "", |
| expectedOutput: []string{""}, |
| }, |
| { |
| template: "a plain template message", |
| expectedOutput: []string{"a plain template message"}, |
| }, |
| { |
| template: TemplateReplaceFlagValue("tag"), |
| flags: []testFlag{ |
| { |
| name: "tag", |
| value: "my-tag", |
| }, |
| }, |
| expectedOutput: []string{"my-tag"}, |
| }, |
| { |
| template: TemplateReplaceFlagValue("test-one") + " " + TemplateReplaceFlagValue("test2"), |
| flags: []testFlag{ |
| { |
| name: "test-one", |
| value: "value", |
| }, |
| { |
| name: "test2", |
| value: "value2", |
| }, |
| }, |
| expectedOutput: []string{"value value2"}, |
| }, |
| { |
| template: TemplateReplaceArg(0) + " " + TemplateReplaceArg(1), |
| args: []string{"zero", "one"}, |
| expectedOutput: []string{"zero one"}, |
| }, |
| { |
| template: "You just pulled " + TemplateReplaceArg(0), |
| args: []string{"alpine"}, |
| expectedOutput: []string{"You just pulled alpine"}, |
| }, |
| { |
| template: "one line\nanother line!", |
| expectedOutput: []string{"one line", "another line!"}, |
| }, |
| } |
| |
| for _, tc := range testCases { |
| testCmd := &cobra.Command{ |
| Use: "pull", |
| Args: cobra.ExactArgs(len(tc.args)), |
| } |
| for _, f := range tc.flags { |
| _ = testCmd.Flags().String(f.name, "", "") |
| err := testCmd.Flag(f.name).Value.Set(f.value) |
| assert.NilError(t, err) |
| } |
| err := testCmd.Flags().Parse(tc.args) |
| assert.NilError(t, err) |
| |
| out, err := ParseTemplate(tc.template, testCmd) |
| assert.NilError(t, err) |
| assert.DeepEqual(t, out, tc.expectedOutput) |
| } |
| } |