package com.pugh.sockso.web.action.api; import com.pugh.sockso.tests.SocksoTestCase; import com.pugh.sockso.tests.TestDatabase; import com.pugh.sockso.tests.TestResponse; import com.pugh.sockso.web.BadRequestException; import java.io.IOException; import java.sql.SQLException; public class TrackActionTest extends SocksoTestCase { private TrackAction action; private TestDatabase db; @Override protected void setUp() { db = new TestDatabase(); action = new TrackAction(); action.setDatabase( db ); } public void testTracksActionRespondsToTrackUrls() { assertTrue( action.canHandle(getRequest( "/api/tracks/123" )) ); assertTrue( action.canHandle(getRequest( "/api/tracks/456" )) ); assertTrue( action.canHandle(getRequest( "/api/tracks/789?limit=123" )) ); } public void testTrackActionDoesntRespondToNonTrackActions() { assertFalse( action.canHandle(getRequest( "/api/tracks" )) ); assertFalse( action.canHandle(getRequest( "/api/tracks/asd" )) ); } public void testHandlerequestThrowsExceptionWhenTrackNotFound() { boolean gotException = false; try { action.setRequest(getRequest( "/api/tracks/123" )); action.handleRequest(); } catch ( IOException e ) {} catch ( SQLException e ) {} catch ( BadRequestException e ) { gotException = true; } if ( !gotException ) { fail( "Expected exception on invalid track id" ); } } public void testTrackJsonReturnedOnValidRequest() throws Exception { TestResponse res = new TestResponse(); db.fixture( "singleTrack" ); action.setResponse( res ); action.setRequest(getRequest( "/api/tracks/1" )); action.handleRequest(); assertContains( res.getOutput(), "My Track" ); assertContains( res.getOutput(), "My Album" ); assertContains( res.getOutput(), "My Artist" ); } }