58 行
1.9 KiB
Ruby
58 行
1.9 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe MaterialExportItem, type: :model do
|
|
let(:user) { create(:user, :member) }
|
|
let(:tag) { Tag.create!(tag_name: TagName.create!(name: 'export_item'), category: :material) }
|
|
let(:material) do
|
|
Material.create!(tag:, url: 'https://example.com/material',
|
|
created_by_user: user, updated_by_user: user)
|
|
end
|
|
|
|
it 'rejects blank export_path' do
|
|
item = described_class.new(material:, profile: 'legacy_drive', export_path: '')
|
|
|
|
expect(item).not_to be_valid
|
|
expect(item.errors[:export_path]).to be_present
|
|
end
|
|
|
|
it 'rejects absolute export_path' do
|
|
item = described_class.new(material:, profile: 'legacy_drive',
|
|
export_path: '/素材/a.png')
|
|
|
|
expect(item).not_to be_valid
|
|
expect(item.errors[:export_path]).to be_present
|
|
end
|
|
|
|
it 'rejects parent traversal export_path' do
|
|
item = described_class.new(material:, profile: 'legacy_drive',
|
|
export_path: '素材/../a.png')
|
|
|
|
expect(item).not_to be_valid
|
|
expect(item.errors[:export_path]).to be_present
|
|
end
|
|
|
|
it 'rejects double slash export_path' do
|
|
item = described_class.new(material:, profile: 'legacy_drive',
|
|
export_path: '素材//a.png')
|
|
|
|
expect(item).not_to be_valid
|
|
expect(item.errors[:export_path]).to be_present
|
|
end
|
|
|
|
it 'rejects dot segment export_path' do
|
|
item = described_class.new(material:, profile: 'legacy_drive',
|
|
export_path: './素材/a.png')
|
|
|
|
expect(item).not_to be_valid
|
|
expect(item.errors[:export_path]).to be_present
|
|
end
|
|
|
|
it 'rejects trailing slash export_path' do
|
|
item = described_class.new(material:, profile: 'legacy_drive',
|
|
export_path: '素材/a/')
|
|
|
|
expect(item).not_to be_valid
|
|
expect(item.errors[:export_path]).to be_present
|
|
end
|
|
end
|