# encoding: utf-8 require 'spec_helper' RSpec.describe SlideList do context '#initialize' do it 'requires a list of patterns' do slide = double('Middleman::Presentation::NewSlide') allow(slide).to receive(:name).and_return '01' slide_builder = double('Middleman::Presentation::NewSlide') allow(slide_builder).to receive(:new).and_return slide expect do SlideList.new('01', slide_builder: slide_builder) end.not_to raise_error end it 'accepts a block' do slide = double('Middleman::Presentation::NewSlide') allow(slide).to receive(:name).and_return '01' slide_builder = double('Middleman::Presentation::NewSlide') allow(slide_builder).to receive(:new).and_return slide expect do SlideList.new('01', slide_builder: slide_builder) do |_l| end end.not_to raise_error end end context '#all' do it 'holds all slides: existing and not existing' do create_file '01' create_file '02' slide_builder = double('Middleman::Presentation::NewSlide') %w(01 02 03).each do |name| expect(slide_builder).to receive(:new).with(name, {}).and_return(OpenStruct.new(name: name)) end list = SlideList.new(%w(01 02 03), slide_builder: slide_builder) expect(list.all.size).to eq 3 end end context '#transform_with' do it 'takes a transformer to modify each entry' do slide = double('Middleman::Presentation::NewSlide') allow(slide).to receive(:name).and_return '01' slide_builder = double('Middleman::Presentation::NewSlide') allow(slide_builder).to receive(:new).and_return slide transformer = double('Transformer') expect(transformer).to receive(:transform) SlideList.new(%w(01), slide_builder: slide_builder) do |l| l.transform_with transformer end end end context '#each_new' do it 'iterates over all non existing slides because they are assumed to be new' do slide = double('Slide') expect(slide).to receive(:exist?).and_return false slide_builder = double('Middleman::Presentation::NewSlide') allow(slide_builder).to receive(:new).and_return slide SlideList.new(%w(01), slide_builder: slide_builder).each_new {} end end context '#existing_slides' do it 'returns all existing slides' do slide = double('Slide') expect(slide).to receive(:exist?).and_return true slide_builder = double('Middleman::Presentation::NewSlide') allow(slide_builder).to receive(:new).and_return slide existing_slides = SlideList.new(%w(01), slide_builder: slide_builder).existing_slides expect(existing_slides).to include slide end end end