github.com/mineiros-io/terradoc@v0.0.9-0.20220711062319-018bd4ae81f5/internal/validators/outputsvalidator/outputsvalidator_test.go (about)

     1  package outputsvalidator_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/mineiros-io/terradoc/internal/entities"
     7  	"github.com/mineiros-io/terradoc/internal/types"
     8  	"github.com/mineiros-io/terradoc/internal/validators/outputsvalidator"
     9  	"github.com/mineiros-io/terradoc/test"
    10  )
    11  
    12  func TestValidate(t *testing.T) {
    13  	tests := []struct {
    14  		desc               string
    15  		docOutputs         entities.OutputCollection
    16  		outputsFileOutputs entities.OutputCollection
    17  		wantMissingDoc     []string
    18  		wantMissingDef     []string
    19  	}{
    20  		{
    21  
    22  			desc:               "when an output is missing from outputs file",
    23  			outputsFileOutputs: entities.OutputCollection{},
    24  			docOutputs: entities.OutputCollection{
    25  				{
    26  					Name: "name",
    27  					Type: entities.Type{TFType: types.TerraformString},
    28  				},
    29  			},
    30  			wantMissingDef: []string{"name"},
    31  		},
    32  		{
    33  			desc: "when an output is missing from doc file",
    34  			outputsFileOutputs: entities.OutputCollection{
    35  				{
    36  					Name: "age",
    37  					Type: entities.Type{TFType: types.TerraformNumber},
    38  				},
    39  			},
    40  			docOutputs:     entities.OutputCollection{},
    41  			wantMissingDoc: []string{"age"},
    42  		},
    43  		{
    44  			desc: "when doc and outputs file have the same outputs",
    45  			outputsFileOutputs: entities.OutputCollection{
    46  				{
    47  					Name: "name",
    48  					Type: entities.Type{TFType: types.TerraformString},
    49  				},
    50  				{
    51  					Name: "age",
    52  					Type: entities.Type{TFType: types.TerraformNumber},
    53  				},
    54  			},
    55  			docOutputs: entities.OutputCollection{
    56  				{
    57  					Name: "name",
    58  					Type: entities.Type{TFType: types.TerraformString},
    59  				},
    60  				{
    61  					Name: "age",
    62  					Type: entities.Type{TFType: types.TerraformNumber},
    63  				},
    64  			},
    65  		},
    66  	}
    67  
    68  	for _, tt := range tests {
    69  		t.Run(tt.desc, func(t *testing.T) {
    70  			def := definitionFromOutputs(tt.docOutputs)
    71  			of := outputFileFromOutputs(tt.outputsFileOutputs)
    72  
    73  			got := outputsvalidator.Validate(def, of)
    74  
    75  			test.AssertHasStrings(t, tt.wantMissingDef, got.MissingDefinition)
    76  			test.AssertHasStrings(t, tt.wantMissingDoc, got.MissingDocumentation)
    77  		})
    78  	}
    79  }
    80  
    81  func definitionFromOutputs(outputs entities.OutputCollection) entities.Doc {
    82  	section := entities.Section{Outputs: outputs}
    83  
    84  	return entities.Doc{Sections: []entities.Section{section}}
    85  }
    86  
    87  func outputFileFromOutputs(outputs entities.OutputCollection) entities.ValidationContents {
    88  	return entities.ValidationContents{Outputs: outputs}
    89  }