/* * Copyright 2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.social.facebook.web; import static org.junit.Assert.*; import java.lang.reflect.Method; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.springframework.core.MethodParameter; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.util.MultiValueMap; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.ServletWebRequest; public class SignedRequestArgumentResolverTest { private static final String APP_SECRET = "888e92659dae96040216a257576b092a"; private static final String DEAUTH_CALLBACK = "T4PCp840PHnhgQwMgCSZODpDGqhLC4mFGaNG8oHW7WU.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTMzNTg5NDc5NiwidXNlciI6eyJjb3VudHJ5IjoidXMiLCJsb2NhbGUiOiJlbl9VUyJ9LCJ1c2VyX2lkIjoiNzM4MTQwNTc5In0"; private SignedRequestArgumentResolver resolver; @Before public void setup() { resolver = new SignedRequestArgumentResolver(APP_SECRET); } @Test public void resolveArgument_dauthorizationRequest_object() throws Exception { MockHttpServletRequest httpServletRequest = new MockHttpServletRequest(); httpServletRequest.setParameter("signed_request", DEAUTH_CALLBACK); NativeWebRequest request = new ServletWebRequest(httpServletRequest); Method method = SignedRequestArgumentResolverTest.class.getDeclaredMethod("annotatedMethod", DeauthorizationRequest.class, Map.class, MultiValueMap.class, String.class); MethodParameter deauthParameter = new MethodParameter(method, 0); DeauthorizationRequest resolved = (DeauthorizationRequest) resolver.resolveArgument(deauthParameter, null, request, null); assertEquals("HMAC-SHA256", resolved.getAlgorithm()); assertEquals(1335894796, resolved.getIssuedAt()); assertEquals("738140579", resolved.getUserId()); assertEquals("us", resolved.getUser().getCountry()); assertEquals("en_US", resolved.getUser().getLocale()); } @Test @SuppressWarnings({ "unused", "unchecked" }) public void resolveArgument_dauthorizationRequest_map() throws Exception { MockHttpServletRequest httpServletRequest = new MockHttpServletRequest(); httpServletRequest.setParameter("signed_request", DEAUTH_CALLBACK); NativeWebRequest request = new ServletWebRequest(httpServletRequest); Method method = SignedRequestArgumentResolverTest.class.getDeclaredMethod("annotatedMethod", DeauthorizationRequest.class, Map.class, MultiValueMap.class, String.class); MethodParameter deauthParameter = new MethodParameter(method, 1); Class<?> parameterType = deauthParameter.getParameterType(); Map<String, Object> resolved = (Map<String, Object>) resolver.resolveArgument(deauthParameter, null, request, null); assertEquals("HMAC-SHA256", resolved.get("algorithm")); assertEquals(1335894796, resolved.get("issued_at")); assertEquals("738140579", resolved.get("user_id")); Map<String, ?> userData = (Map<String, ?>) resolved.get("user"); assertEquals("us", userData.get("country")); assertEquals("en_US", userData.get("locale")); } @Test @SuppressWarnings({ "unused", "unchecked" }) public void resolveArgument_dauthorizationRequest_multiValueMap() throws Exception { MockHttpServletRequest httpServletRequest = new MockHttpServletRequest(); httpServletRequest.setParameter("signed_request", DEAUTH_CALLBACK); NativeWebRequest request = new ServletWebRequest(httpServletRequest); Method method = SignedRequestArgumentResolverTest.class.getDeclaredMethod("annotatedMethod", DeauthorizationRequest.class, Map.class, MultiValueMap.class, String.class); MethodParameter deauthParameter = new MethodParameter(method, 2); Class<?> parameterType = deauthParameter.getParameterType(); MultiValueMap<String, Object> resolved = (MultiValueMap<String, Object>) resolver.resolveArgument(deauthParameter, null, request, null); assertEquals("HMAC-SHA256", resolved.getFirst("algorithm")); assertEquals(1335894796, resolved.getFirst("issued_at")); assertEquals("738140579", resolved.getFirst("user_id")); Map<String, ?> userData = (Map<String, ?>) resolved.getFirst("user"); assertEquals("us", userData.get("country")); assertEquals("en_US", userData.get("locale")); } @SuppressWarnings("unused") private void annotatedMethod(@SignedRequest DeauthorizationRequest deauth, @SignedRequest Map<String, ?> deauthMap, @SignedRequest MultiValueMap<String, ?> dauthMVM, String someOtherParameter) { } }