@@ -744,3 +744,77 @@ func TestExtractValuesFromTemplate(t *testing.T) {
744744 t .Run (tc .name , func (t * testing.T ) { testFunc (t , tc ) })
745745 }
746746}
747+
748+ func TestTopologicalSort (t * testing.T ) {
749+ type node struct {
750+ name string
751+ deps []string
752+ }
753+
754+ type testCase struct {
755+ name string
756+ items []node
757+ wantErr bool
758+ wantDependencies bool
759+ expected []string
760+ }
761+
762+ testCases := []testCase {
763+ {
764+ name : "Empty items" ,
765+ items : []node {},
766+ wantErr : false ,
767+ wantDependencies : false ,
768+ expected : []string {},
769+ },
770+ {
771+ name : "Items with dependencies" ,
772+ items : []node {
773+ {name : "1" , deps : []string {"3" }},
774+ {name : "2" , deps : []string {"4" }},
775+ {name : "3" , deps : []string {"2" }},
776+ {name : "4" , deps : []string {}},
777+ },
778+ wantErr : false ,
779+ wantDependencies : true ,
780+ expected : []string {"4" , "2" , "3" , "1" },
781+ },
782+ {
783+ name : "Items without dependencies" ,
784+ items : []node {
785+ {name : "1" , deps : []string {}},
786+ {name : "2" , deps : []string {}},
787+ {name : "3" , deps : []string {}},
788+ },
789+ wantErr : false ,
790+ wantDependencies : false ,
791+ expected : []string {"1" , "2" , "3" },
792+ },
793+ {
794+ name : "Items with cycle dependencies" ,
795+ items : []node {
796+ {name : "1" , deps : []string {"2" }},
797+ {name : "2" , deps : []string {"1" }},
798+ },
799+ wantErr : true ,
800+ wantDependencies : false ,
801+ expected : nil ,
802+ },
803+ }
804+
805+ testFunc := func (t * testing.T , tc testCase ) {
806+ t .Helper ()
807+
808+ actual , hasDependencies , err := TopologicalSort (tc .items , func (node node ) (string , []string ) {
809+ return node .name , node .deps
810+ })
811+
812+ require .Equal (t , tc .wantErr , err != nil )
813+ require .Equal (t , tc .wantDependencies , hasDependencies )
814+ require .Equal (t , tc .expected , actual )
815+ }
816+
817+ for _ , tc := range testCases {
818+ t .Run (tc .name , func (t * testing.T ) { testFunc (t , tc ) })
819+ }
820+ }
0 commit comments