spec/models/content_spec.rb in alchemy_cms-2.6.3 vs spec/models/content_spec.rb in alchemy_cms-2.7.0

- old
+ new

@@ -1,60 +1,47 @@ require 'spec_helper' +require 'ostruct' module Alchemy describe Content do - - let(:element) { FactoryGirl.create(:element, :name => 'headline', :create_contents_after_create => true) } + let(:element) { FactoryGirl.create(:element, name: 'headline', :create_contents_after_create => true) } let(:content) { element.contents.find_by_essence_type('Alchemy::EssenceText') } it "should return the ingredient from its essence" do content.essence.update_attributes(:body => "Hello") content.ingredient.should == "Hello" end describe '.normalize_essence_type' do - context "passing namespaced essence type" do - it "should not add alchemy namespace" do Content.normalize_essence_type('Alchemy::EssenceText').should == "Alchemy::EssenceText" end - end context "passing not namespaced essence type" do - it "should add alchemy namespace" do Content.normalize_essence_type('EssenceText').should == "Alchemy::EssenceText" end - end - end describe '#normalized_essence_type' do - context "without namespace in essence_type column" do - it "should return the namespaced essence type" do Content.new(:essence_type => 'EssenceText').normalized_essence_type.should == 'Alchemy::EssenceText' end - end context "with namespace in essence_type column" do - it "should return the namespaced essence type" do Content.new(:essence_type => 'Alchemy::EssenceText').normalized_essence_type.should == 'Alchemy::EssenceText' end - end - end describe '#update_essence' do - it "should update the attributes of related essence and return true" do @element = FactoryGirl.create(:element, :name => 'text', :create_contents_after_create => true) @content = @element.contents.first @content.update_essence(:body => 'Mikes Petshop') @content.ingredient.should == "Mikes Petshop" @@ -70,15 +57,13 @@ it "should raise error if essence is missing" do @element = FactoryGirl.create(:element, :name => 'text', :create_contents_after_create => true) @content = @element.contents.first @content.update_essence end - end - describe '#copy' do - + describe '.copy' do before(:each) do @element = FactoryGirl.create(:element, :name => 'text', :create_contents_after_create => true) @content = @element.contents.first end @@ -94,53 +79,150 @@ it "should copy source essence attributes" do copy = Content.copy(@content, {:element_id => @element.id + 1}) copy.essence.body == @content.essence.body end + end + describe '.build' do + let(:element) { FactoryGirl.build_stubbed(:element) } + + it "builds a new instance from elements.yml description" do + Content.build(element, {name: 'headline'}).should be_instance_of(Content) + end end - describe '.create' do - let (:element) { FactoryGirl.create(:element, :name => 'headline') } + describe '.content_description' do + let(:element) { FactoryGirl.build_stubbed(:element) } - context "with default value present" do - before do - element.stub(:content_description_for).and_return({'name' => 'headline', 'type' => 'EssenceText', 'default' => 'Welcome'}) + context "with blank name key" do + it "returns a essence hash build from essence type" do + Content.should_receive(:content_description_from_essence_type).with(element, 'EssenceText') + Content.content_description(element, essence_type: 'EssenceText') end + end + context "with name key present" do + it "returns a essence hash from element" do + Content.should_receive(:content_description_from_element).with(element, 'headline') + Content.content_description(element, name: 'headline') + end + end + end + + describe '.content_description_from_element' do + let(:element) { FactoryGirl.build_stubbed(:element) } + let(:essence) { {name: 'headline', type: 'EssenceText'} } + + it "returns the description hash from element" do + element.should_receive(:content_description_for).and_return(essence) + Content.content_description(element, name: 'headline').should == essence + end + + context "with content description not found" do + before { + element.should_receive(:content_description_for).and_return(nil) + element.should_receive(:available_content_description_for).and_return(essence) + } + + it "returns the description hash from available contents" do + Content.content_description(element, name: 'headline').should == essence + end + end + end + + describe '.content_description_from_essence_type' do + let(:element) { FactoryGirl.build_stubbed(:element) } + + it "returns the description hash from element" do + Content.should_receive(:content_name_from_element_and_essence_type).with(element, 'EssenceText').and_return('Foo') + Content.content_description_from_essence_type(element, 'EssenceText').should == { + 'type' => 'EssenceText', + 'name' => 'Foo' + } + end + end + + describe '.content_name_from_element_and_essence_type' do + let(:element) { FactoryGirl.build_stubbed(:element) } + + it "returns a name from essence type and count of essences in element" do + Content.content_name_from_element_and_essence_type(element, 'EssenceText').should == "essence_text_1" + end + end + + describe '.create_from_scratch' do + let(:element) { FactoryGirl.create(:element, name: 'article') } + + it "builds the content" do + expect(Content.create_from_scratch(element, name: 'headline')).to be_instance_of(Alchemy::Content) + end + + it "creates the essence from name" do + expect(Content.create_from_scratch(element, name: 'headline').essence).to_not be_nil + end + + it "creates the essence from essence_type" do + expect(Content.create_from_scratch(element, essence_type: 'EssenceText').essence).to_not be_nil + end + + context "with default value present" do it "should have the ingredient column filled with default value." do - Content.create_from_scratch(element, :name => 'headline').ingredient.should == "Welcome" + Content.stub(:content_description_from_element).and_return({'name' => 'headline', 'type' => 'EssenceText', 'default' => 'Welcome'}) + content = Content.create_from_scratch(element, name: 'headline') + content.ingredient.should == "Welcome" end end end describe '#ingredient=' do it "should set the given value to the ingredient column of essence" do - c = Content.create_from_scratch(element, :name => 'headline') + c = Content.create_from_scratch(element, name: 'headline') c.ingredient = "Welcome" c.ingredient.should == "Welcome" end context "no essence associated" do - let (:element) { FactoryGirl.create(:element, :name => 'headline') } + let (:element) { FactoryGirl.create(:element, name: 'headline') } it "should raise error" do - c = Content.create(:element_id => element.id, :name => 'headline') + c = Content.create(:element_id => element.id, name: 'headline') expect { c.ingredient = "Welcome" }.to raise_error end end end describe "#descriptions" do - context "without any descriptions in elements.yml file" do before { Element.stub(:descriptions).and_return([]) } it "should return an empty array" do Content.descriptions.should == [] end end + end + describe '#preview_text' do + let(:essence) { mock_model(EssenceText, preview_text: 'Lorem') } + let(:content) { c = Content.new; c.essence = essence; c } + + it "should return the essences preview_text" do + essence.should_receive(:preview_text).with(30) + content.preview_text + end + end + + describe '#tinymce_class_name' do + let(:element) { FactoryGirl.build_stubbed(:element, name: 'article') } + let(:content) { c = Content.new(name: 'text'); c.element = element; c } + subject { content.tinymce_class_name } + + it { eq('default_tinymce') } + + context 'having custom tinymce config' do + before { content.stub(:has_custom_tinymce_config?).and_return(true) } + it('returns name including element name') { eq('custom_tinymce article_text') } + end end end end