...

Source file src/edge-infra.dev/pkg/edge/edgeadmin/commands/operatorintervention/delete/privilege_test.go

Documentation: edge-infra.dev/pkg/edge/edgeadmin/commands/operatorintervention/delete

     1  //nolint:dupl
     2  package delete
     3  
     4  import (
     5  	"context"
     6  	"encoding/json"
     7  	"strings"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"edge-infra.dev/pkg/edge/api/fake"
    14  	"edge-infra.dev/pkg/edge/api/graph/model"
    15  	"edge-infra.dev/pkg/edge/edgecli"
    16  	"edge-infra.dev/pkg/edge/edgecli/flagutil"
    17  	"edge-infra.dev/pkg/lib/cli/rags"
    18  )
    19  
    20  type DeleteOperatorInterventionPrivilegeResponse struct {
    21  	DeleteOperatorInterventionPrivilege model.DeleteOperatorInterventionPrivilegeResponse `json:"deleteOperatorInterventionPrivilege"`
    22  }
    23  
    24  // Mocks the DeleteOperatorInterventionPrivilegeResponse. Returns an error
    25  // response when the privilege `bad-privilege` is sent, otherwise returns a
    26  // non-error response
    27  func DeleteOperatorInterventionPrivilege(body []byte) (interface{}, bool, error) {
    28  	if !strings.Contains(string(body), "deleteOperatorInterventionPrivilege(privilege: $privilege)") {
    29  		return nil, false, nil
    30  	}
    31  
    32  	var ok = true
    33  
    34  	var m struct {
    35  		Query     string
    36  		Variables struct {
    37  			Privilege struct {
    38  				Name string
    39  			}
    40  		}
    41  	}
    42  	err := json.Unmarshal(body, &m)
    43  	if err != nil {
    44  		return DeleteOperatorInterventionPrivilegeResponse{}, ok, nil
    45  	}
    46  
    47  	var errors []*model.OperatorInterventionErrorResponse
    48  	if m.Variables.Privilege.Name == "bad-privilege" {
    49  		errors = []*model.OperatorInterventionErrorResponse{{
    50  			Type:      model.OperatorInterventionErrorTypeUnknownCommand,
    51  			Privilege: &m.Variables.Privilege.Name,
    52  		}}
    53  	}
    54  	return DeleteOperatorInterventionPrivilegeResponse{
    55  		DeleteOperatorInterventionPrivilege: model.DeleteOperatorInterventionPrivilegeResponse{
    56  			Errors: errors,
    57  		},
    58  	}, ok, nil
    59  }
    60  
    61  func TestDeletePrivilege(t *testing.T) {
    62  	t.Parallel()
    63  
    64  	edgeAPIMockSvr := fake.GetMockAPIServer(DeleteOperatorInterventionPrivilege)
    65  	edgeAPIMockURL := edgeAPIMockSvr.URL + "/api/v2"
    66  	t.Cleanup(func() {
    67  		edgeAPIMockSvr.Close()
    68  	})
    69  
    70  	tests := map[string]struct {
    71  		flagsFunc func(*rags.RagSet) error
    72  		expError  require.ErrorAssertionFunc
    73  	}{
    74  		"No Flags": {
    75  			flagsFunc: func(*rags.RagSet) error { return nil },
    76  			expError:  require.Error,
    77  		},
    78  		"Empty Flag": {
    79  			flagsFunc: func(c *rags.RagSet) error {
    80  				return flagutil.SetFlag(c, flagutil.OIPrivilege, "")
    81  			},
    82  			expError: require.Error,
    83  		},
    84  		"Flag": {
    85  			flagsFunc: func(c *rags.RagSet) error {
    86  				return flagutil.SetFlag(c, flagutil.OIPrivilege, "abcd")
    87  			},
    88  			expError: require.NoError,
    89  		},
    90  		"Bad Command": {
    91  			flagsFunc: func(c *rags.RagSet) error {
    92  				return flagutil.SetFlag(c, flagutil.OIPrivilege, "bad-privilege")
    93  			},
    94  			expError: require.Error,
    95  		},
    96  	}
    97  
    98  	for name, tc := range tests {
    99  		tc := tc
   100  		t.Run(name, func(t *testing.T) {
   101  			t.Parallel()
   102  
   103  			// Set a dummy token in a fake banner context so that we bypass the
   104  			// ValidateConnectionFlags check which would otherwise do a login
   105  			// mutation to the api server, something which is not supported by
   106  			// the fake server
   107  			future := time.Now().Add(time.Hour * 24)
   108  			testConfig := edgecli.Config{
   109  				CurrentBannerContext: "fakeBanner",
   110  				BannerContexts: map[string]*edgecli.BannerContext{
   111  					"fakeBanner": {
   112  						TokenTime: future.Format(time.RFC3339),
   113  						Token:     "fakeToken",
   114  						Endpoint:  edgeAPIMockURL,
   115  					},
   116  				},
   117  			}
   118  
   119  			cmd := NewDeletePrivilege(&testConfig)
   120  			cmd.Command() // Required to initialise cmd.Rags
   121  
   122  			require.NoError(t, tc.flagsFunc(cmd.Rags))
   123  
   124  			err := cmd.Command().Exec(context.Background(), []string{})
   125  			tc.expError(t, err)
   126  		})
   127  	}
   128  }
   129  

View as plain text