...

Source file src/edge-infra.dev/pkg/sds/emergencyaccess/authservice/types_test.go

Documentation: edge-infra.dev/pkg/sds/emergencyaccess/authservice

     1  package authservice
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestCommandAuthPayloadValidate(t *testing.T) {
    12  	t.Parallel()
    13  
    14  	tests := map[string]struct {
    15  		payload CommandAuthPayload
    16  		exp     error
    17  	}{
    18  		"Valid Payload": {
    19  			payload: CommandAuthPayload{
    20  				Target:  Target{BannerID: "a-banner-id"},
    21  				Command: "ls",
    22  			},
    23  			exp: nil,
    24  		},
    25  		"One Error": {
    26  			payload: CommandAuthPayload{
    27  				Command: "ls",
    28  			},
    29  			exp: ValidationError{
    30  				{errors.New("banner id was nil"), "Payload missing banner ID"},
    31  			},
    32  		},
    33  		"Invalid Payload no EARoles": {
    34  			payload: CommandAuthPayload{},
    35  			exp: ValidationError{
    36  				{errors.New("command was nil"), "Payload missing command"},
    37  				{errors.New("banner id was nil"), "Payload missing banner ID"},
    38  			},
    39  		},
    40  	}
    41  	for name, tc := range tests {
    42  		tc := tc
    43  		t.Run(name, func(t *testing.T) {
    44  			t.Parallel()
    45  
    46  			assert.Equal(t, tc.exp, tc.payload.Validate())
    47  		})
    48  	}
    49  }
    50  
    51  func TestTargetAuthPayloadValidate(t *testing.T) {
    52  	t.Parallel()
    53  
    54  	tests := map[string]struct {
    55  		payload ResolveTargetPayload
    56  		exp     error
    57  	}{
    58  		"Valid Payload": {
    59  			payload: ResolveTargetPayload{
    60  				Target: Target{
    61  					BannerID:   "banner",
    62  					StoreID:    "store",
    63  					TerminalID: "terminal",
    64  				},
    65  			},
    66  			exp: nil,
    67  		},
    68  		"One Error": {
    69  			payload: ResolveTargetPayload{
    70  				Target: Target{
    71  					StoreID:    "store",
    72  					TerminalID: "terminal",
    73  				},
    74  			},
    75  			exp: ValidationError{
    76  				{errors.New("banner id was nil"), "Payload missing banner ID"},
    77  			},
    78  		},
    79  		"Invalid Payload no EARoles": {
    80  			payload: ResolveTargetPayload{},
    81  			exp: ValidationError{
    82  				{errors.New("banner id was nil"), "Payload missing banner ID"},
    83  				{errors.New("store id was nil"), "Payload missing store ID"},
    84  				{errors.New("terminal id was nil"), "Payload missing terminal ID"},
    85  			},
    86  		},
    87  	}
    88  	for name, tc := range tests {
    89  		tc := tc
    90  		t.Run(name, func(t *testing.T) {
    91  			t.Parallel()
    92  
    93  			assert.Equal(t, tc.exp, tc.payload.Validate())
    94  		})
    95  	}
    96  }
    97  
    98  func TestAuthorizeRequestPayloadValidate(t *testing.T) {
    99  	t.Parallel()
   100  
   101  	tests := map[string]struct {
   102  		payload AuthorizeRequestPayload
   103  		expErr  error
   104  	}{
   105  		"Valid": {
   106  			payload: AuthorizeRequestPayload{
   107  				Request: Request{
   108  					Data: json.RawMessage(`{}`),
   109  					Attributes: map[string]string{
   110  						"something": "whatever",
   111  					},
   112  				},
   113  				Target: Target{
   114  					ProjectID:  "projectID",
   115  					BannerID:   "bannerID",
   116  					StoreID:    "storeID",
   117  					TerminalID: "terminalID",
   118  				},
   119  			},
   120  			expErr: nil,
   121  		},
   122  		"Data Not Valid JSON": {
   123  			payload: AuthorizeRequestPayload{
   124  				Request: Request{
   125  					Data: json.RawMessage("invalid"),
   126  					Attributes: map[string]string{
   127  						"something": "whatever",
   128  					},
   129  				},
   130  				Target: Target{
   131  					ProjectID:  "projectID",
   132  					BannerID:   "bannerID",
   133  					StoreID:    "storeID",
   134  					TerminalID: "terminalID",
   135  				},
   136  			},
   137  			expErr: ValidationError{
   138  				{errors.New("request data could not be marshaled"), "Payload has invalid request data"},
   139  			},
   140  		},
   141  		"Data is Nil": {
   142  			payload: AuthorizeRequestPayload{
   143  				Request: Request{
   144  					Attributes: map[string]string{
   145  						"something": "whatever",
   146  					},
   147  				},
   148  				Target: Target{
   149  					ProjectID:  "projectID",
   150  					BannerID:   "bannerID",
   151  					StoreID:    "storeID",
   152  					TerminalID: "terminalID",
   153  				},
   154  			},
   155  			expErr: ValidationError{
   156  				{errors.New("request data is nil"), "Payload has invalid request data"},
   157  			},
   158  		},
   159  		"Invalid Target": {
   160  			payload: AuthorizeRequestPayload{
   161  				Request: Request{
   162  					Data: json.RawMessage(`{}`),
   163  					Attributes: map[string]string{
   164  						"something": "whatever",
   165  					},
   166  				},
   167  			},
   168  			expErr: ValidationError{
   169  				{
   170  					err: ValidationError{
   171  						{errors.New("banner id was nil"), "Payload missing banner ID"},
   172  						{errors.New("store id was nil"), "Payload missing store ID"},
   173  						{errors.New("terminal id was nil"), "Payload missing terminal ID"},
   174  					},
   175  					userErr: "Payload has invalid target",
   176  				},
   177  			},
   178  		},
   179  		"All Invalid": {
   180  			expErr: ValidationError{
   181  				{errors.New("request data is nil"), "Payload has invalid request data"},
   182  				{
   183  					err: ValidationError{
   184  						{errors.New("banner id was nil"), "Payload missing banner ID"},
   185  						{errors.New("store id was nil"), "Payload missing store ID"},
   186  						{errors.New("terminal id was nil"), "Payload missing terminal ID"},
   187  					},
   188  					userErr: "Payload has invalid target",
   189  				},
   190  			},
   191  		},
   192  	}
   193  
   194  	for name, tc := range tests {
   195  		tc := tc
   196  		t.Run(name, func(t *testing.T) {
   197  			t.Parallel()
   198  
   199  			assert.Equal(t, tc.expErr, tc.payload.Validate())
   200  		})
   201  	}
   202  }
   203  

View as plain text