otwarchive-symphonyarchive/spec/models/skin_parent_spec.rb

78 lines
3 KiB
Ruby
Raw Permalink Normal View History

2026-03-11 22:22:11 +00:00
require 'spec_helper'
describe Skin do
describe "save" do
let(:child_skin) { build(:skin, title: "Child", css: "body {background: #fff;}") }
let(:parent_skin) { build(:skin, title: "Parent", css: "body {color: #000;}") }
let(:skin_parent) { SkinParent.new(child_skin: child_skin, parent_skin: parent_skin, position: 1) }
it "should save a basic parent relationship" do
expect(skin_parent.save).to be_truthy
end
it "should require a position to save" do
skin_parent.position = nil
expect(skin_parent.save).not_to be_truthy
expect(skin_parent.errors[:position]).not_to be_empty
end
it "does not allow a non-existent parent to be used" do
skin_parent.parent_skin = nil
expect(skin_parent.save).not_to be_truthy
expect(skin_parent.errors[:parent_skin]).not_to be_empty
end
it "should not allow using a site skin as parent for a skin unless it has role override" do
parent_skin.role = "site"
parent_skin.save
expect(skin_parent.save).not_to be_truthy
expect(skin_parent.errors[:base]).not_to be_empty
child_skin.role = "override"
child_skin.save
expect(skin_parent.save).to be_truthy
end
it "should not allow a duplicate parent-child relationship" do
skin_parent.save
skin_parent2 = SkinParent.new(child_skin: child_skin, parent_skin: parent_skin, position: 2)
expect(skin_parent2.save).not_to be_truthy
expect(skin_parent2.errors[:base]).not_to be_empty
end
it "should not allow a skin to be its own parent" do
skin_parent.parent_skin = child_skin
expect(skin_parent.save).not_to be_truthy
end
it "should not allow a skin ancestry with an infinite loop in it" do
expect(skin_parent.save).to be_truthy
# first invalid one: parent shouldn't be allowed to have child as parent
own_grandparent = SkinParent.new(child_skin: parent_skin, parent_skin: child_skin, position: 1)
expect(own_grandparent.save).not_to be_truthy
expect(own_grandparent.errors[:base]).not_to be_empty
grandchild_skin = Skin.new(title: "Grandchild", css: "body {color: red;}")
expect(grandchild_skin.save).to be_truthy
skin_parent2 = SkinParent.new(child_skin: grandchild_skin, parent_skin: child_skin, position: 1)
expect(skin_parent2.save).to be_truthy
# grandchild shouldn't be allowed to have grandparent
duplicate_ancestor = SkinParent.new(child_skin: grandchild_skin, parent_skin: parent_skin, position: 2)
expect(duplicate_ancestor.save).not_to be_truthy
expect(duplicate_ancestor.errors[:base]).not_to be_empty
end
it "must not allow the title of a parent skin to be blank" do
blank_parent = Skin.new(title: " ", css: "body {color: #000;}")
blank_parent.save!(validate: false)
child_skin.skin_parents_attributes = [{ parent_skin_title: blank_parent.title, position: 1 }]
child_skin.save!
expect(child_skin.parent_skins).to be_empty
end
end
end