github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/tekton/syntax/pipeline_internal_test.go (about)

     1  // +build unit
     2  
     3  package syntax
     4  
     5  import (
     6  	"strings"
     7  	"testing"
     8  )
     9  
    10  func TestFindDuplicates(t *testing.T) {
    11  
    12  	tests := []struct {
    13  		name   string
    14  		input  []string
    15  		errors []string
    16  	}{
    17  		{
    18  			name:   "Two stage name duplicated",
    19  			input:  []string{"Stage 1", "Stage 1", "Stage 2", "Stage 2"},
    20  			errors: []string{"Stage 1", "Stage 2"},
    21  		}, {
    22  			name:   "One stage name duplicated",
    23  			input:  []string{"Stage 1", "Stage 1"},
    24  			errors: []string{"Stage 1"},
    25  		}, {
    26  			name:   "No stage name duplicated",
    27  			input:  []string{"Stage 0", "Stage 1", "Stage 2", "Stage 3"},
    28  			errors: nil,
    29  		}, {
    30  			name:   "Case-insensitive stage name duplicated",
    31  			input:  []string{"Stage 1", "stage 1"},
    32  			errors: []string{"Stage 1"},
    33  		},
    34  	}
    35  
    36  	for _, tt := range tests {
    37  		t.Run(tt.name, func(t *testing.T) {
    38  
    39  			err := findDuplicates(tt.input)
    40  
    41  			if len(tt.errors) == 0 && err != nil {
    42  				t.Fatal("Not all duplicates found A")
    43  			}
    44  
    45  			if len(tt.errors) > 0 && len(err.Details) > 0 {
    46  				for _, expectedError := range tt.errors {
    47  					if !strings.Contains(err.Details, expectedError) {
    48  						t.Fatal("Not all duplicates found", expectedError)
    49  					}
    50  				}
    51  			}
    52  
    53  			if len(tt.errors) == 0 {
    54  				if err != nil {
    55  					t.Fatal("Unexpected error ", err.Details)
    56  				}
    57  			}
    58  
    59  		})
    60  	}
    61  }