Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
paperclip / test / url_generator_test.rb
Size: Mime:
# encoding: utf-8
require './test/helper'
require 'paperclip/url_generator'

class UrlGeneratorTest < Test::Unit::TestCase
  should "use the given interpolator" do
    expected = "the expected result"
    mock_attachment = MockAttachment.new
    mock_interpolator = MockInterpolator.new(:result => expected)

    url_generator = Paperclip::UrlGenerator.new(mock_attachment,
                                                { :interpolator => mock_interpolator })
    result = url_generator.for(:style_name, {})

    assert_equal expected, result
    assert mock_interpolator.has_interpolated_attachment?(mock_attachment)
    assert mock_interpolator.has_interpolated_style_name?(:style_name)
  end

  should "use the default URL when no file is assigned" do
    mock_attachment = MockAttachment.new
    mock_interpolator = MockInterpolator.new
    default_url = "the default url"
    options = { :interpolator => mock_interpolator, :default_url => default_url}

    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
    url_generator.for(:style_name, {})

    assert mock_interpolator.has_interpolated_pattern?(default_url),
      "expected the interpolator to be passed #{default_url.inspect} but it wasn't"
  end

  should "execute the default URL lambda when no file is assigned" do
    mock_attachment = MockAttachment.new
    mock_interpolator = MockInterpolator.new
    default_url = lambda {|attachment| "the #{attachment.class.name} default url" }
    options = { :interpolator => mock_interpolator, :default_url => default_url}

    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
    url_generator.for(:style_name, {})

    assert mock_interpolator.has_interpolated_pattern?("the MockAttachment default url"),
      %{expected the interpolator to be passed "the MockAttachment default url", but it wasn't}
  end

  should "execute the method named by the symbol as the default URL when no file is assigned" do
    mock_model = MockModel.new
    mock_attachment = MockAttachment.new(:model => mock_model)
    mock_interpolator = MockInterpolator.new
    default_url = :to_s
    options = { :interpolator => mock_interpolator, :default_url => default_url}

    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
    url_generator.for(:style_name, {})

    assert mock_interpolator.has_interpolated_pattern?(mock_model.to_s),
      %{expected the interpolator to be passed #{mock_model.to_s}, but it wasn't}
  end

  should "URL-escape spaces if asked to" do
    expected = "the expected result"
    mock_attachment = MockAttachment.new
    mock_interpolator = MockInterpolator.new(:result => expected)
    options = { :interpolator => mock_interpolator }
    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)

    result = url_generator.for(:style_name, {:escape => true})

    assert_equal "the%20expected%20result", result
  end

  should "escape the result of the interpolator using a method on the object, if asked to escape" do
    expected = Class.new do
      def escape
        "the escaped result"
      end
    end.new
    mock_attachment = MockAttachment.new
    mock_interpolator = MockInterpolator.new(:result => expected)
    options = { :interpolator => mock_interpolator }
    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)

    result = url_generator.for(:style_name, {:escape => true})

    assert_equal "the escaped result", result
  end

  should "leave spaces unescaped as asked to" do
    expected = "the expected result"
    mock_attachment = MockAttachment.new
    mock_interpolator = MockInterpolator.new(:result => expected)
    options = { :interpolator => mock_interpolator }
    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)

    result = url_generator.for(:style_name, {:escape => false})

    assert_equal "the expected result", result
  end

  should "default to leaving spaces unescaped" do
    expected = "the expected result"
    mock_attachment = MockAttachment.new
    mock_interpolator = MockInterpolator.new(:result => expected)
    options = { :interpolator => mock_interpolator }
    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)

    result = url_generator.for(:style_name, {})

    assert_equal "the expected result", result
  end

  should "produce URLs without the updated_at value when the object does not respond to updated_at" do
    expected = "the expected result"
    mock_interpolator = MockInterpolator.new(:result => expected)
    mock_attachment = MockAttachment.new(:responds_to_updated_at => false)
    options = { :interpolator => mock_interpolator }
    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)

    result = url_generator.for(:style_name, {:timestamp => true})

    assert_equal expected, result
  end

  should "produce URLs without the updated_at value when the updated_at value is nil" do
    expected = "the expected result"
    mock_interpolator = MockInterpolator.new(:result => expected)
    mock_attachment = MockAttachment.new(:responds_to_updated_at => true, :updated_at => nil)
    options = { :interpolator => mock_interpolator }
    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)

    result = url_generator.for(:style_name, {:timestamp => true})

    assert_equal expected, result
  end

  should "produce URLs with the updated_at when it exists" do
    expected = "the expected result"
    updated_at = 1231231234
    mock_interpolator = MockInterpolator.new(:result => expected)
    mock_attachment = MockAttachment.new(:updated_at => updated_at)
    options = { :interpolator => mock_interpolator }
    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)

    result = url_generator.for(:style_name, {:timestamp => true})

    assert_equal "#{expected}?#{updated_at}", result
  end

  should "produce URLs with the updated_at when it exists, separated with a & if a ? follow by = already exists" do
    expected = "the?expected=result"
    updated_at = 1231231234
    mock_interpolator = MockInterpolator.new(:result => expected)
    mock_attachment = MockAttachment.new(:updated_at => updated_at)
    options = { :interpolator => mock_interpolator }
    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)

    result = url_generator.for(:style_name, {:timestamp => true})

    assert_equal "#{expected}&#{updated_at}", result
  end

  should "produce URLs without the updated_at when told to do as much" do
    expected = "the expected result"
    updated_at = 1231231234
    mock_interpolator = MockInterpolator.new(:result => expected)
    mock_attachment = MockAttachment.new(:updated_at => updated_at)
    options = { :interpolator => mock_interpolator }
    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)

    result = url_generator.for(:style_name, {:timestamp => false})

    assert_equal expected, result
  end

  should "produce the correct URL when the instance has a file name" do
    expected = "the expected result"
    mock_attachment = MockAttachment.new(:original_filename => 'exists')
    mock_interpolator = MockInterpolator.new
    options = { :interpolator => mock_interpolator, :url => expected}

    url_generator = Paperclip::UrlGenerator.new(mock_attachment, options)
    url_generator.for(:style_name, {})

    assert mock_interpolator.has_interpolated_pattern?(expected),
      "expected the interpolator to be passed #{expected.inspect} but it wasn't"
  end
end