github.com/naoina/kocha@v0.7.1-0.20171129072645-78c7a531f799/cmd/kocha-generate/kocha-generate-controller/main_test.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "reflect" 9 "testing" 10 ) 11 12 func Test_generateControllerCommand_Run_withNoNAMEGiven(t *testing.T) { 13 c := &generateControllerCommand{} 14 args := []string{} 15 err := c.Run(args) 16 var actual interface{} = err 17 var expect interface{} = fmt.Errorf("no NAME given") 18 if !reflect.DeepEqual(actual, expect) { 19 t.Errorf(`generate(%#v) => %#v; want %#v`, args, actual, expect) 20 } 21 } 22 23 func Test_generateControllerCommand_Run(t *testing.T) { 24 tempdir, err := ioutil.TempDir("", "Test_controllerGeneratorGenerate") 25 if err != nil { 26 t.Fatal(err) 27 } 28 defer os.RemoveAll(tempdir) 29 os.Chdir(tempdir) 30 controllerPath := filepath.Join("app", "controller") 31 if err := os.MkdirAll(controllerPath, 0755); err != nil { 32 t.Fatal(err) 33 } 34 viewPath := filepath.Join("app", "view") 35 if err := os.MkdirAll(viewPath, 0755); err != nil { 36 t.Fatal(err) 37 } 38 configPath := filepath.Join("config") 39 if err := os.MkdirAll(configPath, 0755); err != nil { 40 t.Fatal(err) 41 } 42 routeFileContent := `package config 43 import ( 44 "../app/controller" 45 "github/naoina/kocha" 46 ) 47 type RouteTable kocha.RouteTable 48 var routes = RouteTable{ 49 { 50 Name: "root", 51 Path: "/", 52 Controller: &controller.Root{}, 53 }, 54 } 55 func Routes() RouteTable { 56 return append(routes, RouteTable{}...) 57 } 58 ` 59 if err := ioutil.WriteFile(filepath.Join(configPath, "routes.go"), []byte(routeFileContent), 0644); err != nil { 60 t.Fatal(err) 61 } 62 f, err := os.OpenFile(os.DevNull, os.O_WRONLY, os.ModePerm) 63 if err != nil { 64 t.Fatal(err) 65 } 66 defer f.Close() 67 oldStdout, oldStderr := os.Stdout, os.Stderr 68 os.Stdout, os.Stderr = f, f 69 defer func() { 70 os.Stdout, os.Stderr = oldStdout, oldStderr 71 }() 72 c := &generateControllerCommand{} 73 args := []string{"app_controller"} 74 err = c.Run(args) 75 var actual interface{} = err 76 var expect interface{} = nil 77 if !reflect.DeepEqual(actual, expect) { 78 t.Errorf(`generate(%#v) => %#v; want %#v`, args, actual, expect) 79 } 80 81 for _, v := range []string{ 82 filepath.Join(controllerPath, "app_controller.go"), 83 filepath.Join(viewPath, "app_controller.html"), 84 } { 85 if _, err := os.Stat(v); os.IsNotExist(err) { 86 t.Errorf("generate(%#v); file %#v is not exists; want exists", args, v) 87 } 88 } 89 }