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 }