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