Testing File System Security and Path Resolution in Shopify/liquid
This test suite validates the Liquid template engine’s file system functionality, focusing on both default and local file system implementations. It ensures secure template file handling and proper path resolution for partial templates.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
shopify/liquid
test/unit/file_system_unit_test.rb
# frozen_string_literal: true
require 'test_helper'
class FileSystemUnitTest < Minitest::Test
include Liquid
def test_default
assert_raises(FileSystemError) do
BlankFileSystem.new.read_template_file("dummy")
end
end
def test_local
file_system = Liquid::LocalFileSystem.new("/some/path")
assert_equal("/some/path/_mypartial.liquid", file_system.full_path("mypartial"))
assert_equal("/some/path/dir/_mypartial.liquid", file_system.full_path("dir/mypartial"))
assert_raises(FileSystemError) do
file_system.full_path("../dir/mypartial")
end
assert_raises(FileSystemError) do
file_system.full_path("/dir/../../dir/mypartial")
end
assert_raises(FileSystemError) do
file_system.full_path("/etc/passwd")
end
end
def test_custom_template_filename_patterns
file_system = Liquid::LocalFileSystem.new("/some/path", "%s.html")
assert_equal("/some/path/mypartial.html", file_system.full_path("mypartial"))
assert_equal("/some/path/dir/mypartial.html", file_system.full_path("dir/mypartial"))
end
end # FileSystemTest