github.com/opentofu/opentofu@v1.7.1/internal/tofu/transform_root_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 tofu
     7  
     8  import (
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/opentofu/opentofu/internal/addrs"
    13  )
    14  
    15  func TestRootTransformer(t *testing.T) {
    16  	t.Run("many nodes", func(t *testing.T) {
    17  		mod := testModule(t, "transform-root-basic")
    18  
    19  		g := Graph{Path: addrs.RootModuleInstance}
    20  		{
    21  			tf := &ConfigTransformer{Config: mod}
    22  			if err := tf.Transform(&g); err != nil {
    23  				t.Fatalf("err: %s", err)
    24  			}
    25  		}
    26  
    27  		{
    28  			transform := &MissingProviderTransformer{}
    29  			if err := transform.Transform(&g); err != nil {
    30  				t.Fatalf("err: %s", err)
    31  			}
    32  		}
    33  
    34  		{
    35  			transform := &ProviderTransformer{}
    36  			if err := transform.Transform(&g); err != nil {
    37  				t.Fatalf("err: %s", err)
    38  			}
    39  		}
    40  
    41  		{
    42  			transform := &RootTransformer{}
    43  			if err := transform.Transform(&g); err != nil {
    44  				t.Fatalf("err: %s", err)
    45  			}
    46  		}
    47  
    48  		actual := strings.TrimSpace(g.String())
    49  		expected := strings.TrimSpace(testTransformRootBasicStr)
    50  		if actual != expected {
    51  			t.Fatalf("wrong result\n\ngot:\n%s\n\nwant:\n%s", actual, expected)
    52  		}
    53  
    54  		root, err := g.Root()
    55  		if err != nil {
    56  			t.Fatalf("err: %s", err)
    57  		}
    58  		if _, ok := root.(graphNodeRoot); !ok {
    59  			t.Fatalf("bad: %#v", root)
    60  		}
    61  	})
    62  
    63  	t.Run("only one initial node", func(t *testing.T) {
    64  		g := Graph{Path: addrs.RootModuleInstance}
    65  		g.Add("foo")
    66  		addRootNodeToGraph(&g)
    67  		got := strings.TrimSpace(g.String())
    68  		want := strings.TrimSpace(`
    69  foo
    70  root
    71    foo
    72  `)
    73  		if got != want {
    74  			t.Errorf("wrong final graph\ngot:\n%s\nwant:\n%s", got, want)
    75  		}
    76  	})
    77  
    78  	t.Run("graph initially empty", func(t *testing.T) {
    79  		g := Graph{Path: addrs.RootModuleInstance}
    80  		addRootNodeToGraph(&g)
    81  		got := strings.TrimSpace(g.String())
    82  		want := `root`
    83  		if got != want {
    84  			t.Errorf("wrong final graph\ngot:\n%s\nwant:\n%s", got, want)
    85  		}
    86  	})
    87  
    88  }
    89  
    90  const testTransformRootBasicStr = `
    91  aws_instance.foo
    92    provider["registry.opentofu.org/hashicorp/aws"]
    93  do_droplet.bar
    94    provider["registry.opentofu.org/hashicorp/do"]
    95  provider["registry.opentofu.org/hashicorp/aws"]
    96  provider["registry.opentofu.org/hashicorp/do"]
    97  root
    98    aws_instance.foo
    99    do_droplet.bar
   100  `