package com.pugh.sockso.web.action;
import com.pugh.sockso.Constants;
import com.pugh.sockso.cache.ObjectCache;
import com.pugh.sockso.StringProperties;
import com.pugh.sockso.inject.SocksoModule;
import com.pugh.sockso.tests.SocksoTestCase;
import com.pugh.sockso.tests.TestResponse;
import com.pugh.sockso.tests.TestOptionSet;
import com.pugh.sockso.web.BadRequestException;
import com.pugh.sockso.web.Request;
import com.pugh.sockso.web.action.api.ApiAction;
import static org.easymock.EasyMock.*;
import com.google.inject.Guice;
public class ApiTest extends SocksoTestCase {
private Api api;
private StringProperties p;
private TestResponse res;
@Override
protected void setUp() {
p = new StringProperties();
p.set( Constants.WWW_USERS_REQUIRE_LOGIN, p.YES );
res = new TestResponse();
api = new Api( new ObjectCache(), Guice.createInjector(new SocksoModule(new TestOptionSet())) );
api.setProperties( p );
api.setResponse( res );
}
public void testApiActionDoesNotRequireLoginAsItHandlesThisForItsSubActions() {
assertFalse( api.requiresLogin() );
}
public void testJsonErrorReturnedWhenActionThrowsException() throws Exception {
api.setRequest(getRequest("/api/blogasdasdasd") );
api.handleRequest();
assertContains( res.getOutput(), "errorMessage" );
}
public void testErrorReturnedWhenActionRequiresLoginAndUserIsNotLoggedIn() throws Exception {
ApiAction action = createNiceMock( ApiAction.class );
expect( action.canHandle((Request)anyObject()) ).andReturn( Boolean.TRUE );
expect( action.requiresLogin() ).andReturn( Boolean.TRUE );
replay( action );
//
api.setUser( null );
boolean gotException = false;
try {
api.processActions( new ApiAction[] { action } );
}
catch ( BadRequestException e ) { gotException = true; }
if ( !gotException ) { fail( "Expecting exception to be thrown as user was not logged in" ); }
verify( action );
}
public void testActionIsRunWhenUserNotLoggedInAndActionDoesNotRequireLogin() throws Exception {
ApiAction action = createNiceMock( ApiAction.class );
expect( action.canHandle((Request)anyObject()) ).andReturn( Boolean.TRUE );
expect( action.requiresLogin() ).andReturn( Boolean.FALSE );
action.handleRequest();
replay( action );
//
api.setUser( null );
api.processActions( new ApiAction[] { action } );
verify( action );
}
public void testActionIsRunWhenActionRequiresLoginButServerDoesNot() throws Exception {
ApiAction action = createNiceMock( ApiAction.class );
expect( action.canHandle((Request)anyObject()) ).andReturn( Boolean.TRUE );
action.handleRequest();
replay( action );
//
p.set( Constants.WWW_USERS_REQUIRE_LOGIN, p.NO );
api.setUser( null );
api.processActions( new ApiAction[] { action } );
verify( action );
}
}