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.
117 lines
3.1 KiB
117 lines
3.1 KiB
require 'spec_helper'
|
|
|
|
describe Api::V1::TimeEntriesController do
|
|
render_views
|
|
|
|
describe "#create" do
|
|
|
|
context "as a user" do
|
|
let!(:user){ FactoryGirl.create(:user) }
|
|
|
|
before(:each) do
|
|
sign_in user
|
|
end
|
|
|
|
context "with no time entry in json data" do
|
|
it "returns error status" do
|
|
post :create
|
|
json = JSON.parse(@response.body)
|
|
expect(@response.code.to_i).to eql 422
|
|
end
|
|
|
|
it "returns an error message" do
|
|
post :create
|
|
json = JSON.parse(@response.body)
|
|
expect(json["errors"].first).to eql Api::V1::TimeEntriesController::EXPECTED_TIME_ENTRY
|
|
end
|
|
end
|
|
|
|
context "with valid time entry in json data" do
|
|
|
|
before(:each) do
|
|
time_data = { time_entries: [{
|
|
start_date: Time.zone.now,
|
|
end_date: Time.zone.now + 60,
|
|
log_action_id: 1,
|
|
bike_id: -1,
|
|
description: "My description"}]
|
|
}
|
|
|
|
#this is necessary because render_views does not work with sign_in devise helper
|
|
@submit_json = api_submit_json(user, time_data)
|
|
#not sure why format: :json not working
|
|
request.accept = 'application/json'
|
|
end
|
|
|
|
it "returns 200" do
|
|
post :create, @submit_json
|
|
expect(@response.code.to_i).to eql 200
|
|
end
|
|
|
|
it "returns the created time entry json" do
|
|
post :create, @submit_json
|
|
json = JSON.parse(@response.body)
|
|
expect(json).to have_key("time_entries")
|
|
expect(json.to_s).to include(@submit_json[:time_entries].first[:description])
|
|
end
|
|
end
|
|
|
|
context "with invalid time entry in json data" do
|
|
before(:each) do
|
|
@submit_json = { time_entries: [{
|
|
description: "My description",
|
|
}]}
|
|
end
|
|
|
|
it "returns 422" do
|
|
post :create, @submit_json
|
|
expect(@response.code.to_i).to eql 422
|
|
end
|
|
|
|
it "returns the fields with errors" do
|
|
post :create, @submit_json
|
|
json = JSON.parse(@response.body)
|
|
expect(json).to have_key("errors")
|
|
expect(json.to_s).to include("can't be blank")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#delete" do
|
|
context "as a user" do
|
|
let!(:user){ FactoryGirl.create(:user) }
|
|
|
|
before(:each) do
|
|
sign_in user
|
|
end
|
|
|
|
context "entry does not exist" do
|
|
it "returns 404" do
|
|
delete :delete, id: 9000
|
|
expect(@response.code.to_i).to eql 404
|
|
end
|
|
|
|
it "returns not found" do
|
|
delete :delete, id: 9000
|
|
json = JSON.parse(@response.body)
|
|
expect(json).to have_key("errors")
|
|
expect(json.to_s).to include("not found")
|
|
end
|
|
end
|
|
|
|
context "entry exists" do
|
|
let!(:entry){ FactoryGirl.create(:time_entry) }
|
|
|
|
it "deletes the time entry" do
|
|
expect{delete :delete, id: entry.id}.to change{TimeEntry.count}
|
|
end
|
|
|
|
it "returns 204" do
|
|
delete :delete, id: entry.id
|
|
expect(@response.code.to_i).to eql 204
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|