github.com/awslabs/clencli@v0.0.0-20210514234156-7ecf17182a20/tests/cmd_render_test.go (about)

     1  package tests
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	"github.com/awslabs/clencli/cobra/aid"
     8  	"github.com/awslabs/clencli/cobra/controller"
     9  	"github.com/sirupsen/logrus"
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestRenderCmd(t *testing.T) {
    14  	tests := map[string]struct {
    15  		args []string
    16  		out  string
    17  		err  string
    18  	}{
    19  		// argument
    20  		"no arg":                      {args: []string{"render"}, out: "", err: "this command requires one argument"},
    21  		"empty arg":                   {args: []string{"render", ""}, out: "", err: "invalid argument"},
    22  		"wrong arg":                   {args: []string{"render", "foo"}, out: "", err: "invalid argument"},
    23  		"unknown flag":                {args: []string{"render", "--foo"}, out: "", err: "unknown flag: --foo"},
    24  		"missing database":            {args: []string{"render", "template"}, out: "", err: "missing database"},
    25  		"flag needs an argument name": {args: []string{"render", "template", "--name"}, out: "", err: "flag needs an argument: --name"},
    26  	}
    27  
    28  	for name, tc := range tests {
    29  		t.Run(name, func(t *testing.T) {
    30  			out, err := executeCommand(t, controller.RenderCmd(), tc.args)
    31  			assert.Contains(t, out, tc.out)
    32  			assert.Contains(t, err.Error(), tc.err)
    33  		})
    34  	}
    35  }
    36  
    37  // /* README */
    38  
    39  func initProject(t *testing.T, pType string) {
    40  	aid.DeleteConfigurationsDirectory()
    41  	args := []string{"init", "project", "--project-name", "foo", "--project-type", pType}
    42  	wd, out, err := executeCommandGetWorkingDirectory(t, controller.InitCmd(), args)
    43  
    44  	assert.Nil(t, err)
    45  	assert.Contains(t, out, "was successfully initialized")
    46  
    47  	sep := string(os.PathSeparator)
    48  	if err := os.Chdir(wd + sep + t.Name() + sep + "foo"); err != nil {
    49  		logrus.Fatal("unable to change current working directory")
    50  	}
    51  
    52  }
    53  
    54  func TestRenderDefault(t *testing.T) {
    55  	initProject(t, "basic")
    56  
    57  	args := []string{"render", "template"}
    58  	out, err := executeCommandOnly(t, controller.RenderCmd(), args)
    59  	assert.Nil(t, err)
    60  	assert.Contains(t, out, "Template readme.tmpl rendered as README.md")
    61  }
    62  
    63  func TestRenderReadme(t *testing.T) {
    64  	initProject(t, "basic")
    65  
    66  	args := []string{"render", "template", "--name", "readme"}
    67  	out, err := executeCommandOnly(t, controller.RenderCmd(), args)
    68  	assert.Nil(t, err)
    69  	assert.Contains(t, out, "Template readme.tmpl rendered as README.md")
    70  }
    71  
    72  func TestRenderHLD(t *testing.T) {
    73  	initProject(t, "cloud")
    74  
    75  	args := []string{"render", "template", "--name", "hld"}
    76  	out, err := executeCommandOnly(t, controller.RenderCmd(), args)
    77  	assert.Nil(t, err)
    78  	assert.Contains(t, out, "Template hld.tmpl rendered as HLD.md")
    79  }