Skip to content
This repository was archived by the owner on Jan 16, 2021. It is now read-only.

Commit 6862655

Browse files
author
Pavan Kumar
committed
[cli-tests] add more tests to improve code coverage
1 parent 9477282 commit 6862655

File tree

4 files changed

+129
-4
lines changed

4 files changed

+129
-4
lines changed

new.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Directory Name: `,
7878
)
7979
}
8080

81-
fmt.Scanf("%s\n", &cloudCodeDir)
81+
fmt.Fscanf(e.In, "%s\n", &cloudCodeDir)
8282
cloudCodeDir = strings.TrimSpace(cloudCodeDir)
8383
if cloudCodeDir == "" {
8484
cloudCodeDir = appName

new_cmd_test.go

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ package main
33
import (
44
"fmt"
55
"io/ioutil"
6+
"net/http"
67
"os"
78
"path/filepath"
89
"regexp"
910
"strings"
1011
"testing"
1112

1213
"github.com/facebookgo/ensure"
14+
"github.com/facebookgo/parse"
1315
)
1416

1517
func newNewCmdHarness(t testing.TB) (*Harness, *newCmd) {
@@ -18,6 +20,69 @@ func newNewCmdHarness(t testing.TB) (*Harness, *newCmd) {
1820
return h, &newCmd{}
1921
}
2022

23+
func TestCloudCodeHelpMessage(t *testing.T) {
24+
t.Parallel()
25+
h := newHarness(t)
26+
defer h.Stop()
27+
28+
n := &newCmd{}
29+
msg := n.cloudCodeHelpMessage(h.env, &app{ApplicationID: "a", MasterKey: "m"})
30+
ensure.StringContains(t,
31+
msg,
32+
fmt.Sprintf(
33+
`Your Cloud Code has been created at %s.
34+
Next, you might want to deploy this code with "parse deploy".
35+
This includes a "Hello world" cloud function, so once you deploy
36+
you can test that it works, with:`,
37+
h.env.Root,
38+
),
39+
)
40+
}
41+
42+
func TestGetCloudCodeDir(t *testing.T) {
43+
t.Parallel()
44+
h := newHarness(t)
45+
h.makeEmptyRoot()
46+
defer h.Stop()
47+
48+
n := &newCmd{}
49+
h.env.In = ioutil.NopCloser(strings.NewReader("\n"))
50+
name, err := n.getCloudCodeDir(h.env, "myapp", true)
51+
ensure.Nil(t, err)
52+
ensure.StringContains(t, h.Out.String(), "Now it's time to set up some Cloud Code")
53+
ensure.DeepEqual(t, name, "myapp")
54+
55+
h.Out.Reset()
56+
h.env.In = ioutil.NopCloser(strings.NewReader("otherApp\n"))
57+
name, err = n.getCloudCodeDir(h.env, "myapp", true)
58+
ensure.Nil(t, err)
59+
ensure.StringContains(t, h.Out.String(), "Now it's time to set up some Cloud Code")
60+
ensure.DeepEqual(t, name, "otherApp")
61+
62+
_, err = os.Create(filepath.Join(h.env.Root, "otherApp"))
63+
ensure.Nil(t, err)
64+
h.Out.Reset()
65+
h.env.In = ioutil.NopCloser(strings.NewReader("otherApp\n"))
66+
name, err = n.getCloudCodeDir(h.env, "myapp", true)
67+
ensure.Err(t, err, regexp.MustCompile("already exists"))
68+
ensure.StringContains(t, h.Out.String(), "Now it's time to set up some Cloud Code")
69+
70+
ensure.Nil(t, os.MkdirAll(filepath.Join(h.env.Root, "myapp", "config"), 0755))
71+
_, err = os.Create(filepath.Join(h.env.Root, "myapp", "config", "global.json"))
72+
ensure.Nil(t, err)
73+
h.Out.Reset()
74+
h.env.In = ioutil.NopCloser(strings.NewReader("\n"))
75+
name, err = n.getCloudCodeDir(h.env, "myapp", true)
76+
ensure.Err(t, err, regexp.MustCompile("you already have Cloud Code"))
77+
ensure.Nil(t, os.Remove(filepath.Join(h.env.Root, "myapp", "config", "global.json")))
78+
79+
h.Out.Reset()
80+
h.env.In = ioutil.NopCloser(strings.NewReader("\n"))
81+
name, err = n.getCloudCodeDir(h.env, "myapp", false)
82+
ensure.Nil(t, err)
83+
ensure.StringContains(t, h.Out.String(), "folder where we can download the latest")
84+
}
85+
2186
func TestNewCmdDirs(t *testing.T) {
2287
t.Parallel()
2388

@@ -104,4 +169,50 @@ func TestShouldCreateNewApp(t *testing.T) {
104169
h.env.In = ioutil.NopCloser(strings.NewReader("other"))
105170
_, err = n.promptCreateNewApp(h.env, false)
106171
ensure.Err(t, err, regexp.MustCompile("are the only valid options"))
172+
173+
decision, err = n.promptCreateNewApp(h.env, true)
174+
ensure.Nil(t, err)
175+
ensure.DeepEqual(t, decision, "existing")
176+
177+
n.createNewApp = true
178+
decision, err = n.promptCreateNewApp(h.env, true)
179+
ensure.Nil(t, err)
180+
ensure.DeepEqual(t, decision, "new")
181+
}
182+
183+
func TestSetupAndConfigure(t *testing.T) {
184+
t.Parallel()
185+
h := newHarness(t)
186+
h.makeEmptyRoot()
187+
defer h.Stop()
188+
189+
n := &newCmd{}
190+
h.env.Type = parseFormat
191+
h.env.In = ioutil.NopCloser(strings.NewReader("\n"))
192+
code, err := n.setupSample(h.env, "myapp", &parseAppConfig{ApplicationID: "a"}, true, false)
193+
ensure.Nil(t, err)
194+
ensure.True(t, code)
195+
196+
ht := transportFunc(func(r *http.Request) (*http.Response, error) {
197+
ensure.DeepEqual(t, r.URL.Path, "/1/jsVersions")
198+
rows := jsSDKVersion{JS: []string{"1.5.0", "1.6.0"}}
199+
return &http.Response{
200+
StatusCode: http.StatusOK,
201+
Body: ioutil.NopCloser(strings.NewReader(jsonStr(t, rows))),
202+
}, nil
203+
})
204+
h.env.ParseAPIClient = &ParseAPIClient{apiClient: &parse.Client{Transport: ht}}
205+
err = n.configureSample(
206+
&addCmd{MakeDefault: true},
207+
"yolo",
208+
&parseAppConfig{ApplicationID: "a", masterKey: "m"},
209+
nil,
210+
h.env,
211+
)
212+
ensure.Nil(t, err)
213+
214+
d := &defaultCmd{}
215+
h.Out.Reset()
216+
ensure.Nil(t, d.run(h.env, nil))
217+
ensure.DeepEqual(t, h.Out.String(), "Current default app is yolo\n")
107218
}

update_cmd.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,16 @@ func (u *updateCmd) latestVersion(e *env) (string, error) {
4141
return res.Version, nil
4242
}
4343

44-
func (u *updateCmd) updateCLI(e *env) (bool, error) {
44+
func (u *updateCmd) getDownloadURL(e *env) (string, error) {
4545
ostype := runtime.GOOS
4646
arch := runtime.GOARCH
4747

4848
latestVersion, err := u.latestVersion(e)
4949
if err != nil {
50-
return false, err
50+
return "", err
5151
}
5252
if latestVersion == "" || latestVersion == version {
53-
return false, nil
53+
return "", nil
5454
}
5555

5656
var downloadURL string
@@ -66,7 +66,17 @@ func (u *updateCmd) updateCLI(e *env) (bool, error) {
6666
downloadURL = fmt.Sprintf(downloadURLFormat, latestVersion, linuxDownload)
6767
}
6868
}
69+
return downloadURL, nil
70+
}
6971

72+
func (u *updateCmd) updateCLI(e *env) (bool, error) {
73+
downloadURL, err := u.getDownloadURL(e)
74+
if err != nil {
75+
return false, err
76+
}
77+
if downloadURL == "" {
78+
return false, nil
79+
}
7080
exec, err := osext.Executable()
7181
if err != nil {
7282
return false, stackerr.Wrap(err)

update_cmd_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,8 @@ func TestLatestVersion(t *testing.T) {
3333
latestVersion, err := u.latestVersion(h.env)
3434
ensure.Nil(t, err)
3535
ensure.DeepEqual(t, latestVersion, "2.0.2")
36+
37+
downloadURL, err := u.getDownloadURL(h.env)
38+
ensure.StringContains(t,
39+
downloadURL, "https://github.com/ParsePlatform/parse-cli/releases/download/release_2.0.2")
3640
}

0 commit comments

Comments
 (0)