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
