spec/nanoc/base/entities/action_sequence_spec.rb in nanoc-4.7.7 vs spec/nanoc/base/entities/action_sequence_spec.rb in nanoc-4.7.8

- old
+ new

@@ -1,19 +1,28 @@ describe Nanoc::Int::ActionSequence do - let(:action_sequence) { described_class.new(rep) } - let(:rep) { double(:rep) } + let(:action_sequence) { raise 'override me' } + let(:item) { Nanoc::Int::Item.new('foo', {}, '/foo.md') } + let(:rep) { Nanoc::Int::ItemRep.new(item, :default) } + describe '#size' do subject { action_sequence.size } context 'no actions' do + let(:action_sequence) do + described_class.build(rep) do |b| + end + end + it { is_expected.to eql(0) } end context 'some actions' do - before do - action_sequence.add_filter(:foo, {}) + let(:action_sequence) do + described_class.build(rep) do |b| + b.add_filter(:foo, {}) + end end it { is_expected.to eql(1) } end end @@ -21,87 +30,109 @@ describe '#[]' do subject { action_sequence[index] } let(:index) { 0 } context 'no actions' do + let(:action_sequence) do + described_class.build(rep) do |b| + end + end + it { is_expected.to be_nil } end context 'some actions' do - before do - action_sequence.add_filter(:foo, {}) + let(:action_sequence) do + described_class.build(rep) do |b| + b.add_filter(:foo, {}) + end end it { is_expected.to be_a(Nanoc::Int::ProcessingActions::Filter) } end end describe '#add_filter' do - example do - action_sequence.add_filter(:foo, donkey: 123) + let(:action_sequence) do + described_class.build(rep) do |b| + b.add_filter(:foo, donkey: 123) + end + end + example do expect(action_sequence.size).to eql(1) expect(action_sequence[0]).to be_a(Nanoc::Int::ProcessingActions::Filter) expect(action_sequence[0].filter_name).to eql(:foo) expect(action_sequence[0].params).to eql(donkey: 123) end end describe '#add_layout' do - example do - action_sequence.add_layout('/foo.*', donkey: 123) + let(:action_sequence) do + described_class.build(rep) do |b| + b.add_layout('/foo.*', donkey: 123) + end + end + example do expect(action_sequence.size).to eql(1) expect(action_sequence[0]).to be_a(Nanoc::Int::ProcessingActions::Layout) expect(action_sequence[0].layout_identifier).to eql('/foo.*') expect(action_sequence[0].params).to eql(donkey: 123) end end describe '#add_snapshot' do context 'snapshot does not yet exist' do - example do - action_sequence.add_snapshot(:before_layout, '/foo.md') + let(:action_sequence) do + described_class.build(rep) do |b| + b.add_snapshot(:before_layout, '/foo.md') + end + end + example do expect(action_sequence.size).to eql(1) expect(action_sequence[0]).to be_a(Nanoc::Int::ProcessingActions::Snapshot) expect(action_sequence[0].snapshot_names).to eql([:before_layout]) expect(action_sequence[0].paths).to eql(['/foo.md']) end end context 'snapshot already exist' do - before do - action_sequence.add_snapshot(:before_layout, '/bar.md') - end - it 'raises' do - expect { action_sequence.add_snapshot(:before_layout, '/foo.md') } - .to raise_error(Nanoc::Int::Errors::CannotCreateMultipleSnapshotsWithSameName) + described_class.build(rep) do |b| + b.add_snapshot(:before_layout, '/bar.md') + expect { b.add_snapshot(:before_layout, '/foo.md') } + .to raise_error(Nanoc::Int::Errors::CannotCreateMultipleSnapshotsWithSameName) + end end end end describe '#each' do - before do - action_sequence.add_filter(:erb, awesomeness: 'high') - action_sequence.add_snapshot(:bar, '/foo.md') - action_sequence.add_layout('/default.erb', somelayoutparam: 'yes') + let(:action_sequence) do + described_class.build(rep) do |b| + b.add_filter(:erb, awesomeness: 'high') + b.add_snapshot(:bar, '/foo.md') + b.add_layout('/default.erb', somelayoutparam: 'yes') + end end example do actions = [] action_sequence.each { |a| actions << a } expect(actions.size).to eq(3) end end describe '#map' do - before do - action_sequence.add_filter(:erb, awesomeness: 'high') - action_sequence.add_snapshot(:bar, '/foo.md') - action_sequence.add_layout('/default.erb', somelayoutparam: 'yes') + let(:action_sequence) do + described_class.build(rep) do |b| + b.add_filter(:erb, awesomeness: 'high') + b.add_snapshot(:bar, '/foo.md') + b.add_layout('/default.erb', somelayoutparam: 'yes') + end end example do res = action_sequence.map { Nanoc::Int::ProcessingActions::Filter.new(:donkey, {}) } expect(res.to_a.size).to eq(3) @@ -110,14 +141,16 @@ end describe '#serialize' do subject { action_sequence.serialize } - before do - action_sequence.add_filter(:erb, awesomeness: 'high') - action_sequence.add_snapshot(:bar, '/foo.md') - action_sequence.add_layout('/default.erb', somelayoutparam: 'yes') + let(:action_sequence) do + described_class.build(rep) do |b| + b.add_filter(:erb, awesomeness: 'high') + b.add_snapshot(:bar, '/foo.md') + b.add_layout('/default.erb', somelayoutparam: 'yes') + end end example do expect(subject).to eql( [ @@ -128,12 +161,10 @@ ) end end describe '#snapshots_defs' do - subject { action_sequence.snapshots_defs } - let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo.md') } let(:rep) { Nanoc::Int::ItemRep.new(item, :default) } Class.new(Nanoc::Filter) do identifier :RuleMemSpec_filter_b2b @@ -162,81 +193,103 @@ def run(content, params = {}); end end it 'has no snapshot defs by default' do - expect(subject).to be_empty + action_sequence = + described_class.build(rep) do |b| + end + + expect(action_sequence.snapshots_defs).to be_empty end context 'textual item' do let(:item) { Nanoc::Int::Item.new('asdf', {}, '/foo.md') } it 'generates initial textual snapshot def' do - action_sequence.add_snapshot(:giraffe, nil) + action_sequence = + described_class.build(rep) do |b| + b.add_snapshot(:giraffe, nil) + end - expect(subject.size).to eq(1) - expect(subject[0].name).to eq(:giraffe) - expect(subject[0]).not_to be_binary + expect(action_sequence.snapshots_defs.size).to eq(1) + expect(action_sequence.snapshots_defs[0].name).to eq(:giraffe) + expect(action_sequence.snapshots_defs[0]).not_to be_binary end it 'generated follow-up textual snapshot def if previous filter is textual' do - action_sequence.add_snapshot(:giraffe, nil) - action_sequence.add_filter(:RuleMemSpec_filter_t2t, arguments: 'irrelevant') - action_sequence.add_snapshot(:zebra, nil) + action_sequence = + described_class.build(rep) do |b| + b.add_snapshot(:giraffe, nil) + b.add_filter(:RuleMemSpec_filter_t2t, arguments: 'irrelevant') + b.add_snapshot(:zebra, nil) + end - expect(subject.size).to eq(2) - expect(subject[0].name).to eq(:giraffe) - expect(subject[0]).not_to be_binary - expect(subject[1].name).to eq(:zebra) - expect(subject[1]).not_to be_binary + expect(action_sequence.snapshots_defs.size).to eq(2) + expect(action_sequence.snapshots_defs[0].name).to eq(:giraffe) + expect(action_sequence.snapshots_defs[0]).not_to be_binary + expect(action_sequence.snapshots_defs[1].name).to eq(:zebra) + expect(action_sequence.snapshots_defs[1]).not_to be_binary end it 'generated follow-up binary snapshot def if previous filter is text-to-bianry' do - action_sequence.add_snapshot(:giraffe, nil) - action_sequence.add_filter(:RuleMemSpec_filter_t2b, arguments: 'irrelevant') - action_sequence.add_snapshot(:zebra, nil) + action_sequence = + described_class.build(rep) do |b| + b.add_snapshot(:giraffe, nil) + b.add_filter(:RuleMemSpec_filter_t2b, arguments: 'irrelevant') + b.add_snapshot(:zebra, nil) + end - expect(subject.size).to eq(2) - expect(subject[0].name).to eq(:giraffe) - expect(subject[0]).not_to be_binary - expect(subject[1].name).to eq(:zebra) - expect(subject[1]).to be_binary + expect(action_sequence.snapshots_defs.size).to eq(2) + expect(action_sequence.snapshots_defs[0].name).to eq(:giraffe) + expect(action_sequence.snapshots_defs[0]).not_to be_binary + expect(action_sequence.snapshots_defs[1].name).to eq(:zebra) + expect(action_sequence.snapshots_defs[1]).to be_binary end end context 'binary item' do let(:item) { Nanoc::Int::Item.new(Nanoc::Int::BinaryContent.new('/asdf.dat'), {}, '/foo.md') } it 'generates initial binary snapshot def' do - action_sequence.add_snapshot(:giraffe, nil) + action_sequence = + described_class.build(rep) do |b| + b.add_snapshot(:giraffe, nil) + end - expect(subject.size).to eq(1) - expect(subject[0].name).to eq(:giraffe) - expect(subject[0]).to be_binary + expect(action_sequence.snapshots_defs.size).to eq(1) + expect(action_sequence.snapshots_defs[0].name).to eq(:giraffe) + expect(action_sequence.snapshots_defs[0]).to be_binary end it 'generated follow-up binary snapshot def if previous filter is binary' do - action_sequence.add_snapshot(:giraffe, nil) - action_sequence.add_filter(:RuleMemSpec_filter_b2b, arguments: 'irrelevant') - action_sequence.add_snapshot(:zebra, nil) + action_sequence = + described_class.build(rep) do |b| + b.add_snapshot(:giraffe, nil) + b.add_filter(:RuleMemSpec_filter_b2b, arguments: 'irrelevant') + b.add_snapshot(:zebra, nil) + end - expect(subject.size).to eq(2) - expect(subject[0].name).to eq(:giraffe) - expect(subject[0]).to be_binary - expect(subject[1].name).to eq(:zebra) - expect(subject[1]).to be_binary + expect(action_sequence.snapshots_defs.size).to eq(2) + expect(action_sequence.snapshots_defs[0].name).to eq(:giraffe) + expect(action_sequence.snapshots_defs[0]).to be_binary + expect(action_sequence.snapshots_defs[1].name).to eq(:zebra) + expect(action_sequence.snapshots_defs[1]).to be_binary end it 'generated follow-up textual snapshot def if previous filter is binary-to-text' do - action_sequence.add_snapshot(:giraffe, nil) - action_sequence.add_filter(:RuleMemSpec_filter_b2t, arguments: 'irrelevant') - action_sequence.add_snapshot(:zebra, nil) + action_sequence = + described_class.build(rep) do |b| + b.add_snapshot(:giraffe, nil) + b.add_filter(:RuleMemSpec_filter_b2t, arguments: 'irrelevant') + b.add_snapshot(:zebra, nil) + end - expect(subject.size).to eq(2) - expect(subject[0].name).to eq(:giraffe) - expect(subject[0]).to be_binary - expect(subject[1].name).to eq(:zebra) - expect(subject[1]).not_to be_binary + expect(action_sequence.snapshots_defs.size).to eq(2) + expect(action_sequence.snapshots_defs[0].name).to eq(:giraffe) + expect(action_sequence.snapshots_defs[0]).to be_binary + expect(action_sequence.snapshots_defs[1].name).to eq(:zebra) + expect(action_sequence.snapshots_defs[1]).not_to be_binary end end end end