github.com/opentofu/opentofu@v1.7.1/internal/tfdiags/override_test.go (about) 1 // Copyright (c) The OpenTofu Authors 2 // SPDX-License-Identifier: MPL-2.0 3 // Copyright (c) 2023 HashiCorp, Inc. 4 // SPDX-License-Identifier: MPL-2.0 5 6 package tfdiags 7 8 import ( 9 "testing" 10 11 "github.com/hashicorp/hcl/v2" 12 ) 13 14 func TestOverride_UpdatesSeverity(t *testing.T) { 15 original := Sourceless(Error, "summary", "detail") 16 override := Override(original, Warning, nil) 17 18 if override.Severity() != Warning { 19 t.Errorf("expected warning but was %s", override.Severity()) 20 } 21 } 22 23 func TestOverride_MaintainsExtra(t *testing.T) { 24 original := hclDiagnostic{&hcl.Diagnostic{ 25 Severity: hcl.DiagError, 26 Summary: "summary", 27 Detail: "detail", 28 Extra: "extra", 29 }} 30 override := Override(original, Warning, nil) 31 32 if override.ExtraInfo().(string) != "extra" { 33 t.Errorf("invalid extra info %v", override.ExtraInfo()) 34 } 35 } 36 37 func TestOverride_WrapsExtra(t *testing.T) { 38 original := hclDiagnostic{&hcl.Diagnostic{ 39 Severity: hcl.DiagError, 40 Summary: "summary", 41 Detail: "detail", 42 Extra: "extra", 43 }} 44 override := Override(original, Warning, func() DiagnosticExtraWrapper { 45 return &extraWrapper{ 46 mine: "mine", 47 } 48 }) 49 50 wrapper := override.ExtraInfo().(*extraWrapper) 51 if wrapper.mine != "mine" { 52 t.Errorf("invalid extra info %v", override.ExtraInfo()) 53 } 54 if wrapper.original.(string) != "extra" { 55 t.Errorf("invalid wrapped extra info %v", override.ExtraInfo()) 56 } 57 } 58 59 func TestUndoOverride(t *testing.T) { 60 original := Sourceless(Error, "summary", "detail") 61 override := Override(original, Warning, nil) 62 restored := UndoOverride(override) 63 64 if restored.Severity() != Error { 65 t.Errorf("expected warning but was %s", restored.Severity()) 66 } 67 } 68 69 func TestUndoOverride_NotOverridden(t *testing.T) { 70 original := Sourceless(Error, "summary", "detail") 71 restored := UndoOverride(original) // Shouldn't do anything bad. 72 73 if restored.Severity() != Error { 74 t.Errorf("expected warning but was %s", restored.Severity()) 75 } 76 } 77 78 type extraWrapper struct { 79 mine string 80 original interface{} 81 } 82 83 func (e *extraWrapper) WrapDiagnosticExtra(inner interface{}) { 84 e.original = inner 85 }