Add track/{new,create} with file upload for the track
This commit is contained in:
@@ -14,4 +14,58 @@ describe TracksController do
|
||||
assigns[:track].should == track
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET new' do
|
||||
it 'assigns a new track as @track' do
|
||||
get :new
|
||||
assigns[:track].should be_a_new(Track)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST create' do
|
||||
let(:track) { mock_model(Track).as_null_object }
|
||||
before { Track.stub(:new).and_return(track) }
|
||||
|
||||
it 'creates a new track' do
|
||||
Track.should_receive(:new).
|
||||
with(:name => 'Mega song').
|
||||
and_return(track)
|
||||
post :create, :track => valid_attributes
|
||||
end
|
||||
|
||||
it 'saves the track' do
|
||||
track.should_receive(:save)
|
||||
post :create, :track => {}
|
||||
end
|
||||
|
||||
it 'saves the file uploaded for the track' do
|
||||
file = mock(Rack::Test::UploadedFile)
|
||||
track.should_receive(:uploaded_file=).with(file)
|
||||
post :create, :track => { :file => file }
|
||||
end
|
||||
|
||||
context 'when the track saves successfully' do
|
||||
it 'redirects to the track page' do
|
||||
post :create, :track => valid_attributes
|
||||
response.should redirect_to(track)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the track fails to save' do
|
||||
before do
|
||||
track.stub(:save).and_return(false)
|
||||
end
|
||||
|
||||
it 'assigns the track as @track' do
|
||||
post :create, :track => {}
|
||||
assigns[:track].should == track
|
||||
end
|
||||
|
||||
it 'renders the new template' do
|
||||
post :create, :track => {}
|
||||
response.should render_template('new')
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
BIN
spec/fixtures/test.mp3
vendored
Normal file
BIN
spec/fixtures/test.mp3
vendored
Normal file
Binary file not shown.
@@ -15,4 +15,24 @@ describe Track do
|
||||
|
||||
it { should_not be_valid }
|
||||
end
|
||||
|
||||
describe '#uploaded_file=' do
|
||||
let(:track) { Track.new :name => 'Mega song' }
|
||||
|
||||
it 'saves an uploaded file' do
|
||||
filepath = "#{Rails.root}/spec/fixtures/test.mp3"
|
||||
file = mock(Rack::Test::UploadedFile)
|
||||
file.stub(
|
||||
:tempfile => File.new(filepath),
|
||||
:content_type => 'audio/mpeg'
|
||||
)
|
||||
track.uploaded_file = file
|
||||
track.save
|
||||
File.read("#{Rails.root}/data/tracks/#{track.id.to_s}").should == File.read(filepath)
|
||||
end
|
||||
|
||||
after do
|
||||
`rm -rf #{Rails.root}/data/tracks/*`
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@@ -21,4 +21,9 @@ describe 'playlists/index.html.haml' do
|
||||
render
|
||||
rendered.should have_selector('a', :text => 'Electro')
|
||||
end
|
||||
|
||||
it 'displays a link to create a new track' do
|
||||
render
|
||||
rendered.should have_selector('a', :text => 'Add a track')
|
||||
end
|
||||
end
|
||||
|
35
spec/views/tracks/new.html.haml_spec.rb
Normal file
35
spec/views/tracks/new.html.haml_spec.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'tracks/new.html.haml' do
|
||||
let(:track) do
|
||||
mock_model('Track').as_new_record.as_null_object
|
||||
end
|
||||
|
||||
before do
|
||||
assign :track, track
|
||||
end
|
||||
|
||||
it 'renders a form to create a track' do
|
||||
render
|
||||
rendered.should have_selector("form[method=post][action='#{tracks_path}']")
|
||||
rendered.should have_selector('input[type=submit]')
|
||||
end
|
||||
|
||||
it 'renders a text field with a label for the playlists name' do
|
||||
track.stub(:name => 'Mega song')
|
||||
render
|
||||
rendered.should \
|
||||
have_selector("input[type=text][name='track[name]'][value='Mega song']")
|
||||
rendered.should \
|
||||
have_selector('label[for=track_name]', :text => 'Name')
|
||||
end
|
||||
|
||||
it 'renders a file field with a label for the tracks file' do
|
||||
render
|
||||
rendered.should have_selector("form[enctype='multipart/form-data']")
|
||||
rendered.should \
|
||||
have_selector("input[type=file][name='track[file]']")
|
||||
rendered.should \
|
||||
have_selector('label[for=track_file]', :text => 'File')
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user