Last few tests for ::Destroy meta classes

pull/915/head
Rick Carlino 2018-07-17 16:38:03 -05:00
parent 24325becde
commit 8d2cdcb09c
3 changed files with 32 additions and 6 deletions

View File

@ -1,5 +1,6 @@
module Resources
class Job < Mutations::Command
NOT_FOUND = "Resource not found"
required do
duck :body, methods: [:[], :[]=]
duck :resource, duck: [:where, :find_by]
@ -31,6 +32,8 @@ module Resources
model_name = resource.model_name
mutation = Kernel.const_get(model_name.name.pluralize)::Destroy
mutation.run!(model_name.singular => model, device: device)
rescue ActiveRecord::RecordNotFound
add_error :resource, :resource, NOT_FOUND
end
def model

View File

@ -22,12 +22,12 @@ class CreateDestroyer < Mutations::Command
end
def resource_name
self.class.resource_name
self.class.resource_name.to_sym
end
required do
model :device, class: Device
model klass.resource_name.to_sym, class: x.resource
model x.resource_name, class: x.resource
end
def validate

View File

@ -1,11 +1,11 @@
require "spec_helper"
describe Resources::Job do
base = { body: {}, action: "destroy", uuid: SecureRandom.uuid }
it "executes deletion for various resources" do
puts "TODO: Test cases for points, sequences."
device = FactoryBot.create(:device)
base = \
{ body: {}, device: device, action: "destroy", uuid: SecureRandom.uuid }
test_cases = [
WebcamFeed,
FarmEvent,
@ -25,7 +25,9 @@ describe Resources::Job do
.each{ |k| k.delete_all }
.map { |k| FactoryBot.create(k.model_name.singular.to_sym, device: device) }
.concat([FakeSequence.create( device: device)])
.map { |r| base.merge({resource: r.class, resource_id: r.id }) }
.map do |r|
base.merge({resource: r.class, resource_id: r.id, device: device})
end
.map do |params|
res = params[:resource]
count = res.count
@ -34,6 +36,27 @@ describe Resources::Job do
end
end
it "doesn't let you delete other people's resources"
it "doesn't let you delete other people's resources" do
device_a = FactoryBot.create(:device)
device_b = FactoryBot.create(:device)
farm_event = FactoryBot.create(:farm_event, device: device_b)
params = base.merge(resource: FarmEvent,
resource_id: farm_event.id,
device: device_a)
result = Resources::Job.run(params)
expect(result.success?).to be false
expect(result.errors.message_list).to include(Resources::Job::NOT_FOUND)
end
it "deals with edge case resource snooping" do
device_a = FactoryBot.create(:device)
device_b = FactoryBot.create(:device)
farm_event = FactoryBot.create(:farm_event, device: device_b)
FD = CreateDestroyer.run!(resource: FarmEvent)
result = FD.run(farm_event: farm_event, device: device_a)
errors = result.errors.message_list
expect(errors).to include("You do not own that farm_event")
end
it "deals with points"
end