Farmbot-Web-App/spec/mutations/devices/dump_spec.rb

57 lines
2.0 KiB
Ruby

require "spec_helper"
describe Devices::Dump do
# Resources that I can't easily instantiate via FactoryBot
SPECIAL = [:points, :sequences, :device]
ADDITIONAL = [:plants, :tool_slots, :generic_pointers]
MODEL_NAMES = Devices::Dump::RESOURCES.without(*SPECIAL).concat(ADDITIONAL)
NOPE = "Expected value[%s] to equal %s. Got %s instead"
it "serializes _all_ the data", :slow do
Rails.cache.clear
device = FactoryBot.create(:device)
resources = MODEL_NAMES
.map { |x| x.to_s.singularize.to_sym }
.map { |x| FactoryBot.create_list(x, 4, device: device) }
tools = FactoryBot.create_list(:tool, 3, device: device)
device
.points
.where(pointer_type: "ToolSlot")
.last
.update_attributes(tool_id: tools.last.id)
plant = device
.points
.where(pointer_type: "Plant")
.last
plant.discard
results = Devices::Dump.run!(device: device)
MODEL_NAMES
.concat(SPECIAL)
.without(:device, :plants, :tool_slots, :generic_pointers, :points)
.map do |name|
actual = results[name]
expect(actual).to be
expected = device.send(name).map(&:body_as_json)
if(actual != expected)
tpl = [name, expected, actual]
fail(NOPE % tpl.map{|x| (x).inspect.to_s.first(25) })
end
end
# Tests for a regression noted on 1 may 18:
tool = results[:tools].find { |x| x[:id] == tools.last.id }
expect(tool).to be
expect(tool[:status]).to eq("active")
# Expect archived points to show up.
serialized_plant = \
results[:points].find { |x| x[:id] == plant.id }
expect(serialized_plant).to be
expect(plant.discarded?).to be true
expect(results[:export_created_at]).to be
export_time = Time.parse(results[:export_created_at])
today = Time.now
expect(today - export_time.round).to be < 1
expect(results[:database_schema])
.to eq(ActiveRecord::Migrator.current_version)
expect(results[:server_url]).to eq($API_URL)
end
end