github.com/vmware/go-vcloud-director/v2@v2.24.0/govcd/generic_functions_unit_test.go (about)

     1  //go:build unit || ALL
     2  
     3  /*
     4  * Copyright 2023 VMware, Inc.  All rights reserved.  Licensed under the Apache v2 License.
     5   */
     6  package govcd
     7  
     8  import (
     9  	"reflect"
    10  	"testing"
    11  )
    12  
    13  func Test_oneOrError(t *testing.T) {
    14  	type args struct {
    15  		key         string
    16  		name        string
    17  		entitySlice []*testEntity
    18  	}
    19  	tests := []struct {
    20  		name                  string
    21  		args                  args
    22  		want                  *testEntity
    23  		wantErr               bool
    24  		wantErrEntityNotFound bool
    25  	}{
    26  		{
    27  			name: "SingleEntity",
    28  			args: args{
    29  				key:         "name",
    30  				name:        "test",
    31  				entitySlice: []*testEntity{{Name: "test"}},
    32  			},
    33  			want:    &testEntity{Name: "test"},
    34  			wantErr: false,
    35  		},
    36  		{
    37  			name: "NoEntities",
    38  			args: args{
    39  				key:         "name",
    40  				name:        "test",
    41  				entitySlice: []*testEntity{},
    42  			},
    43  			want:                  nil,
    44  			wantErr:               true,
    45  			wantErrEntityNotFound: true,
    46  		},
    47  		{
    48  			name: "TwoEntities",
    49  			args: args{
    50  				key:         "name",
    51  				name:        "test",
    52  				entitySlice: []*testEntity{{Name: "test"}, {Name: "best"}},
    53  			},
    54  			want:    nil,
    55  			wantErr: true,
    56  		},
    57  		{
    58  			name: "ThreeEntities",
    59  			args: args{
    60  				key:         "name",
    61  				name:        "test",
    62  				entitySlice: []*testEntity{{Name: "test"}, {Name: "best"}, {Name: "rest"}},
    63  			},
    64  			want:    nil,
    65  			wantErr: true,
    66  		},
    67  		{
    68  			name: "NilEntities",
    69  			args: args{
    70  				key:         "name",
    71  				name:        "test",
    72  				entitySlice: nil,
    73  			},
    74  			want:                  nil,
    75  			wantErr:               true,
    76  			wantErrEntityNotFound: true,
    77  		},
    78  	}
    79  	for _, tt := range tests {
    80  		t.Run(tt.name, func(t *testing.T) {
    81  			got, err := oneOrError(tt.args.key, tt.args.name, tt.args.entitySlice)
    82  			if (err != nil) != tt.wantErr {
    83  				t.Errorf("oneOrError() error = %v, wantErr %v", err, tt.wantErr)
    84  				return
    85  			}
    86  
    87  			if tt.wantErr && tt.wantErrEntityNotFound && !ContainsNotFound(err) {
    88  				t.Errorf("oneOrError() error = %v, wantErrEntityNotFound %v", err, tt.wantErrEntityNotFound)
    89  				return
    90  			}
    91  
    92  			if !reflect.DeepEqual(got, tt.want) {
    93  				t.Errorf("oneOrError() = %v, want %v", got, tt.want)
    94  			}
    95  		})
    96  	}
    97  }
    98  
    99  type testEntity struct {
   100  	Name string `json:"name"`
   101  }