diff --git a/app/controllers/api/tracks_controller.rb b/app/controllers/api/tracks_controller.rb new file mode 100644 index 0000000..71268a9 --- /dev/null +++ b/app/controllers/api/tracks_controller.rb @@ -0,0 +1,5 @@ +class Api::TracksController < Api::ApplicationController + def index + @tracks = Track.all + end +end diff --git a/app/views/api/tracks/index.rabl b/app/views/api/tracks/index.rabl new file mode 100644 index 0000000..4bb1752 --- /dev/null +++ b/app/views/api/tracks/index.rabl @@ -0,0 +1,6 @@ +collection @tracks + +attribute :id +attribute :name + +node(:sound_url, :if => ->(t) { t.sound? }) { |t| api_sound_url t.sound } diff --git a/config/routes.rb b/config/routes.rb index a4c4137..5938bda 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,7 @@ Scube::Application.routes.draw do namespace :api do resources :sounds, :only => [:show] + resources :tracks, :only => [:index] resources :playlists, :only => [:index, :create] resources :sessions, :only => [:create] diff --git a/spec/controllers/api/tracks_controller_spec.rb b/spec/controllers/api/tracks_controller_spec.rb new file mode 100644 index 0000000..7a8af42 --- /dev/null +++ b/spec/controllers/api/tracks_controller_spec.rb @@ -0,0 +1,37 @@ +require 'spec_helper' + +describe Api::TracksController do + include UserControllerHelpers + + before do + sign_in + end + + describe 'GET index' do + before do + Factory.create(:track_with_sound) + Factory.create(:track_with_sound) + end + + def do_get + get :index, :format => :json + JSON response.body + end + + it 'lists all tracks' do + do_get.should have(2).items + end + + it 'lists tracks with their id' do + do_get.each { |p| p.should include 'id' } + end + + it 'lists tracks with their name' do + do_get.each { |p| p.should include 'name' } + end + + it 'lists tracks with sound URL' do + do_get.each { |p| p.should include 'sound_url' } + end + end +end diff --git a/spec/integration/api/tracks_spec.rb b/spec/integration/api/tracks_spec.rb new file mode 100644 index 0000000..54432c5 --- /dev/null +++ b/spec/integration/api/tracks_spec.rb @@ -0,0 +1,28 @@ +require 'spec_helper' + +feature 'API tracks' do + include UserIntegrationHelpers + + background do + api_sign_in + end + + scenario 'lists tracks' do + track_1 = Factory.create(:track_with_sound, :name => 'Track 1') + track_2 = Factory.create(:track, :name => 'Track 2') + + get api_tracks_path, :format => :json + + response.body.should == [ + { + :id => track_1.id, + :name => 'Track 1', + :sound_url => api_sound_url(track_1.sound) + }, + { + :id => track_2.id, + :name => 'Track 2' + } + ].to_json + end +end