First draft of regimen level variables ✔️
parent
11e09800a5
commit
5e3017cc10
|
@ -11,13 +11,11 @@ module Api
|
|||
end
|
||||
|
||||
def create
|
||||
mutate Regimens::Create.run(params.as_json, regimen_params)
|
||||
mutate Regimens::Create.run(raw_json, regimen_params)
|
||||
end
|
||||
|
||||
def update
|
||||
mutate Regimens::Update.run(params.as_json,
|
||||
regimen_params,
|
||||
regimen: the_regimen)
|
||||
mutate Regimens::Update.run(raw_json, regimen_params, regimen: the_regimen)
|
||||
end
|
||||
|
||||
def destroy
|
||||
|
|
|
@ -166,7 +166,7 @@ module CeleryScript
|
|||
raise TypeCheckError, (BAD_LEAF % [ value.kind,
|
||||
value.parent.kind,
|
||||
allowed.inspect,
|
||||
actual.inspect]) unless ok
|
||||
actual.inspect ]) unless ok
|
||||
end
|
||||
|
||||
def bad_body_kind(prnt, child, i, ok)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
module FarmEvents
|
||||
module FragmentHelpers
|
||||
BAD_MODULE = \
|
||||
"The '%s' module cannot use FragmentHelpers"
|
||||
def self.included(base); base.extend(ClassMethods); end
|
||||
module ClassMethods; end
|
||||
|
||||
|
@ -45,10 +47,11 @@ module FarmEvents
|
|||
end
|
||||
|
||||
def owner
|
||||
case self.class.parent.name
|
||||
module_name = self.class.parent.name
|
||||
case module_name
|
||||
when "FarmEvents" then farm_event
|
||||
else
|
||||
binding.pry
|
||||
when "Regimens" then regimen
|
||||
else; raise BAD_MODULE % module_name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
module Regimens
|
||||
class Update < Mutations::Command
|
||||
BAD_RECORD = "Failed to instantiate nested RegimenItem. Offending item: "
|
||||
include FarmEvents::FragmentHelpers
|
||||
using Sequences::CanonicalCeleryHelpers
|
||||
BAD_RECORD = "Failed to instantiate nested RegimenItem. Offending item: "
|
||||
|
||||
required do
|
||||
model :device, class: Device
|
||||
|
@ -24,8 +24,9 @@ module Regimens
|
|||
ActiveRecord::Base.transaction do
|
||||
regimen.regimen_items.destroy_all
|
||||
inputs[:regimen_items].map! do |ri|
|
||||
RegimenItem.new(ri).tap{ |r| r.validate! }
|
||||
RegimenItem.new(ri).tap { |r| r.validate! }
|
||||
end
|
||||
handle_body_field
|
||||
regimen.update_attributes!(inputs.slice(:name, :color, :regimen_items))
|
||||
end
|
||||
end
|
||||
|
|
|
@ -28,7 +28,7 @@ describe Api::RegimensController do
|
|||
regimen_items: [
|
||||
{ time_offset: 100, sequence_id: s.id }
|
||||
] }
|
||||
post :create, params: payload
|
||||
post :create, body: payload.to_json, format: :json
|
||||
expect(response.status).to eq(200)
|
||||
declr = json.fetch(:body).first
|
||||
expect(declr).to be
|
||||
|
@ -51,7 +51,7 @@ describe Api::RegimensController do
|
|||
old_regimen_count = Regimen.count
|
||||
old_item_count = RegimenItem.count
|
||||
|
||||
post :create, params: payload
|
||||
post :create, body: payload.to_json, format: :json
|
||||
|
||||
expect(response.status).to eq(200)
|
||||
expect(Regimen.count).to be > old_regimen_count
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
require 'spec_helper'
|
||||
require "spec_helper"
|
||||
|
||||
describe Api::RegimensController do
|
||||
|
||||
include Devise::Test::ControllerHelpers
|
||||
|
||||
describe '#update' do
|
||||
describe "#update" do
|
||||
let(:user) { FactoryBot.create(:user) }
|
||||
let(:sequence) { FakeSequence.create( device: user.device) }
|
||||
it 'updates an old regimen' do
|
||||
|
||||
it "updates an old regimen" do
|
||||
sign_in user
|
||||
|
||||
existing = Regimens::Create.run!(device: user.device, name: "x", color: "red", regimen_items: [])
|
||||
|
@ -30,14 +31,70 @@ describe Api::RegimensController do
|
|||
}
|
||||
]
|
||||
}
|
||||
put :update, params: payload
|
||||
put :update, body: payload.to_json, params: { id: existing.id }
|
||||
expect(response.status).to eq(200)
|
||||
expect(existing.reload.regimen_items.count).to eq(payload["regimen_items"].length)
|
||||
expect(json[:name]).to eq("something new")
|
||||
expect(existing.name).to eq("something new")
|
||||
end
|
||||
|
||||
it 'catches bad regimen_items' do
|
||||
it "changes variable assignments in `body`" do
|
||||
sequence = FakeSequence.with_parameters
|
||||
user = FactoryBot.create(:user, device: sequence.device)
|
||||
sign_in user
|
||||
|
||||
var_declr = [
|
||||
{
|
||||
kind: "variable_declaration",
|
||||
args: {
|
||||
label: "parent",
|
||||
data_value: {
|
||||
kind: "coordinate",
|
||||
args: { x: 0, y: 0, z: 0 }
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
existing = Regimens::Create.run!(device: user.device,
|
||||
name: "x",
|
||||
color: "red",
|
||||
regimen_items: [],
|
||||
body: var_declr)
|
||||
payload = {
|
||||
id: existing.id,
|
||||
name: "something new",
|
||||
color: "blue",
|
||||
body: [
|
||||
{
|
||||
kind: "variable_declaration",
|
||||
args: {
|
||||
label: "parent",
|
||||
data_value: {
|
||||
kind: "tool",
|
||||
args: {
|
||||
tool_id: FactoryBot.create(:tool, device: sequence.device).id
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
regimen_items: [
|
||||
{
|
||||
time_offset: 950700000,
|
||||
sequence_id: sequence.id
|
||||
}
|
||||
]
|
||||
}
|
||||
put :update,
|
||||
body: payload.to_json,
|
||||
format: :json,
|
||||
params: { id: existing.id }
|
||||
expect(response.status).to eq(200)
|
||||
path = [:body, 0, :args, :data_value, :kind]
|
||||
expect(json.dig(*path)).to eq(payload.dig(*path))
|
||||
end
|
||||
|
||||
it "catches bad regimen_items" do
|
||||
sign_in user
|
||||
existing = Regimens::Create.run!(device: user.device, name: "x", color: "red", regimen_items: [])
|
||||
payload = {
|
||||
|
@ -46,8 +103,7 @@ describe Api::RegimensController do
|
|||
"color" => "blue",
|
||||
"regimen_items" => [ { "time_offset" => 950700000, "sequence_id" => 0 } ]
|
||||
}
|
||||
put :update, params: payload
|
||||
|
||||
put :update, body: payload.to_json, params: { id: existing.id }, format: :json
|
||||
expect(response.status).to eq(422)
|
||||
expect(json[:regimen_items]).to be
|
||||
expect(json[:regimen_items])
|
||||
|
|
Loading…
Reference in New Issue