45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # typed: false
 | |
| # frozen_string_literal: true
 | |
| 
 | |
| require_relative "shared_examples"
 | |
| 
 | |
| describe UnpackStrategy::Directory do
 | |
|   subject(:strategy) { described_class.new(path) }
 | |
| 
 | |
|   let(:path) {
 | |
|     mktmpdir.tap do |path|
 | |
|       FileUtils.touch path/"file"
 | |
|       FileUtils.ln_s "file", path/"symlink"
 | |
|       FileUtils.mkdir path/"folder"
 | |
|       FileUtils.ln_s "folder", path/"folderSymlink"
 | |
|     end
 | |
|   }
 | |
| 
 | |
|   let(:unpack_dir) { mktmpdir }
 | |
| 
 | |
|   it "does not follow symlinks" do
 | |
|     strategy.extract(to: unpack_dir)
 | |
|     expect(unpack_dir/"symlink").to be_a_symlink
 | |
|   end
 | |
| 
 | |
|   it "does not follow top level symlinks to directories" do
 | |
|     strategy.extract(to: unpack_dir)
 | |
|     expect(unpack_dir/"folderSymlink").to be_a_symlink
 | |
|   end
 | |
| 
 | |
|   it "preserves permissions of contained files" do
 | |
|     FileUtils.chmod 0644, path/"file"
 | |
| 
 | |
|     strategy.extract(to: unpack_dir)
 | |
|     expect((unpack_dir/"file").stat.mode & 0777).to eq 0644
 | |
|   end
 | |
| 
 | |
|   it "preserves the permissions of the destination directory" do
 | |
|     FileUtils.chmod 0700, path
 | |
|     FileUtils.chmod 0755, unpack_dir
 | |
| 
 | |
|     strategy.extract(to: unpack_dir)
 | |
|     expect(unpack_dir.stat.mode & 0777).to eq 0755
 | |
|   end
 | |
| end
 | 
