Skip to content

Instantly share code, notes, and snippets.

@pedrosmmoreira
Created May 7, 2014 13:46
Show Gist options
  • Save pedrosmmoreira/f27fb0da654264fe69f8 to your computer and use it in GitHub Desktop.
Save pedrosmmoreira/f27fb0da654264fe69f8 to your computer and use it in GitHub Desktop.
request spec
require 'spec_helper'
describe 'GET /v1/projects' do
it 'returns a list of all projects' do
projects = create_list :project, 2
get "/v1/projects"
expect(response_json).to eq(
'projects' => [{
'id' => projects.first.id,
'name' => projects.first.name,
'started_at' => projects.first.started_at.iso8601(3),
'ended_at' => projects.first.ended_at
},
{
'id' => projects.second.id,
'name' => projects.second.name,
'started_at' => projects.second.started_at.iso8601(3),
'ended_at' => projects.first.ended_at
}
])
end
end
describe 'GET /v1/projects/:id' do
it 'returns a project by id' do
project = create :project
get "/v1/projects/#{project.id}"
expect(response_json).to eq(
{
'id' => project.id,
'name' => project.name,
'started_at' => project.started_at.iso8601(3),
'ended_at' => project.ended_at
}
)
end
end
describe 'POST /v1/projects' do
it 'saves the name and started_at date for the project' do
post '/v1/projects', {
name: 'Post test project'
}.to_json, { 'Content-Type' => 'application/json' }
project = Project.last
expect(response_json).to eq({'id' => project.id})
expect(project.name).to eq 'Post test project'
expect(project.started_at).to_not be nil
end
it 'returns an error message when invalid' do
post '/v1/projects', {}.to_json, { 'Content-Type' => 'application/json' }
expect(response_json).to eq({
'message' => 'Validation failed',
'errors' => [
"Name can't be blank"
]
})
expect(response.code.to_i).to eq 422
end
end
describe 'PATCH /v1/projects/:id' do
it 'updates the project attributes' do
project = create :project, name: 'Old project name'
new_project_name = 'New project name'
patch "v1/projects/#{project.id}", {
name: new_project_name,
started_at: project.started_at
}.to_json, { 'Content-Type' => 'application/json' }
project = Project.last
expect(project.name).to eq new_project_name
expect(response_json).to eq({'id' => project.id})
end
it 'returns an error message when invalid' do
project = create :project, name: 'Old project name'
patch "v1/projects/#{project.id}", {
name: nil,
started_at: project.started_at
}.to_json, { 'Content-Type' => 'application/json' }
project = Project.last
expect(project.name).not_to be nil
expect(response_json).to eq({
'message' => 'Update failed',
'errors' => [
"Name can't be blank"
]
})
expect(response.code.to_i).to eq 422
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment