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 }