Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 96 additions & 8 deletions spec/react_on_rails/assets_precompile_spec.rb
Original file line number Diff line number Diff line change
@@ -1,26 +1,114 @@
require_relative "spec_helper"
require "react_on_rails/assets_precompile"

# require "tmpdir"
# require "tempfile"
require "tmpdir"
require "tempfile"

module ReactOnRails
RSpec.describe AssetsPrecompile do
describe "symlink_file" do
it "creates a proper symlink"
it "creates a proper symlink if nested"
let(:assets_path) { Pathname.new(Dir.mktmpdir) }

describe "#symlink_file" do
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 when 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"
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

AssetsPrecompile.new(assets_path: assets_path,
symlink_non_digested_assets_regex: Regexp.new('.*\.js$'))
end

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

context "wrong nondigest filename" do
it "should not create symlink" do
FileUtils.touch assets_path.join("alfa.12345.jsx")
checker.symlink_non_digested_assets

expect(assets_path.join("alfa.jsx")).not_to exist
end
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)).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"
it "deletes files in ReactOnRails.configuration.generated_assets_dir" do
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: generated_assets_dir).clobber

expect(filepath).not_to exist
end
end
end
end