From 56ed4988e4b6a9f0a3b0520f4a05616070f5eff4 Mon Sep 17 00:00:00 2001 From: dzirtusss Date: Tue, 26 Jul 2016 18:43:20 +0300 Subject: [PATCH 1/4] Update assets_precompile_spec.rb symlink tests with tempfs --- spec/react_on_rails/assets_precompile_spec.rb | 93 +++++++++++++++++-- 1 file changed, 86 insertions(+), 7 deletions(-) diff --git a/spec/react_on_rails/assets_precompile_spec.rb b/spec/react_on_rails/assets_precompile_spec.rb index 74ad264d0c..dab770d4e4 100644 --- a/spec/react_on_rails/assets_precompile_spec.rb +++ b/spec/react_on_rails/assets_precompile_spec.rb @@ -1,26 +1,105 @@ require_relative "spec_helper" require "react_on_rails/assets_precompile" -# require "tmpdir" -# require "tempfile" +require "tmpdir" +require "tempfile" module ReactOnRails RSpec.describe AssetsPrecompile do + + assets_path = Pathname.new(Dir.mktmpdir) + describe "symlink_file" do - it "creates a proper symlink" - it "creates a proper symlink if nested" + it "creates a proper symlink" do + filename = File.basename(Tempfile.new("tempfile",assets_path)) + digest_filename = "#{filename}_digest" + AssetsPrecompile.new(assets_path: assets_path). + symlink_file(filename,digest_filename) + + expect(assets_path.join(digest_filename).lstat.symlink?).to be true + expect(File.identical?( assets_path.join(filename), + assets_path.join(digest_filename))).to be true + end + + it "creates a proper symlink if nested" do + Dir.mkdir(assets_path.join("images")) + filename = "images/" + File.basename(Tempfile.new("tempfile", + assets_path.join("images"))) + digest_filename = "#{filename}_digest" + AssetsPrecompile.new(assets_path: assets_path). + symlink_file(filename,digest_filename) + + expect(assets_path.join(digest_filename).lstat.symlink?).to be true + expect(File.identical?( assets_path.join(filename), + assets_path.join(digest_filename))).to be true + end end describe "symlink_non_digested_assets" do - it "creates the necessary symlinks" + it "creates the necessary symlinks" do + manifest_filename = "manifest-alfa.json" + digest_filename = "alfa.12345.js" + nondigest_filename = "alfa.js" + digest_bad_filename = "alfa.12345.jsx" + nondigest_bad_filename = "alfa.jsx" + + Dir.chdir(assets_path) + f = File.new(assets_path.join(manifest_filename),"w") + f.write("{\"assets\":{\"#{nondigest_filename}\": \"#{digest_filename}\"}}") + f.close + + File.new(assets_path.join(digest_filename),"w").close + File.new(assets_path.join("#{digest_filename}.gz"),"w").close + File.new(assets_path.join(digest_bad_filename),"w").close + + AssetsPrecompile.new(assets_path: assets_path, + symlink_non_digested_assets_regex: Regexp.new('.*\.js$')) + .symlink_non_digested_assets + + # testing for alfa.js symlink + expect(assets_path.join(digest_filename).exist?).to be true + expect(assets_path.join(nondigest_filename).lstat.symlink?).to be true + expect(File.identical?( assets_path.join(nondigest_filename), + assets_path.join(digest_filename))).to be true + + # testing for alfa.js.gz symlink + expect(assets_path.join("#{digest_filename}.gz").exist?).to be true + expect(assets_path.join("#{nondigest_filename}.gz").lstat.symlink?).to be true + expect(File.identical?( assets_path.join("#{nondigest_filename}.gz"), + assets_path.join("#{digest_filename}.gz"))).to be true + + # testing for NO symlink for alfa.jsx + expect(assets_path.join(nondigest_bad_filename).exist?).to be false + end end describe "delete_broken_symlinks" do - it "deletes a broken symlink" + it "deletes a broken symlink" do + filename = File.basename(Tempfile.new("tempfile",assets_path)) + digest_filename = "#{filename}_digest" + + a = AssetsPrecompile.new(assets_path: assets_path) + a.symlink_file(filename,digest_filename) + File.unlink(assets_path.join(filename)) + a.delete_broken_symlinks + + expect(assets_path.join(filename).exist?).to be false + expect(assets_path.join(digest_filename).exist?).to be false + end end describe "clobber" do - it "deletes files in ReactOnRails.configuration.generated_assets_dir" + it "deletes files in ReactOnRails.configuration.generated_assets_dir" do + +#### Problems here because in clobber dir = Rails.root.join(@generated_assets_dir) +#### which is not tmpdir, meaning we need to update real fs? + +# file = Tempfile.new("tempfile",assets_path) +# expect(File.exist?(file)).to be true +# AssetsPrecompile.new(generated_assets_dir: assets_path) +# .clobber +# expect(File.exist?(file)).to be false + end end end end From e33611fb182c6f2ad6cb59de8c99d87b290b384d Mon Sep 17 00:00:00 2001 From: dzirtusss Date: Thu, 28 Jul 2016 14:11:19 +0300 Subject: [PATCH 2/4] Update assets_precompile_spec.rb --- spec/react_on_rails/assets_precompile_spec.rb | 89 +++++++++---------- 1 file changed, 42 insertions(+), 47 deletions(-) diff --git a/spec/react_on_rails/assets_precompile_spec.rb b/spec/react_on_rails/assets_precompile_spec.rb index dab770d4e4..78e7b74bbc 100644 --- a/spec/react_on_rails/assets_precompile_spec.rb +++ b/spec/react_on_rails/assets_precompile_spec.rb @@ -6,68 +6,67 @@ module ReactOnRails RSpec.describe AssetsPrecompile do + let (:assets_path) { Pathname.new(Dir.mktmpdir) } - assets_path = Pathname.new(Dir.mktmpdir) - - describe "symlink_file" do + describe "#symlink_file" do it "creates a proper symlink" do - filename = File.basename(Tempfile.new("tempfile",assets_path)) + filename = File.basename(Tempfile.new("tempfile", assets_path)) digest_filename = "#{filename}_digest" - AssetsPrecompile.new(assets_path: assets_path). - symlink_file(filename,digest_filename) - + AssetsPrecompile.new(assets_path: assets_path) + .symlink_file(filename, digest_filename) + expect(assets_path.join(digest_filename).lstat.symlink?).to be true - expect(File.identical?( assets_path.join(filename), - assets_path.join(digest_filename))).to be true + expect(File.identical?(assets_path.join(filename), + assets_path.join(digest_filename))).to be true end - - it "creates a proper symlink if nested" do + + it "creates a proper symlink when nested" do Dir.mkdir(assets_path.join("images")) filename = "images/" + File.basename(Tempfile.new("tempfile", - assets_path.join("images"))) + assets_path.join("images"))) digest_filename = "#{filename}_digest" - AssetsPrecompile.new(assets_path: assets_path). - symlink_file(filename,digest_filename) - + AssetsPrecompile.new(assets_path: assets_path) + .symlink_file(filename, digest_filename) + expect(assets_path.join(digest_filename).lstat.symlink?).to be true - expect(File.identical?( assets_path.join(filename), - assets_path.join(digest_filename))).to be true + expect(File.identical?(assets_path.join(filename), + assets_path.join(digest_filename))).to be true end end describe "symlink_non_digested_assets" do it "creates the necessary symlinks" do - manifest_filename = "manifest-alfa.json" + manifest_filename = "manifest-alfa.json" digest_filename = "alfa.12345.js" nondigest_filename = "alfa.js" digest_bad_filename = "alfa.12345.jsx" nondigest_bad_filename = "alfa.jsx" - + Dir.chdir(assets_path) - f = File.new(assets_path.join(manifest_filename),"w") + f = File.new(assets_path.join(manifest_filename), "w") f.write("{\"assets\":{\"#{nondigest_filename}\": \"#{digest_filename}\"}}") f.close - - File.new(assets_path.join(digest_filename),"w").close - File.new(assets_path.join("#{digest_filename}.gz"),"w").close - File.new(assets_path.join(digest_bad_filename),"w").close + + FileUtils.touch assets_path.join(digest_filename) + FileUtils.touch assets_path.join("#{digest_filename}.gz") + FileUtils.touch assets_path.join(digest_bad_filename) AssetsPrecompile.new(assets_path: assets_path, - symlink_non_digested_assets_regex: Regexp.new('.*\.js$')) - .symlink_non_digested_assets - + symlink_non_digested_assets_regex: Regexp.new('.*\.js$')) + .symlink_non_digested_assets + # testing for alfa.js symlink expect(assets_path.join(digest_filename).exist?).to be true expect(assets_path.join(nondigest_filename).lstat.symlink?).to be true - expect(File.identical?( assets_path.join(nondigest_filename), - assets_path.join(digest_filename))).to be true - + expect(File.identical?(assets_path.join(nondigest_filename), + assets_path.join(digest_filename))).to be true + # testing for alfa.js.gz symlink expect(assets_path.join("#{digest_filename}.gz").exist?).to be true expect(assets_path.join("#{nondigest_filename}.gz").lstat.symlink?).to be true - expect(File.identical?( assets_path.join("#{nondigest_filename}.gz"), - assets_path.join("#{digest_filename}.gz"))).to be true - + expect(File.identical?(assets_path.join("#{nondigest_filename}.gz"), + assets_path.join("#{digest_filename}.gz"))).to be true + # testing for NO symlink for alfa.jsx expect(assets_path.join(nondigest_bad_filename).exist?).to be false end @@ -75,30 +74,26 @@ module ReactOnRails describe "delete_broken_symlinks" do it "deletes a broken symlink" do - filename = File.basename(Tempfile.new("tempfile",assets_path)) + filename = File.basename(Tempfile.new("tempfile", assets_path)) digest_filename = "#{filename}_digest" a = AssetsPrecompile.new(assets_path: assets_path) - a.symlink_file(filename,digest_filename) + a.symlink_file(filename, digest_filename) File.unlink(assets_path.join(filename)) a.delete_broken_symlinks - - expect(assets_path.join(filename).exist?).to be false - expect(assets_path.join(digest_filename).exist?).to be false + + expect(assets_path.join(filename)).not_to exist + expect(assets_path.join(digest_filename)).not_to exist end end describe "clobber" do it "deletes files in ReactOnRails.configuration.generated_assets_dir" do - -#### Problems here because in clobber dir = Rails.root.join(@generated_assets_dir) -#### which is not tmpdir, meaning we need to update real fs? - -# file = Tempfile.new("tempfile",assets_path) -# expect(File.exist?(file)).to be true -# AssetsPrecompile.new(generated_assets_dir: assets_path) -# .clobber -# expect(File.exist?(file)).to be false + file = Tempfile.new("tempfile", assets_path) + expect(file).to exist + AssetsPrecompile.new(assets_path: assets_path, + generated_assets_dir: assets_path).clobber + expect(file).not_to exist end end end From cb83b3b1c5dc4ad387a70635d1952e7efc5826e7 Mon Sep 17 00:00:00 2001 From: Sergey Date: Thu, 28 Jul 2016 23:22:54 +0300 Subject: [PATCH 3/4] Update assets_precompile_spec.rb --- spec/react_on_rails/assets_precompile_spec.rb | 63 ++++++++++--------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/spec/react_on_rails/assets_precompile_spec.rb b/spec/react_on_rails/assets_precompile_spec.rb index 78e7b74bbc..8f765a9446 100644 --- a/spec/react_on_rails/assets_precompile_spec.rb +++ b/spec/react_on_rails/assets_precompile_spec.rb @@ -6,7 +6,7 @@ module ReactOnRails RSpec.describe AssetsPrecompile do - let (:assets_path) { Pathname.new(Dir.mktmpdir) } + let(:assets_path) { Pathname.new(Dir.mktmpdir) } describe "#symlink_file" do it "creates a proper symlink" do @@ -35,40 +35,47 @@ module ReactOnRails end describe "symlink_non_digested_assets" do - it "creates the necessary symlinks" do - manifest_filename = "manifest-alfa.json" - digest_filename = "alfa.12345.js" - nondigest_filename = "alfa.js" - digest_bad_filename = "alfa.12345.jsx" - nondigest_bad_filename = "alfa.jsx" - - Dir.chdir(assets_path) - f = File.new(assets_path.join(manifest_filename), "w") + let(:digest_filename) { "alfa.12345.js" } + let(:nondigest_filename) { "alfa.js" } + + let(:checker) do + f = File.new(assets_path.join("manifest-alfa.json"), "w") f.write("{\"assets\":{\"#{nondigest_filename}\": \"#{digest_filename}\"}}") f.close - FileUtils.touch assets_path.join(digest_filename) - FileUtils.touch assets_path.join("#{digest_filename}.gz") - FileUtils.touch assets_path.join(digest_bad_filename) - AssetsPrecompile.new(assets_path: assets_path, symlink_non_digested_assets_regex: Regexp.new('.*\.js$')) - .symlink_non_digested_assets + end - # testing for alfa.js symlink - expect(assets_path.join(digest_filename).exist?).to be true - expect(assets_path.join(nondigest_filename).lstat.symlink?).to be true - expect(File.identical?(assets_path.join(nondigest_filename), - assets_path.join(digest_filename))).to be true + context "correct nondigest filename" do + it "create valid symlink" do + FileUtils.touch assets_path.join(digest_filename) + checker.symlink_non_digested_assets + + expect(assets_path.join(nondigest_filename).lstat.symlink?).to be true + expect(File.identical?(assets_path.join(nondigest_filename), + assets_path.join(digest_filename))).to be true + end + end + + context "zipped nondigest filename" do + it "create valid symlink" do + FileUtils.touch assets_path.join("#{digest_filename}.gz") + checker.symlink_non_digested_assets + + expect(assets_path.join("#{nondigest_filename}.gz").lstat.symlink?).to be true + expect(File.identical?(assets_path.join("#{nondigest_filename}.gz"), + assets_path.join("#{digest_filename}.gz"))).to be true + end + end - # testing for alfa.js.gz symlink - expect(assets_path.join("#{digest_filename}.gz").exist?).to be true - expect(assets_path.join("#{nondigest_filename}.gz").lstat.symlink?).to be true - expect(File.identical?(assets_path.join("#{nondigest_filename}.gz"), - assets_path.join("#{digest_filename}.gz"))).to be true + context "wrong nondigest filename" do + it "should not create symlink" do + FileUtils.touch assets_path.join("alfa.12345.jsx") + checker.symlink_non_digested_assets - # testing for NO symlink for alfa.jsx - expect(assets_path.join(nondigest_bad_filename).exist?).to be false + expect(assets_path.join("alfa.jsx")).not_to exist + end end end @@ -89,7 +96,7 @@ module ReactOnRails describe "clobber" do it "deletes files in ReactOnRails.configuration.generated_assets_dir" do - file = Tempfile.new("tempfile", assets_path) + file = Tempfile.new("tempfile", Rails.root.join(assets_path)) expect(file).to exist AssetsPrecompile.new(assets_path: assets_path, generated_assets_dir: assets_path).clobber From 3c04366e99dcb142e9184842c25efb38d32d3904 Mon Sep 17 00:00:00 2001 From: Sergey Date: Sun, 31 Jul 2016 21:46:17 +0300 Subject: [PATCH 4/4] Update assets_precompile_spec.rb --- spec/react_on_rails/assets_precompile_spec.rb | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/spec/react_on_rails/assets_precompile_spec.rb b/spec/react_on_rails/assets_precompile_spec.rb index 8f765a9446..fe8c12685b 100644 --- a/spec/react_on_rails/assets_precompile_spec.rb +++ b/spec/react_on_rails/assets_precompile_spec.rb @@ -21,7 +21,7 @@ module ReactOnRails end it "creates a proper symlink when nested" do - Dir.mkdir(assets_path.join("images")) + Dir.mkdir assets_path.join("images") filename = "images/" + File.basename(Tempfile.new("tempfile", assets_path.join("images"))) digest_filename = "#{filename}_digest" @@ -96,11 +96,18 @@ module ReactOnRails describe "clobber" do it "deletes files in ReactOnRails.configuration.generated_assets_dir" do - file = Tempfile.new("tempfile", Rails.root.join(assets_path)) - expect(file).to exist + allow(Rails).to receive(:root).and_return(Pathname.new(Dir.mktmpdir)) + + generated_assets_dir = "generated_dir" + generated_assets_path = Rails.root.join(generated_assets_dir) + Dir.mkdir generated_assets_path + + filepath = Pathname.new(Tempfile.new("tempfile", generated_assets_path)) + AssetsPrecompile.new(assets_path: assets_path, - generated_assets_dir: assets_path).clobber - expect(file).not_to exist + generated_assets_dir: generated_assets_dir).clobber + + expect(filepath).not_to exist end end end