Package com.pugh.sockso.web

Source Code of com.pugh.sockso.web.TracksRequestTest

package com.pugh.sockso.web;

import com.pugh.sockso.Constants;
import com.pugh.sockso.Properties;
import com.pugh.sockso.StringProperties;
import com.pugh.sockso.music.Track;
import com.pugh.sockso.tests.SocksoTestCase;
import com.pugh.sockso.tests.TestDatabase;
import com.pugh.sockso.tests.TestRequest;

import java.util.Arrays;

public class TracksRequestTest extends SocksoTestCase {

    private Properties p;
    private TestDatabase db;
    private TestRequest req;

    @Override
    protected void setUp() {
        p = new StringProperties();
        p.set( Constants.WWW_BROWSE_FOLDERS_ENABLED, Properties.YES );
        db = new TestDatabase();
    }
   
    protected TracksRequest getInstance( final String resource ) throws Exception {
        req = new TestRequest( "GET " +resource+ " HTTP/1.1" );
        db.fixture( "artistsAlbumsAndTracks" );
        return new TracksRequest( req, db, p );
    }

    public void testTracksAreFetchedFromUrlParameters() throws Exception {
        TracksRequest tr = getInstance( "/foo/tr1/tr2" );
        Track[] tracks = tr.getRequestedTracks();
        assertEquals( 2, tracks.length );
    }

    public void testTracksAreFetchedFromThePathArgument() throws Exception {
        TracksRequest tr = getInstance( "/foo?path=%2Fmusic%2Ffolder" );
        Track[] tracks = tr.getRequestedTracks();
        assertEquals( 2, tracks.length );
    }

    public void testPathArgumentIgnoredWhenFolderBrowsingIsNotEnabled() throws Exception {
        p.set( Constants.WWW_BROWSE_FOLDERS_ENABLED, Properties.NO );
        TracksRequest tr = getInstance( "/foo?path=%2Fmusic%2Ffolder" );
        Track[] tracks = tr.getRequestedTracks();
        assertEquals( 0, tracks.length );
     }

    public void testTracksCanBeRandomisedUsingOrderbyParameter() throws Exception {
        assertTrue( doRandomTest("random") );
    }

    public void testTracksNotRandomisedByDefault() throws Exception {
        assertFalse( doRandomTest("") );
    }

    // this method tests randomizing of requested tracks. it tries a maximum of
    // 100 times fetching 2 samples and checking if they're as expected.  this
    // could *possibly* fail, and 100 might need to be increased to provide
    // sufficiently low probability of this (or develop a better way of testing
    // the randomness.
    protected boolean doRandomTest( final String orderBy ) throws Exception {
        boolean wereDifferent = false;
        for ( int i=0; i<100; i++ ) {
            db = new TestDatabase();
            TracksRequest tr = getInstance( "/tr1/tr2/tr3" );
            req.setArgument( "orderBy", orderBy );
            Track[] first = tr.getRequestedTracks();
            Track[] second = tr.getRequestedTracks();
            if ( !Arrays.equals(first,second) ) {
                wereDifferent = true;
            }
        }
        return wereDifferent;
    }

    public void testRandomTracksReturnedUseRandomLimitProperty() throws Exception {
        p.set( Constants.WWW_RANDOM_TRACK_LIMIT, 2 );
        TracksRequest tr = getInstance( "/" );
        Track[] tracks = tr.getRandomTracks();
        assertEquals( 2, tracks.length );
     }

    public void testRandomTracksReturnedUseDefaultLimitWhenNotSpecifiedByAProperty() throws Exception {
        TracksRequest tr = getInstance( "/" );
        Track[] tracks = tr.getRandomTracks();
        assertEquals( 3, tracks.length );
    }

    public void testRandomTracksReturnedCanBeFilteredByType() throws Exception {
        TracksRequest tr = getInstance( "" );
        db.update( " update tracks set path = '/music/track.ogg' where id = 2 " );
        req.setArgument( "trackType", "mp3" );
        Track[] tracks = tr.getRandomTracks();
        assertEquals( 2, tracks.length );
    }
   
}
TOP

Related Classes of com.pugh.sockso.web.TracksRequestTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.