require 'spec_helper' module Landable describe HasTemplates do before(:each) { create_list :template, 3 } let(:templates) { Landable::Template.last(3) } let(:subject) { build :page, { body: "
{% template #{templates[0].slug} %}
{% template #{templates[1].slug} %}
{% template #{templates[2].slug} %}
" } } describe '#templates' do it 'should return templates' do slugs = [templates[0].slug, templates[1].slug, templates[2].slug] subject.templates.should == Landable::Template.where(slug: slugs) end end describe '#template_names' do it 'should pull template slugs out of the body' do subject.template_names.sort.should == templates.map(&:slug).uniq.sort end end describe '#save_templates!' do it 'should save the templates' do assets_double = double() subject.should_receive(:templates) { assets_double } subject.should_receive(:templates=).with(assets_double) subject.save_templates! end it 'should be called during save' do subject.should_receive :save_templates! subject.save! end end describe 'body=' do it 'should reset the template_slug cache, then set the body' do subject.instance_eval { @template_slug = 'foo' } subject.body = 'bar' subject.body.should == 'bar' subject.instance_eval { @template_slug }.should be_nil subject.templates.should == [] end end describe '#templates_join_table_name' do it 'should generate the correct join_table, and then apologize for doing so' do Page.send(:templates_join_table_name).should == "#{Landable.configuration.database_schema_prefix}landable.page_templates" end end end end