Test coverage back up to 100%
parent
1e5dfa814f
commit
c2caf8e432
|
@ -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
|
||||
|
|
|
@ -10,7 +10,6 @@ class User
|
|||
|
||||
field :email, type: String, default: ""
|
||||
validates_uniqueness_of :email
|
||||
validates_presence_of :email
|
||||
|
||||
has_many :sequences
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue