require 'rails_helper' RSpec.describe Newsletter::Design do before(:each) do FileUtils.rm_rf(File.join(Rails.root, 'public', 'images', 'My_Design')) @design = import_design(nil,"My Design") end it "sets the name correctly" do expect(@design.name).to eq("My Design") end context "when name changed/moved" do it "moves its images" do old_images_path = @design.images_path old_name = @design.name expect(@design.images_path).to include("public/images/#{@design.name_as_path(@design.name)}") expect(File.exist?(@design.images_path)).to be true new_name = @design.name + " NEW!" FileUtils.rm_rf(File.join(Newsletter.designs_path,'designs', 'My_Design_NEW_')) FileUtils.rm_rf(File.join(Rails.root, 'public', 'images', 'My_Design_NEW_')) expect{@design.update_attributes(name: new_name)}.not_to raise_error expect(@design.name).to eq new_name expect(@design.images_path).to include("public/images/#{@design.name_as_path(new_name)}") expect(File.exist?(old_images_path)).to be false expect(File.exist?(@design.images_path)).to be true end end context "has an associated stylesheet" do it "that is accessible" do expect{@design.stylesheet_text}.not_to raise_error end end context "whether it exports and imports correctly" do it "doesn't blow up" do reimported_design = nil Tempfile.open(["design", ".yml"], 'tmp') do |design_file| design_file.close @design.export(design_file.path) reimported_design = Newsletter::Design.import(design_file.path, "My Re-Imported Design" ) end and_it "has the same elements" do expect(reimported_design.elements.pluck(:name).sort).to eq @design. elements.pluck(:name).sort end and_it "knows its images" do expect(reimported_design.images).to include("newsletter_header.png") end and_it "knows its stylesheet" do expect(reimported_design.stylesheet_text).to eq @design.stylesheet_text end end end end