127 lines
4.9 KiB
Ruby
127 lines
4.9 KiB
Ruby
require "spec_helper"
|
|
describe PointGroup do
|
|
let(:device) { FactoryBot.create(:user).device }
|
|
let(:point) do
|
|
Points::Create.run!(x: 0,
|
|
y: 0,
|
|
z: 0,
|
|
device: device,
|
|
pointer_type: "GenericPointer")
|
|
end
|
|
let!(:point_group) do
|
|
PointGroups::Create.run!(device: device,
|
|
name: "test",
|
|
point_ids: [point.id])
|
|
end
|
|
|
|
let(:s1) do
|
|
Sequences::Create.run!(kind: "sequence",
|
|
device: device,
|
|
name: "has parameters",
|
|
args: {
|
|
locals: {
|
|
kind: "scope_declaration",
|
|
args: {},
|
|
body: [
|
|
{
|
|
kind: "parameter_declaration",
|
|
args: {
|
|
label: "parent",
|
|
default_value: {
|
|
kind: "coordinate",
|
|
args: { x: 9, y: 9, z: 9 },
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
body: [
|
|
{
|
|
kind: "move_absolute",
|
|
args: {
|
|
speed: 100,
|
|
location: {
|
|
kind: "identifier",
|
|
args: { label: "parent" },
|
|
},
|
|
offset: {
|
|
kind: "coordinate",
|
|
args: { x: 0, y: 0, z: 0 },
|
|
},
|
|
},
|
|
},
|
|
])
|
|
end
|
|
|
|
it "maintains referential integrity" do
|
|
PointGroupItem.destroy_all
|
|
Point.destroy_all
|
|
expect(PointGroupItem.count).to eq(0)
|
|
Points::Destroy.run!(point: point,
|
|
device: device,
|
|
hard_delete: true)
|
|
expect(PointGroupItem.count).to eq(0)
|
|
end
|
|
|
|
it "refuses to delete groups in-use by sequences" do
|
|
# Create a group and use it in a sequence
|
|
Sequences::Create.run!(name: "Wrapper",
|
|
device: device,
|
|
body: [
|
|
{
|
|
kind: "execute",
|
|
args: {
|
|
sequence_id: s1.fetch(:id),
|
|
},
|
|
body: [
|
|
{
|
|
kind: "parameter_application",
|
|
args: {
|
|
label: "parent",
|
|
data_value: {
|
|
kind: "point_group",
|
|
args: {
|
|
point_group_id: point_group.id,
|
|
},
|
|
},
|
|
},
|
|
body: [],
|
|
},
|
|
],
|
|
|
|
},
|
|
])
|
|
result = PointGroups::Destroy.run(point_group: point_group, device: device)
|
|
error = result.errors.fetch("in_use").message
|
|
expect(error).to eq("Can't delete group because it is in use by sequence 'Wrapper'")
|
|
end
|
|
|
|
it "refuses to delete groups in-use by regimens" do
|
|
point_group.update!(name: "@@@")
|
|
Regimens::Create.run!(name: "Wrapper 26",
|
|
device: device,
|
|
color: "red",
|
|
regimen_items: [],
|
|
body: [
|
|
{
|
|
kind: "parameter_application",
|
|
args: {
|
|
label: "parent",
|
|
data_value: {
|
|
kind: "point_group",
|
|
args: {
|
|
point_group_id: point_group.id,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
])
|
|
result = PointGroups::Destroy.run(point_group: point_group, device: device)
|
|
error = result.errors.fetch("in_use").message
|
|
expect(error).to eq("Can't delete group because it is in use by Regimen 'Wrapper 26'")
|
|
end
|
|
|
|
it "refuses to delete groups in-use by farm events"
|
|
end
|