require 'spec_helper' require 'tempfile' describe FontProcessor::ProcessedFontIterator do before(:each) do @fontbase_id = "a00000000000000000000001" @charset_id = 1 @fpv = 20 @directory = File.join(Dir.tmpdir, "processed-font-iterator-#{Time.now.to_i}") end subject { FontProcessor::ProcessedFontIterator.new(@fontbase_id, @charset_id, @fpv, @directory, true) } describe ".valid" do before(:each) do FileUtils.mkdir_p(@directory) end after(:each) do FileUtils.rm_r(@directory) end it "is true when a truetype file is successfully processed" do FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-otf.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-dyna_base.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff2.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-inst.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff_raw.ttf")) expect(subject.valid?).to be true end it "isn't true when a truetype file is missing a file" do FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-otf.ttf")) expect(subject.valid?).to be false end it "is true when a postscript file is successfully processed" do FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-otf.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-inst.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-dyna_base.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff2.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff_raw.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-otf.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-inst.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-dyna_base.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff2.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff_raw.cff")) expect(subject.valid?).to be true end it "isn't true when a postscript file is missing a postscript file" do FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-otf.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-otf.cff")) expect(subject.valid?).to be false end it "isn't true when a postscript file is missing a truetype file" do FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff.ttf")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-otf.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff.cff")) expect(subject.valid?).to be false end it "is true when a postscript file is not converting to a truetype file" do FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-dyna_base.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-otf.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-inst.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff2.cff")) FileUtils.touch(File.join(@directory, "charset-#{@charset_id}-woff_raw.cff")) no_ttf_iterator = FontProcessor::ProcessedFontIterator.new(@fontbase_id, @charset_id, @fpv, @directory, false) expect(no_ttf_iterator.valid?).to be true end end describe ".s3_key" do it "can return a proper s3 key for a normal file" do expect(subject.s3_key("otf", "ttf")).to eq "#{@fontbase_id}/#{@fpv}/#{@charset_id}/otf.ttf" end end describe ".each" do before(:each) do FileUtils.mkdir_p(@directory) end after(:each) do FileUtils.rm_r(@directory) end it "can successfully iterate" do @file_1 = File.join(@directory, "charset-#{@charset_id}-otf.ttf") @file_2 = File.join(@directory, "charset-#{@charset_id}-woff.ttf") @file_3 = File.join(@directory, "charset-#{@charset_id}-woff2.ttf") @file_4 = File.join(@directory, "charset-#{@charset_id}-woff_raw.ttf") @file_5 = File.join(@directory, "charset-#{@charset_id}-inst.ttf") @file_6 = File.join(@directory, "charset-#{@charset_id}-dyna_base.ttf") @file_7 = File.join(@directory, "charset-#{@charset_id}-otf.otf") @file_8 = File.join(@directory, "charset-#{@charset_id}-woff.otf") @file_9 = File.join(@directory, "charset-#{@charset_id}-woff2.otf") @file_10 = File.join(@directory, "charset-#{@charset_id}-woff_raw.otf") @file_11 = File.join(@directory, "charset-#{@charset_id}-inst.otf") @file_12 = File.join(@directory, "charset-#{@charset_id}-dyna_base.otf") @file_13 = File.join(@directory, "source.otf") [@file_1, @file_2, @file_3, @file_4, @file_5, @file_6, @file_7, @file_8, @file_9, @file_10, @file_11, @file_12, @file_13].each { |f| FileUtils.touch(f) } results = [] subject.each { |file, s3_key| results << [s3_key, file] } results.sort! expect(results).to eq [ ["a00000000000000000000001/20/1/dyna_base.cff", @file_12], ["a00000000000000000000001/20/1/dyna_base.ttf", @file_6], ["a00000000000000000000001/20/1/inst.cff", @file_11], ["a00000000000000000000001/20/1/inst.ttf", @file_5], ["a00000000000000000000001/20/1/otf.cff", @file_7], ["a00000000000000000000001/20/1/otf.ttf", @file_1], ["a00000000000000000000001/20/1/woff.cff", @file_8], ["a00000000000000000000001/20/1/woff.ttf", @file_2], ["a00000000000000000000001/20/1/woff2.cff", @file_9], ["a00000000000000000000001/20/1/woff2.ttf", @file_3], ["a00000000000000000000001/20/1/woff_raw.cff", @file_10], ["a00000000000000000000001/20/1/woff_raw.ttf", @file_4] ] end it "won't iterate over missing files" do expect { subject.each }.to raise_error(FontProcessor::MissingFilesException) end end end