78 lines
3 KiB
Ruby
78 lines
3 KiB
Ruby
|
|
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
|