Last few tests for ::Destroy meta classes
parent
24325becde
commit
8d2cdcb09c
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue