@@ -3,13 +3,15 @@ package main
33import (
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
1517func 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+
2186func 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}
0 commit comments