176 lines
6.1 KiB
Ruby
176 lines
6.1 KiB
Ruby
require "spec_helper"
|
|
|
|
describe Api::PointsController do
|
|
include Devise::Test::ControllerHelpers
|
|
describe "#index" do
|
|
let(:device) { FactoryBot.create(:device) }
|
|
let(:user) do
|
|
FactoryBot.create(:user, device: device, password: "password123")
|
|
end
|
|
let(:auth_token) do
|
|
params = { email: user.email,
|
|
password: "password123",
|
|
fbos_version: Gem::Version.new("999.9.9") }
|
|
Auth::CreateToken.run!(params)[:token].encoded
|
|
end
|
|
|
|
it "shows only discarded points" do
|
|
Point.destroy_all
|
|
old = Plant.create!(x: 5,
|
|
y: 5,
|
|
z: 5,
|
|
radius: 50,
|
|
name: "old",
|
|
device: user.device,
|
|
openfarm_slug: "cabbage",
|
|
pointer_type: "Plant",
|
|
discarded_at: Time.now)
|
|
|
|
Plant.create!(x: 5,
|
|
y: 5,
|
|
z: 5,
|
|
radius: 50,
|
|
name: "new",
|
|
device: user.device,
|
|
openfarm_slug: "cabbage",
|
|
pointer_type: "Plant",
|
|
discarded_at: nil)
|
|
SmarfDoc.note("If you want to see previously deleted points, " +
|
|
"add `?filter=old` to the end of the URL.")
|
|
sign_in user
|
|
get :index, params: { filter: "old" }
|
|
expect(response.status).to eq(200)
|
|
expect(json.length).to eq(1)
|
|
expect(json.first[:name]).to eq("old")
|
|
end
|
|
|
|
it "shows active points by default" do
|
|
Point.destroy_all
|
|
old = Plant.create!(x: 5,
|
|
y: 5,
|
|
z: 5,
|
|
radius: 50,
|
|
name: "old",
|
|
device: user.device,
|
|
openfarm_slug: "cabbage",
|
|
pointer_type: "Plant",
|
|
discarded_at: Time.now)
|
|
|
|
Plant.create!(x: 5,
|
|
y: 5,
|
|
z: 5,
|
|
radius: 50,
|
|
name: "new",
|
|
device: user.device,
|
|
openfarm_slug: "cabbage",
|
|
pointer_type: "Plant",
|
|
discarded_at: nil)
|
|
SmarfDoc.note("If you want to see previously deleted points, " +
|
|
"add `?filter=old` to the end of the URL.")
|
|
sign_in user
|
|
get :index, params: {}
|
|
expect(response.status).to eq(200)
|
|
expect(json.length).to eq(1)
|
|
expect(json.first[:name]).to eq("new")
|
|
end
|
|
|
|
it "shows `discarded` and `kept` points" do
|
|
Point.destroy_all
|
|
old = Plant.create!(x: 5,
|
|
y: 5,
|
|
z: 5,
|
|
radius: 50,
|
|
name: "old",
|
|
device: user.device,
|
|
openfarm_slug: "cabbage",
|
|
pointer_type: "Plant",
|
|
discarded_at: Time.now)
|
|
|
|
Plant.create!(x: 5,
|
|
y: 5,
|
|
z: 5,
|
|
radius: 50,
|
|
name: "new",
|
|
device: user.device,
|
|
openfarm_slug: "cabbage",
|
|
pointer_type: "Plant",
|
|
discarded_at: nil)
|
|
SmarfDoc.note("If you want to see previously deleted points alongside" \
|
|
" your active points, add `?filter=all` to the end of " \
|
|
"the URL.")
|
|
sign_in user
|
|
get :index, params: { filter: "all" }
|
|
expect(response.status).to eq(200)
|
|
expect(json.length).to eq(2)
|
|
expect(json.pluck(:name)).to include("old")
|
|
expect(json.pluck(:name)).to include("new")
|
|
end
|
|
|
|
it "lists non-discarded (active) points" do
|
|
sign_in user
|
|
FactoryBot.create_list(:generic_pointer, 3, device: device)
|
|
get :index
|
|
expect(response.status).to eq(200)
|
|
expect(json.length).to eq(3)
|
|
expect(json.first.keys).to include(:x)
|
|
end
|
|
it "lists all plants" do
|
|
Point.destroy_all
|
|
plants = 3.times do |num|
|
|
Plant.create!(x: num,
|
|
y: num,
|
|
z: num,
|
|
radius: 50,
|
|
name: "Cabbage #{num}",
|
|
device: user.device,
|
|
openfarm_slug: "cabbage",
|
|
pointer_type: "Plant")
|
|
end
|
|
sign_in user
|
|
get :index
|
|
expect(response.status).to eq(200)
|
|
expect(json.length).to eq(3)
|
|
json.map { |json| expect(json[:created_at]).to eq(json[:planted_at]) }
|
|
end
|
|
it "lists all tool slots" do
|
|
Point.destroy_all
|
|
sign_in user
|
|
ts = ToolSlot.create!(x: 0,
|
|
y: 0,
|
|
z: 0,
|
|
radius: 50,
|
|
name: "My TS",
|
|
device: user.device,
|
|
pointer_type: "ToolSlot")
|
|
get :index
|
|
expect(json.first[:id]).to eq(ts.id)
|
|
expect(json.first[:name]).to eq(ts.name)
|
|
end
|
|
|
|
it "handles outdated FBOS" do
|
|
old_last_saw_api = user.device.last_saw_api
|
|
ua = "FARMBOTOS/1.1.1 (RPI3) RPI3 (1.1.1)"
|
|
allow(request).to receive(:user_agent).and_return(ua)
|
|
request.env["HTTP_USER_AGENT"] = ua
|
|
sign_in user
|
|
FactoryBot.create_list(:generic_pointer, 1, device: device)
|
|
get :index
|
|
expect(response.status).to eq(426)
|
|
expect(json[:error]).to include("Upgrade to latest FarmBot OS")
|
|
end
|
|
|
|
it "marks device as seen when they download points" do
|
|
old_last_saw_api = user.device.last_saw_api
|
|
ua = "FarmbotOS/7.0.0 (host) host ()"
|
|
allow(request).to receive(:user_agent).and_return(ua)
|
|
request.env["HTTP_USER_AGENT"] = ua
|
|
request.headers["Authorization"] = "bearer #{auth_token}"
|
|
FactoryBot.create_list(:generic_pointer, 1, device: device)
|
|
get :index
|
|
new_last_saw_api = user.device.reload.last_saw_api
|
|
expect(response.status).to eq(200)
|
|
expect(new_last_saw_api).not_to eq(old_last_saw_api)
|
|
end
|
|
end
|
|
end
|