Test coverage back up to 100%

pull/131/head
Rick Carlino 2015-01-28 08:44:54 -06:00
parent 1e5dfa814f
commit c2caf8e432
11 changed files with 147 additions and 5 deletions

View File

@ -1,5 +1,6 @@
module Api
class SequencesController < Api::AbstractController
# TODO add user authorization maybe (privacy)
def index
render json: Sequence.where(user: current_user)
end

View File

@ -10,7 +10,6 @@ class User
field :email, type: String, default: ""
validates_uniqueness_of :email
validates_presence_of :email
has_many :sequences

View File

@ -28,8 +28,9 @@ module MongoidRefinements
if model.update_attributes(inputs)
model
else
# TODO test this
add_error klass.to_s.downcase.to_sym, :invalid, model.errors.messages
add_error model.class.to_s.downcase.to_sym,
:invalid,
model.errors.messages
false
end
end

View File

@ -21,5 +21,20 @@ describe Api::SequencesController do
post :create, input
expect(response.status).to eq(200)
end
it 'handles invalid params' do
# Needed to test the `else` branch of mutate() somewhere
sign_in user
input = { steps: [{ message_type: 'move_rel',
command: { action: 'MOVE RELATIVE',
x: 1,
y: 2,
z: 3,
speed: 100,
delay: 0} }] }
post :create, input
expect(response.status).to eq(422)
expect(json[:name]).to eq("Name is required")
end
end
end

View File

@ -0,0 +1,24 @@
require 'spec_helper'
describe Api::SequencesController do
include Devise::TestHelpers
describe '#index' do
let(:user) { FactoryGirl.create(:user) }
it 'lists all sequences for a user' do
sign_in user
sequences = FactoryGirl
.create_list(:sequence, 2, user: user)
.map(&:id)
.map(&:to_s)
.sort
get :index
expect(response.status).to eq(200)
expect(json.length).to eq(2)
expect(json.map{ |s| s[:_id] }.sort).to eq(sequences)
end
end
end

View File

@ -0,0 +1,19 @@
require 'spec_helper'
describe Api::SequencesController do
include Devise::TestHelpers
describe '#show' do
let(:user) { FactoryGirl.create(:user) }
it 'shows sequence' do
sign_in user
id = FactoryGirl.create(:sequence, user: user)._id.to_s
get :show, id: id
expect(response.status).to eq(200)
expect(json[:_id]).to eq(id)
end
end
end

View File

@ -0,0 +1,29 @@
require 'spec_helper'
describe Api::SequencesController do
include Devise::TestHelpers
describe '#update' do
let(:user) { FactoryGirl.create(:user) }
it 'updates existing sequences' do
sign_in user
sequence = FactoryGirl.create(:sequence, user: user)
input = { id: sequence._id.to_s,
sequence: { name: "Scare Birds",
steps: [{ message_type: 'move_rel',
command: { action: 'MOVE RELATIVE',
x: 1,
y: 2,
z: 3,
speed: 100,
delay: 0} }] } }
patch :update, input
expect(response.status).to eq(200)
sequence.reload
expect(sequence.name).to eq(input[:sequence][:name])
end
end
end

View File

@ -28,5 +28,16 @@ describe Api::StepsController do
expect(response.body).to include("Can't find Step(s)")
expect(response.body).to include('0000000000')
end
it 'cannot delete other peoples steps' do
other_guy = FactoryGirl.create(:user)
sign_in other_guy
input = { sequence_id: sequence._id.to_s,
id: step._id.to_s }
unchanged = sequence.steps.count
delete :destroy, input
expect(response.status).to eq(403)
expect(sequence.reload.steps.count).to eq(unchanged)
end
end
end

View File

@ -13,7 +13,7 @@ describe Api::StepsController do
sign_in user
params = { id: step._id.to_s,
sequence_id: sequence._id.to_s,
message_type: 'read_status' }
step: { message_type: 'read_status' } }
patch :update, params
expect(response.status).to eq(200)
expect(step.reload.message_type).to eq('read_status')

View File

@ -9,6 +9,12 @@ module Helpers
end
def json
JSON.parse(response.body).map(&:deep_symbolize_keys!)
json = JSON.parse(response.body)
if json.is_a?(Array)
json.map(&:deep_symbolize_keys!)
else
json.deep_symbolize_keys!
end
end
end

View File

@ -0,0 +1,37 @@
class TestCreateMutation < Mutations::Command
using MongoidRefinements
def execute
create(User, {})
end
end
class TestUpdateMutation < Mutations::Command
using MongoidRefinements
required do
model :user, class: User
end
def execute
update_attributes user, email: nil
end
end
RSpec.describe MongoidRefinements do
describe '#create' do
it 'catches model errors' do
mutation = TestCreateMutation.run({})
expect(mutation.success?).to be_falsey
email_error = mutation.errors.message[:user][:email]
expect(email_error).to include("can't be blank")
end
end
describe '#update' do
it 'catches model errors' do
mutation = TestUpdateMutation.run(user: FactoryGirl.create(:user))
expect(mutation.success?).to be_falsey
email_error = mutation.errors.message[:user][:email]
expect(email_error).to include("can't be blank")
end
end
end