Add update actipon and tests
parent
614f2729f9
commit
79d447191e
|
@ -19,7 +19,7 @@ private
|
|||
|
||||
def mutate(outcome, options = {})
|
||||
if outcome.success?
|
||||
render options.merge(json: outcome)
|
||||
render options.merge(json: outcome.result)
|
||||
else
|
||||
render options.merge(json: outcome.errors.message, status: 422)
|
||||
end
|
||||
|
|
|
@ -13,6 +13,10 @@ module Api
|
|||
end
|
||||
end
|
||||
|
||||
def update
|
||||
mutate Steps::Update.run(params: params, step: step)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def sequence
|
||||
|
|
|
@ -4,7 +4,7 @@ module Steps
|
|||
|
||||
required do
|
||||
string :message_type, in: Step::MESSAGE_TYPES
|
||||
model :sequence
|
||||
model :sequence, class: Sequence
|
||||
hash :command do
|
||||
model :*, class: Object
|
||||
end
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
module Steps
|
||||
class Update < Mutations::Command
|
||||
using MongoidRefinements
|
||||
|
||||
required do
|
||||
model :step, class: Step
|
||||
hash :params do
|
||||
optional do
|
||||
string :message_type, in: Step::MESSAGE_TYPES
|
||||
hash :command do
|
||||
model :*, class: Object
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def execute
|
||||
# FIXME: Right now, we do almost 0 validation on command objects.
|
||||
# There are 7 different command types, with different validation rules.
|
||||
# Maybe:
|
||||
# 1. Create a StepValidatorFactory
|
||||
# 2. Create a SingleCommandValidator, ReadStatusValidator, etc.
|
||||
update(step, params)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,4 +1,3 @@
|
|||
class StepSerializer < ActiveModel::Serializer
|
||||
attributes :_id
|
||||
|
||||
attributes :_id, :message_type, :command
|
||||
end
|
||||
|
|
|
@ -4,7 +4,7 @@ Dss::Application.routes.draw do
|
|||
namespace :api, defaults: {format: :json} do
|
||||
resources :devices, only: [:index, :destroy, :create, :update]
|
||||
resources :sequences, only: [:create, :destroy] do
|
||||
resources :steps, only: [:create, :destroy]
|
||||
resources :steps, only: [:create, :update, :destroy]
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -21,5 +21,14 @@ module MongoidRefinements
|
|||
model.errors.messages
|
||||
end
|
||||
end
|
||||
|
||||
# See documentation for `create()`.
|
||||
def update(model, inputs = {})
|
||||
if model.update_attributes(inputs)
|
||||
model
|
||||
else
|
||||
model.errors.messages
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Api::StepsController do
|
||||
|
||||
include Devise::TestHelpers
|
||||
|
||||
describe '#update' do
|
||||
let(:sequence) { FactoryGirl.create(:sequence) }
|
||||
let(:step) { sequence.steps[0] }
|
||||
let(:user) { sequence.user }
|
||||
|
||||
it 'updates a step' do
|
||||
sign_in user
|
||||
params = { id: step._id.to_s,
|
||||
sequence_id: sequence._id.to_s,
|
||||
message_type: 'read_status'}
|
||||
patch :update, params
|
||||
expect(response.status).to eq(200)
|
||||
expect(step.reload.message_type).to eq("read_status")
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue