1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
require_relative "spec_helper"
describe Sequel::Model, "Subclasses plugin" do
before do
@c = Class.new(Sequel::Model)
@c.plugin :subclasses
end
it "#subclasses should record direct subclasses of the given model" do
@c.subclasses.must_equal []
sc1 = Class.new(@c)
@c.subclasses.must_equal [sc1]
sc1.subclasses.must_equal []
sc2 = Class.new(@c)
@c.subclasses.must_equal [sc1, sc2]
sc1.subclasses.must_equal []
sc2.subclasses.must_equal []
ssc1 = Class.new(sc1)
@c.subclasses.must_equal [sc1, sc2]
sc1.subclasses.must_equal [ssc1]
sc2.subclasses.must_equal []
end
it "#descendents should record all descendent subclasses of the given model" do
@c.descendents.must_equal []
sc1 = Class.new(@c)
@c.descendents.must_equal [sc1]
sc1.descendents.must_equal []
sc2 = Class.new(@c)
@c.descendents.must_equal [sc1, sc2]
sc1.descendents.must_equal []
sc2.descendents.must_equal []
ssc1 = Class.new(sc1)
@c.descendents.must_equal [sc1, ssc1, sc2]
sc1.descendents.must_equal [ssc1]
sc2.descendents.must_equal []
ssc1.descendents.must_equal []
sssc1 = Class.new(ssc1)
@c.descendents.must_equal [sc1, ssc1, sssc1, sc2]
sc1.descendents.must_equal [ssc1, sssc1]
sc2.descendents.must_equal []
ssc1.descendents.must_equal [sssc1]
sssc1.descendents.must_equal []
end
it "#freeze_descendents should finalize the associations for all descendents" do
sc1 = Class.new(@c)
sc1.set_dataset :bars
sc1.set_primary_key :foo
sc2 = Class.new(@c)
sc2.set_dataset :bazs
sc2.many_to_one :bar, :class=>sc1
@c.freeze_descendents
sc1.frozen?.must_equal true
sc2.frozen?.must_equal true
sc2.association_reflection(:bar)[:primary_key].must_equal :foo
end
it "plugin block should be called with each subclass created" do
c = Class.new(Sequel::Model)
a = []
c.plugin(:subclasses){|sc| a << sc}
sc1 = Class.new(c)
a.must_equal [sc1]
sc2 = Class.new(c)
a.must_equal [sc1, sc2]
sc3 = Class.new(sc1)
a.must_equal [sc1, sc2, sc3]
sc4 = Class.new(sc3)
a.must_equal [sc1, sc2, sc3, sc4]
end
end
|