|
1 | 1 | package cmdtest |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "bytes" |
4 | 5 | "context" |
5 | 6 | "errors" |
6 | 7 | "flag" |
7 | 8 | "io" |
| 9 | + "os" |
| 10 | + "os/exec" |
| 11 | + "path/filepath" |
8 | 12 | "strings" |
9 | 13 | "testing" |
| 14 | + |
| 15 | + rootcmd "github.com/rudrankriyam/App-Store-Connect-CLI/cmd" |
10 | 16 | ) |
11 | 17 |
|
12 | 18 | func TestXcodeCommandExists(t *testing.T) { |
@@ -130,6 +136,65 @@ func TestXcodeExportHelpMentionsDirectUploadMode(t *testing.T) { |
130 | 136 | } |
131 | 137 | } |
132 | 138 |
|
| 139 | +func TestXcodeInjectInvalidFlagValuesExitUsage(t *testing.T) { |
| 140 | + bin := buildCLIBinary(t) |
| 141 | + dir := t.TempDir() |
| 142 | + manifestPath := filepath.Join(dir, "deployment.json") |
| 143 | + if err := os.WriteFile(manifestPath, []byte(`{ |
| 144 | + "outputs": [ |
| 145 | + {"type": "text", "path": "Generated.xcconfig", "contents": "VERSION = ${version}\n"} |
| 146 | + ] |
| 147 | + }`), 0o644); err != nil { |
| 148 | + t.Fatalf("WriteFile() manifest error: %v", err) |
| 149 | + } |
| 150 | + |
| 151 | + tests := []struct { |
| 152 | + name string |
| 153 | + args []string |
| 154 | + wantStderr string |
| 155 | + }{ |
| 156 | + { |
| 157 | + name: "malformed set", |
| 158 | + args: []string{"xcode", "inject", "--manifest", manifestPath, "--set", "version"}, |
| 159 | + wantStderr: "--set values must use key=value", |
| 160 | + }, |
| 161 | + { |
| 162 | + name: "invalid dry-run boolean", |
| 163 | + args: []string{"xcode", "inject", "--manifest", manifestPath, "--dry-run=maybe"}, |
| 164 | + wantStderr: `invalid boolean value "maybe" for -dry-run`, |
| 165 | + }, |
| 166 | + { |
| 167 | + name: "invalid overwrite boolean", |
| 168 | + args: []string{"xcode", "inject", "--manifest", manifestPath, "--overwrite=inject"}, |
| 169 | + wantStderr: `invalid boolean value "inject" for -overwrite`, |
| 170 | + }, |
| 171 | + } |
| 172 | + |
| 173 | + for _, test := range tests { |
| 174 | + t.Run(test.name, func(t *testing.T) { |
| 175 | + cmd := exec.Command(bin, test.args...) |
| 176 | + var stdout, stderr bytes.Buffer |
| 177 | + cmd.Stdout = &stdout |
| 178 | + cmd.Stderr = &stderr |
| 179 | + |
| 180 | + err := cmd.Run() |
| 181 | + var exitErr *exec.ExitError |
| 182 | + if !errors.As(err, &exitErr) { |
| 183 | + t.Fatalf("expected exit error, got %v", err) |
| 184 | + } |
| 185 | + if code := exitErr.ExitCode(); code != rootcmd.ExitUsage { |
| 186 | + t.Fatalf("exit code = %d, want %d", code, rootcmd.ExitUsage) |
| 187 | + } |
| 188 | + if stdout.String() != "" { |
| 189 | + t.Fatalf("expected empty stdout, got %q", stdout.String()) |
| 190 | + } |
| 191 | + if !strings.Contains(stderr.String(), test.wantStderr) { |
| 192 | + t.Fatalf("expected stderr to contain %q, got %q", test.wantStderr, stderr.String()) |
| 193 | + } |
| 194 | + }) |
| 195 | + } |
| 196 | +} |
| 197 | + |
133 | 198 | func TestXcodeValidateHelpMentionsAltool(t *testing.T) { |
134 | 199 | root := RootCommand("1.2.3") |
135 | 200 |
|
|
0 commit comments