Skip to content

Commit f68909b

Browse files
committed
use TempFile though the testing is gross
1 parent fffd315 commit f68909b

File tree

3 files changed

+50
-26
lines changed

3 files changed

+50
-26
lines changed

pkg/cmd/pr/shared/preserve.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"os"
77
"path/filepath"
8-
"time"
98

109
"github.com/cli/cli/pkg/iostreams"
1110
)
@@ -40,9 +39,17 @@ func PreserveInput(io *iostreams.IOStreams, state *IssueMetadataState, createErr
4039
return
4140
}
4241

43-
dp := dumpPath(time.Now().UnixNano())
42+
tmpfile, err := io.TempFile(os.TempDir(), "gh*.json")
43+
if err != nil {
44+
fmt.Fprintf(out, "failed to save input to file: %s\n", err)
45+
fmt.Fprintln(out, "would have saved:")
46+
fmt.Fprintf(out, "%v\n", state)
47+
return
48+
}
49+
50+
tmpfilePath := filepath.Join(os.TempDir(), tmpfile.Name())
4451

45-
err = io.WriteFile(dp, data)
52+
_, err = tmpfile.Write(data)
4653
if err != nil {
4754
fmt.Fprintf(out, "failed to save input to file: %s\n", err)
4855
fmt.Fprintln(out, "would have saved:")
@@ -57,8 +64,8 @@ func PreserveInput(io *iostreams.IOStreams, state *IssueMetadataState, createErr
5764
issueType = "issue"
5865
}
5966

60-
fmt.Fprintf(out, "%s operation failed. input saved to: %s\n", cs.FailureIcon(), dp)
61-
fmt.Fprintf(out, "resubmit with: gh %s create -j@%s\n", issueType, dp)
67+
fmt.Fprintf(out, "%s operation failed. input saved to: %s\n", cs.FailureIcon(), tmpfilePath)
68+
fmt.Fprintf(out, "resubmit with: gh %s create -j@%s\n", issueType, tmpfilePath)
6269

6370
// some whitespace before the actual error
6471
fmt.Fprintln(out)

pkg/cmd/pr/shared/preserve_test.go

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package shared
33
import (
44
"encoding/json"
55
"errors"
6+
"io/ioutil"
67
"os"
78
"path/filepath"
89
"testing"
@@ -12,12 +13,6 @@ import (
1213
"github.com/stretchr/testify/assert"
1314
)
1415

15-
func Test_dumpPath(t *testing.T) {
16-
// mostly pointless test
17-
var random int64 = 1234567890
18-
assert.Equal(t, dumpPath(random), filepath.Join(os.TempDir(), "gh602d2.json"))
19-
}
20-
2116
func Test_PreserveInput(t *testing.T) {
2217
tests := []struct {
2318
name string
@@ -50,8 +45,8 @@ func Test_PreserveInput(t *testing.T) {
5045
Labels: []string{"sandwich"},
5146
},
5247
wantErrLines: []string{
53-
`X operation failed. input saved to:.*\.json`,
54-
`resubmit with: gh issue create -j@.*\.json`,
48+
`X operation failed. input saved to:.*testfile.*`,
49+
`resubmit with: gh issue create -j@.*testfile.*`,
5550
},
5651
err: true,
5752
wantPreservation: true,
@@ -63,8 +58,8 @@ func Test_PreserveInput(t *testing.T) {
6358
Labels: []string{"sandwich"},
6459
},
6560
wantErrLines: []string{
66-
`X operation failed. input saved to:.*\.json`,
67-
`resubmit with: gh issue create -j@.*\.json`,
61+
`X operation failed. input saved to:.*testfile.*`,
62+
`resubmit with: gh issue create -j@.*testfile.*`,
6863
},
6964
err: true,
7065
wantPreservation: true,
@@ -77,8 +72,8 @@ func Test_PreserveInput(t *testing.T) {
7772
Type: PRMetadata,
7873
},
7974
wantErrLines: []string{
80-
`X operation failed. input saved to:.*\.json`,
81-
`resubmit with: gh pr create -j@.*\.json`,
75+
`X operation failed. input saved to:.*testfile.*`,
76+
`resubmit with: gh pr create -j@.*testfile.*`,
8277
},
8378
err: true,
8479
wantPreservation: true,
@@ -90,25 +85,47 @@ func Test_PreserveInput(t *testing.T) {
9085
if tt.state == nil {
9186
tt.state = &IssueMetadataState{}
9287
}
88+
9389
io, _, _, errOut := iostreams.Test()
94-
io.WriteOverride = []byte{}
90+
91+
tfPath, tf, tferr := tmpfile()
92+
assert.NoError(t, tferr)
93+
defer os.Remove(tfPath)
94+
95+
io.TempFileOverride = tf
96+
9597
var err error
9698
if tt.err {
9799
err = errors.New("error during creation")
98100
}
99101

100102
PreserveInput(io, tt.state, &err)()
101103

104+
tf.Seek(0, 0)
105+
106+
data, err := ioutil.ReadAll(tf)
107+
assert.NoError(t, err)
108+
102109
if tt.wantPreservation {
103110
test.ExpectLines(t, errOut.String(), tt.wantErrLines...)
104111
preserved := &IssueMetadataState{}
105-
assert.NoError(t, json.Unmarshal(io.WriteOverride, preserved))
112+
assert.NoError(t, json.Unmarshal(data, preserved))
106113
preserved.dirty = tt.state.dirty
107114
assert.Equal(t, preserved, tt.state)
108115
} else {
109116
assert.Equal(t, errOut.String(), "")
110-
assert.Equal(t, string(io.WriteOverride), "")
117+
assert.Equal(t, string(data), "")
111118
}
112119
})
113120
}
114121
}
122+
123+
func tmpfile() (string, *os.File, error) {
124+
dir := os.TempDir()
125+
tmpfile, err := ioutil.TempFile(dir, "testfile*")
126+
if err != nil {
127+
return "", nil, err
128+
}
129+
130+
return filepath.Join(dir, tmpfile.Name()), tmpfile, nil
131+
}

pkg/iostreams/iostreams.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ type IOStreams struct {
4646

4747
neverPrompt bool
4848

49-
WriteOverride []byte
49+
TempFileOverride *os.File
5050
}
5151

5252
func (s *IOStreams) ColorEnabled() bool {
@@ -270,12 +270,12 @@ func (s *IOStreams) ReadUserFile(fn string) ([]byte, error) {
270270
return ioutil.ReadAll(r)
271271
}
272272

273-
func (s *IOStreams) WriteFile(fn string, data []byte) error {
274-
if s.WriteOverride != nil {
275-
s.WriteOverride = data
276-
return nil
273+
func (s *IOStreams) TempFile(dir, pattern string) (*os.File, error) {
274+
if s.TempFileOverride != nil {
275+
fmt.Printf("DBG %#v\n", s.TempFileOverride)
276+
return s.TempFileOverride, nil
277277
}
278-
return ioutil.WriteFile(fn, data, 0660)
278+
return ioutil.TempFile(dir, pattern)
279279
}
280280

281281
func System() *IOStreams {

0 commit comments

Comments
 (0)