mirror of https://github.com/fspc/BikeShed-1.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.8 KiB
100 lines
2.8 KiB
require 'spec_helper'
|
|
|
|
describe Api::V1::TasksController do
|
|
render_views
|
|
|
|
describe "#update" do
|
|
context "as a user with a bike" do
|
|
before(:each) do
|
|
@user = FactoryGirl.create(:user_with_bike)
|
|
sign_in @user
|
|
end
|
|
|
|
context "with no tasks in json data" do
|
|
it "returns 400" do
|
|
put :update
|
|
expect(@response.code.to_i).to eql 422
|
|
end
|
|
|
|
it "returns an error message" do
|
|
put :update
|
|
json = JSON.parse(@response.body)
|
|
expect(json["errors"].first).to eql Api::V1::TasksController::EXPECTED_TASKS
|
|
end
|
|
end
|
|
|
|
context "with non existing task in data" do
|
|
before(:each) do
|
|
@submit_json = { tasks: [
|
|
{ id: 9999, done: false },
|
|
]}
|
|
end
|
|
|
|
it "returns 404" do
|
|
put :update, @submit_json
|
|
expect(@response.code.to_i).to eql 404
|
|
end
|
|
|
|
it "returns an error message" do
|
|
put :update, @submit_json
|
|
json = JSON.parse(@response.body)
|
|
expect(json["errors"].to_s).to include(Api::V1::TasksController::NOT_FOUND)
|
|
end
|
|
end
|
|
|
|
context "with valid tasks json data" do
|
|
before(:each) do
|
|
@task = FactoryGirl.create(:task, done: false, task_list_id: @user.bike.task_list.id)
|
|
task_data = { tasks: [
|
|
{ id: @task.id, done: true},
|
|
]}
|
|
#this is necessary because render_views does not work with sign_in devise helper
|
|
@submit_json = api_submit_json(@user, task_data)
|
|
#not sure why format: :json not working
|
|
request.accept = 'application/json'
|
|
end
|
|
|
|
it "returns 200" do
|
|
put :update, @submit_json
|
|
expect(@response.code.to_i).to eql 200
|
|
end
|
|
|
|
it "returns the updated task json" do
|
|
put :update, @submit_json
|
|
json = JSON.parse(@response.body)
|
|
expect(json).to have_key("tasks")
|
|
expect(json.to_s).to include(Task.find_by_id(@task.id).done.to_s)
|
|
end
|
|
|
|
it "updates the task" do
|
|
expect{put :update, @submit_json}.
|
|
to change{ Task.find_by_id(@task.id).done }.
|
|
from(false).to(true)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "as a user without a bike" do
|
|
before(:each) do
|
|
@user = FactoryGirl.create(:user, bike_id: nil)
|
|
sign_in @user
|
|
|
|
task = FactoryGirl.create(:task)
|
|
@submit_json = { tasks: [
|
|
{ id: task.id, done: false },
|
|
]}
|
|
end
|
|
|
|
it "should return 403" do
|
|
put :update, @submit_json
|
|
expect(@response.code.to_i).to eql 403
|
|
end
|
|
|
|
it "returns an error message" do
|
|
put :update, @submit_json
|
|
json = JSON.parse(@response.body)
|
|
expect(json["errors"].to_s).to include(Api::V1::TasksController::CANNOT_MANAGE)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|