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  }