github.com/dolanor/pop@v4.13.0+incompatible/genny/model/model_test.go (about)

     1  package model
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	"github.com/gobuffalo/attrs"
     8  	"github.com/gobuffalo/genny/gentest"
     9  	"github.com/gobuffalo/gogen"
    10  	packr "github.com/gobuffalo/packr/v2"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func clean(s string) string {
    15  	s = strings.TrimSpace(s)
    16  	s = strings.Replace(s, "\r\n", "\n", -1)
    17  	s = strings.Replace(s, "\r", "\n", -1)
    18  	s = strings.Replace(s, "\t", "", -1)
    19  	return s
    20  }
    21  
    22  func Test_New(t *testing.T) {
    23  	r := require.New(t)
    24  
    25  	g, err := New(&Options{
    26  		Name: "widget",
    27  	})
    28  	r.NoError(err)
    29  
    30  	run := gentest.NewRunner()
    31  	run.With(g)
    32  
    33  	r.NoError(run.Run())
    34  
    35  	res := run.Results()
    36  
    37  	r.Len(res.Commands, 0)
    38  	r.Len(res.Files, 2)
    39  
    40  	r.NoError(gentest.CompareFiles([]string{"models/widget.go", "models/widget_test.go"}, res.Files))
    41  }
    42  
    43  func Test_New_Standard(t *testing.T) {
    44  	r := require.New(t)
    45  
    46  	ats, err := attrs.ParseArgs("id:uuid", "created_at:timestamp", "updated_at:timestamp", "name", "description:text", "age:int", "bar:nulls.String")
    47  	r.NoError(err)
    48  	g, err := New(&Options{
    49  		Name:  "widget",
    50  		Attrs: ats,
    51  	})
    52  
    53  	r.NoError(err)
    54  
    55  	run := gentest.NewRunner()
    56  	run.With(g)
    57  
    58  	r.NoError(run.Run())
    59  
    60  	res := run.Results()
    61  
    62  	r.Len(res.Commands, 0)
    63  	r.NoError(gentest.CompareFiles([]string{"models/widget.go", "models/widget_test.go"}, res.Files))
    64  
    65  	box := packr.New("Test_New_Standard", "../model/_fixtures")
    66  
    67  	f, err := res.Find("models/widget_test.go")
    68  	r.NoError(err)
    69  	bf, err := box.FindString(f.Name())
    70  	r.NoError(err)
    71  	r.Equal(bf, f.String())
    72  
    73  	f, err = res.Find("models/widget.go")
    74  
    75  	tf := gogen.FmtTransformer()
    76  	f, err = tf.Transform(f)
    77  	r.NoError(err)
    78  
    79  	bf, err = box.FindString(f.Name())
    80  	r.NoError(err)
    81  	r.Equal(clean(bf), clean(f.String()))
    82  }
    83  
    84  func Test_New_No_Attrs(t *testing.T) {
    85  	r := require.New(t)
    86  	g, err := New(&Options{
    87  		Name: "widget",
    88  	})
    89  
    90  	r.NoError(err)
    91  
    92  	run := gentest.NewRunner()
    93  	run.With(g)
    94  
    95  	r.NoError(run.Run())
    96  
    97  	res := run.Results()
    98  	f, err := res.Find("models/widget.go")
    99  	r.NoError(err)
   100  
   101  	tf := gogen.FmtTransformer()
   102  	f, err = tf.Transform(f)
   103  	r.NoError(err)
   104  
   105  	box := packr.New("Test_New_No_Attrs", "../model/_fixtures")
   106  	bf, err := box.FindString("models/widget_empty.go")
   107  	r.NoError(err)
   108  	r.Equal(clean(bf), clean(f.String()))
   109  }
   110  
   111  func Test_New_XML(t *testing.T) {
   112  	r := require.New(t)
   113  
   114  	ats, err := attrs.ParseArgs("id:uuid", "created_at:timestamp", "updated_at:timestamp", "name", "description:text", "age:int", "bar:nulls.String")
   115  	r.NoError(err)
   116  	g, err := New(&Options{
   117  		Name:     "widget",
   118  		Encoding: "xml",
   119  		Attrs:    ats,
   120  	})
   121  
   122  	r.NoError(err)
   123  
   124  	run := gentest.NewRunner()
   125  	run.With(g)
   126  
   127  	r.NoError(run.Run())
   128  
   129  	res := run.Results()
   130  
   131  	r.Len(res.Commands, 0)
   132  	r.NoError(gentest.CompareFiles([]string{"models/widget.go", "models/widget_test.go"}, res.Files))
   133  
   134  	box := packr.New("Test_New_XML", "../model/_fixtures")
   135  
   136  	f, err := res.Find("models/widget_test.go")
   137  	r.NoError(err)
   138  	bf, err := box.FindString(f.Name())
   139  	r.NoError(err)
   140  	r.Equal(bf, f.String())
   141  
   142  	f, err = res.Find("models/widget.go")
   143  
   144  	tf := gogen.FmtTransformer()
   145  	f, err = tf.Transform(f)
   146  	r.NoError(err)
   147  
   148  	bf, err = box.FindString("models/widget_xml.go")
   149  	r.NoError(err)
   150  	r.Equal(clean(bf), clean(f.String()))
   151  }
   152  
   153  func Test_New_JSONAPI(t *testing.T) {
   154  	r := require.New(t)
   155  
   156  	ats, err := attrs.ParseArgs("id:uuid", "created_at:timestamp", "updated_at:timestamp", "name", "description:text", "age:int", "bar:nulls.String")
   157  	r.NoError(err)
   158  	g, err := New(&Options{
   159  		Name:     "widget",
   160  		Encoding: "jsonapi",
   161  		Attrs:    ats,
   162  	})
   163  
   164  	r.NoError(err)
   165  
   166  	run := gentest.NewRunner()
   167  	run.With(g)
   168  
   169  	r.NoError(run.Run())
   170  
   171  	res := run.Results()
   172  
   173  	r.Len(res.Commands, 0)
   174  	r.NoError(gentest.CompareFiles([]string{"models/widget.go", "models/widget_test.go"}, res.Files))
   175  
   176  	box := packr.New("Test_New_JSONAPI", "../model/_fixtures")
   177  
   178  	f, err := res.Find("models/widget_test.go")
   179  	r.NoError(err)
   180  	bf, err := box.FindString(f.Name())
   181  	r.NoError(err)
   182  	r.Equal(bf, f.String())
   183  
   184  	f, err = res.Find("models/widget.go")
   185  
   186  	tf := gogen.FmtTransformer()
   187  	f, err = tf.Transform(f)
   188  	r.NoError(err)
   189  
   190  	bf, err = box.FindString("models/widget_jsonapi.go")
   191  	r.NoError(err)
   192  	r.Equal(clean(bf), clean(f.String()))
   193  }
   194  
   195  func Test_New_Package(t *testing.T) {
   196  	r := require.New(t)
   197  
   198  	g, err := New(&Options{
   199  		Name: "widget",
   200  		Path: "models/admin",
   201  	})
   202  	r.NoError(err)
   203  
   204  	run := gentest.NewRunner()
   205  	run.With(g)
   206  
   207  	r.NoError(run.Run())
   208  
   209  	res := run.Results()
   210  
   211  	r.Len(res.Commands, 0)
   212  	r.Len(res.Files, 2)
   213  
   214  	f, err := res.Find("models/admin/widget.go")
   215  	r.NoError(err)
   216  	r.Contains(f.String(), "package admin")
   217  }