(t *testing.T)
| 216 | } |
| 217 | |
| 218 | func TestNewAccessRequestWithoutClientAuth(t *testing.T) { |
| 219 | ctrl := gomock.NewController(t) |
| 220 | store := internal.NewMockStorage(ctrl) |
| 221 | clientManager := internal.NewMockClientManager(ctrl) |
| 222 | handler := internal.NewMockTokenEndpointHandler(ctrl) |
| 223 | handler.EXPECT().CanHandleTokenEndpointRequest(gomock.Any(), gomock.Any()).Return(true).AnyTimes() |
| 224 | handler.EXPECT().CanSkipClientAuth(gomock.Any(), gomock.Any()).Return(true).AnyTimes() |
| 225 | hasher := internal.NewMockHasher(ctrl) |
| 226 | t.Cleanup(ctrl.Finish) |
| 227 | |
| 228 | client := &DefaultClient{} |
| 229 | anotherClient := &DefaultClient{ID: "another"} |
| 230 | config := &Config{ClientSecretsHasher: hasher, AudienceMatchingStrategy: DefaultAudienceMatchingStrategy} |
| 231 | fosite := &Fosite{Store: store, Config: config} |
| 232 | for k, c := range []struct { |
| 233 | header http.Header |
| 234 | form url.Values |
| 235 | mock func() |
| 236 | method string |
| 237 | expectErr error |
| 238 | expect *AccessRequest |
| 239 | handlers TokenEndpointHandlers |
| 240 | }{ |
| 241 | // No grant type -> error |
| 242 | { |
| 243 | form: url.Values{}, |
| 244 | mock: func() { |
| 245 | clientManager.EXPECT().GetClient(gomock.Any(), gomock.Any()).Times(0) |
| 246 | }, |
| 247 | method: "POST", |
| 248 | expectErr: ErrInvalidRequest, |
| 249 | }, |
| 250 | // No registered handlers -> error |
| 251 | { |
| 252 | form: url.Values{ |
| 253 | "grant_type": {"foo"}, |
| 254 | }, |
| 255 | mock: func() { |
| 256 | clientManager.EXPECT().GetClient(gomock.Any(), gomock.Any()).Times(0) |
| 257 | }, |
| 258 | method: "POST", |
| 259 | expectErr: ErrInvalidRequest, |
| 260 | handlers: TokenEndpointHandlers{}, |
| 261 | }, |
| 262 | // Handler can skip client auth and ignores missing client. |
| 263 | { |
| 264 | header: http.Header{ |
| 265 | "Authorization": {basicAuth("foo", "bar")}, |
| 266 | }, |
| 267 | form: url.Values{ |
| 268 | "grant_type": {"foo"}, |
| 269 | }, |
| 270 | mock: func() { |
| 271 | // despite error from storage, we should success, because client auth is not required |
| 272 | store.EXPECT().FositeClientManager().Return(clientManager).Times(1) |
| 273 | clientManager.EXPECT().GetClient(gomock.Any(), "foo").Return(nil, errors.New("no client")).Times(1) |
| 274 | handler.EXPECT().HandleTokenEndpointRequest(gomock.Any(), gomock.Any()).Return(nil) |
| 275 | }, |
nothing calls this directly
no test coverage detected