github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/steampipeconfig/parse/dependency_test.go (about)

     1  package parse
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/turbot/go-kit/helpers"
     8  )
     9  
    10  type dependencyTreeTest struct {
    11  	input    [][]string
    12  	expected []string
    13  }
    14  
    15  var testCasesDependencyTree = map[string]dependencyTreeTest{
    16  	"no overlap": {
    17  		input:    [][]string{{"a", "b", "c"}, {"d", "e", "f"}},
    18  		expected: []string{"a", "b", "c", "d", "e", "f"},
    19  	},
    20  	"overlap": {
    21  		input:    [][]string{{"a", "b", "c"}, {"b", "c"}},
    22  		expected: []string{"a", "b", "c"},
    23  	},
    24  	"multiple overlaps": {
    25  		input:    [][]string{{"a", "b", "c"}, {"b", "c"}, {"d", "e", "f", "g", "h", "i"}, {"g", "h", "i"}, {"h", "i"}},
    26  		expected: []string{"a", "b", "c", "d", "e", "f", "g", "h", "i"},
    27  	},
    28  }
    29  
    30  func TestDependencyTree(t *testing.T) {
    31  
    32  	for name, test := range testCasesDependencyTree {
    33  
    34  		res := combineDependencyOrders(test.input)
    35  		if !reflect.DeepEqual(res, test.expected) {
    36  			t.Errorf("Test %s FAILED. Expected %v, got %v", name, test.expected, res)
    37  		}
    38  	}
    39  }
    40  
    41  func combineDependencyOrders(deps [][]string) []string {
    42  
    43  	// we assume every dep is unique
    44  	// for each dep, if first element exists in any other dep, then it cannot be the longest
    45  	// first dedupe
    46  	var longestDeps []string
    47  	for i, d1 := range deps {
    48  		longest := true
    49  		for j, d2 := range deps {
    50  			if i == j {
    51  				continue
    52  			}
    53  			if helpers.StringSliceContains(d2, d1[0]) {
    54  				longest = false
    55  				continue
    56  			}
    57  		}
    58  		if longest {
    59  			longestDeps = append(longestDeps, d1...)
    60  		}
    61  	}
    62  
    63  	return longestDeps
    64  }