github.com/mineiros-io/terradoc@v0.0.9-0.20220711062319-018bd4ae81f5/cmd/terradoc/generate_test.go (about)

     1  package main_test
     2  
     3  import (
     4  	"io"
     5  	"io/ioutil"
     6  	"os/exec"
     7  	"testing"
     8  
     9  	"github.com/google/go-cmp/cmp"
    10  	"github.com/madlambda/spells/assert"
    11  	"github.com/mineiros-io/terradoc/test"
    12  )
    13  
    14  func TestGenerate(t *testing.T) {
    15  	inputContent := test.ReadFixture(t, generateInput)
    16  	// create tempfile
    17  	inputFile, err := ioutil.TempFile("", "terradoc-input-")
    18  	assert.NoError(t, err)
    19  	// write content to tempfile
    20  	_, err = inputFile.Write(inputContent)
    21  	assert.NoError(t, err)
    22  
    23  	defer inputFile.Close()
    24  
    25  	expectedOutput := test.ReadFixture(t, expectedGenerateOutput)
    26  
    27  	t.Run("ReadFromFile", func(t *testing.T) {
    28  		cmd := exec.Command(terradocBinPath, "generate", inputFile.Name())
    29  
    30  		output, err := cmd.CombinedOutput()
    31  		assert.NoError(t, err)
    32  
    33  		if diff := cmp.Diff(expectedOutput, output); diff != "" {
    34  			t.Errorf("Result is not expected (-want +got):\n%s", diff)
    35  		}
    36  	})
    37  
    38  	t.Run("ReadFromSTDIN", func(t *testing.T) {
    39  		cmd := exec.Command(terradocBinPath, "generate", "-")
    40  
    41  		cmdStdIn, err := cmd.StdinPipe()
    42  		assert.NoError(t, err)
    43  
    44  		_, err = io.WriteString(cmdStdIn, string(inputContent))
    45  		assert.NoError(t, err)
    46  
    47  		cmdStdIn.Close()
    48  
    49  		output, err := cmd.CombinedOutput()
    50  		assert.NoError(t, err)
    51  
    52  		if diff := cmp.Diff(expectedOutput, output); diff != "" {
    53  			t.Errorf("Result is not expected (-want +got):\n%s", diff)
    54  		}
    55  	})
    56  
    57  	t.Run("WriteToStdout", func(t *testing.T) {
    58  		cmd := exec.Command(terradocBinPath, "generate", inputFile.Name())
    59  
    60  		output, err := cmd.CombinedOutput()
    61  		assert.NoError(t, err)
    62  
    63  		if diff := cmp.Diff(expectedOutput, output); diff != "" {
    64  			t.Errorf("Result is not expected (-want +got):\n%s", diff)
    65  		}
    66  	})
    67  
    68  	t.Run("WriteToFile", func(t *testing.T) {
    69  		f, err := ioutil.TempFile("", "terradoc-output-")
    70  		assert.NoError(t, err)
    71  		defer f.Close()
    72  
    73  		cmd := exec.Command(terradocBinPath, "generate", "-o", f.Name(), inputFile.Name())
    74  
    75  		err = cmd.Run()
    76  		assert.NoError(t, err)
    77  
    78  		result, err := ioutil.ReadAll(f)
    79  		assert.NoError(t, err)
    80  
    81  		if diff := cmp.Diff(expectedOutput, result); diff != "" {
    82  			t.Errorf("Result is not expected (-want +got):\n%s", diff)
    83  		}
    84  	})
    85  }