package oauth2.functional;
import oauth2.OAuth2Constants;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import play.Logger;
import play.cache.Cache;
import play.mvc.Http;
import play.test.Fixtures;
import play.test.FunctionalTest;
/**
* Tests the OAuth 2 AccessToken Controller
*
* @see AccessToken
* @author Alex Jarvis axj7@aber.ac.uk
*/
public class AccessTokenTest extends FunctionalTest {
public Http.Response response;
public String accessToken;
public void requestAccessToken() {
response = POST("/oauth2/?grant_type=password&client_id=bob@gmail.com&client_secret=password");
accessToken = response.out.toString();
}
@Before
public void loadFixtures() {
Fixtures.deleteDatabase();
Cache.clear();
Fixtures.loadModels("test-data.yml");
}
@Test
public void testResponseOK() {
requestAccessToken();
assertIsOk(response);
}
@Test
public void testResponseKeyLength() {
requestAccessToken();
assertEquals(32, accessToken.length());
}
@Test
public void testKeyIsRandom() {
requestAccessToken();
String key1 = accessToken;
requestAccessToken();
String key2 = accessToken;
assertNotSame(key1, key2);
}
@Test
public void testUnknownGrantTypes() {
response = POST("/oauth2/?grant_type=unknown&client_id=bob@gmail.com&client_secret=secret");
assertStatus(400, response);
}
@Test
public void testValidationErrors() {
response = POST("/oauth2/?grant_type=password&client_id=bob@gmail.com");
assertStatus(400, response);
}
@Test
public void testBadRequest() {
response = GET("/users/");
assertStatus(401, response);
}
@Test
public void testAccessWithToken() {
requestAccessToken();
response = GET("/users/?"+OAuth2Constants.PARAM_OAUTH_TOKEN+"="+accessToken);
assertStatus(200, response);
}
@Test
public void testDestroyToken() {
requestAccessToken();
response = DELETE("/oauth2/?"+OAuth2Constants.PARAM_OAUTH_TOKEN+"="+accessToken);
assertStatus(200, response);
// Second time will show a bad request
response = DELETE("/oauth2/?"+OAuth2Constants.PARAM_OAUTH_TOKEN+"="+accessToken);
assertStatus(401, response);
}
@After
public void log() {
if (response != null) {
Logger.debug("Response Status: " + response.status.toString());
Logger.debug("Response: " + response.out.toString());
}
}
}