Sha256: cf02743d025573fc109707e34bf52cd6ca93aa2aa38d70031a7867196c454fbe

Contents?: true

Size: 1.98 KB

Versions: 42

Compression:

Stored size: 1.98 KB

Contents

require 'test_helper'

class LinkValidatorTest < ActiveSupport::TestCase
  class Dummy
    include Mongoid::Document

    field "body", type: String
    field "assignee", type: String
    GOVSPEAK_FIELDS = [:body]

    validates_with LinkValidator
  end

  context "links" do
    should "not be verified for blank govspeak fields" do
      doc = Dummy.new(body: nil)

      assert_nothing_raised do
        doc.valid?
      end
      assert_empty doc.errors
    end

    should "start with http[s]://, mailto: or /" do
      doc = Dummy.new(body: "abc [external](external.com)")
      assert doc.invalid?
      assert_includes doc.errors.keys, :body

      doc = Dummy.new(body: "abc [external](http://external.com)")
      assert doc.valid?

      doc = Dummy.new(body: "abc [internal](/internal)")
      assert doc.valid?
    end

    should "not contain hover text" do
      doc = Dummy.new(body: 'abc [foobar](http://foobar.com "hover")')
      assert doc.invalid?
      assert_includes doc.errors.keys, :body
    end

    should "not set rel=external" do
      doc = Dummy.new(body: 'abc [foobar](http://foobar.com){:rel="external"}')
      assert doc.invalid?
      assert_includes doc.errors.keys, :body
    end

    should "show multiple errors" do
      doc = Dummy.new(body: 'abc [foobar](foobar.com "bar"){:rel="external"}')
      assert doc.invalid?
      assert_equal 3, doc.errors[:body].first.length
    end

    should "only show each error once" do
      doc = Dummy.new(body: 'abc [link1](foobar.com), ghi [link2](bazquux.com)')
      assert doc.invalid?
      assert_equal 1, doc.errors[:body].first.length
    end

    should "be validated when any attribute of the document changes" do
      # already published document having link validation errors
      doc = Dummy.new(body: 'abc [link1](foobar.com), ghi [link2](bazquux.com)')
      doc.save(validate: false)

      doc.assignee = "4fdef0000000000000000001"
      assert doc.invalid?

      assert_equal 1, doc.errors[:body].first.length
    end
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
govuk_content_models-27.0.0 test/validators/link_validator_test.rb
govuk_content_models-26.2.0 test/validators/link_validator_test.rb
govuk_content_models-26.1.0 test/validators/link_validator_test.rb
govuk_content_models-26.0.0 test/validators/link_validator_test.rb
govuk_content_models-25.0.0 test/validators/link_validator_test.rb
govuk_content_models-24.2.0 test/validators/link_validator_test.rb
govuk_content_models-24.1.0 test/validators/link_validator_test.rb
govuk_content_models-24.0.1 test/validators/link_validator_test.rb
govuk_content_models-24.0.0 test/validators/link_validator_test.rb
govuk_content_models-23.0.0 test/validators/link_validator_test.rb
govuk_content_models-22.2.0 test/validators/link_validator_test.rb
govuk_content_models-22.1.2 test/validators/link_validator_test.rb
govuk_content_models-22.1.1 test/validators/link_validator_test.rb
govuk_content_models-22.1.0 test/validators/link_validator_test.rb
govuk_content_models-22.0.0 test/validators/link_validator_test.rb
govuk_content_models-21.0.0 test/validators/link_validator_test.rb
govuk_content_models-20.2.0 test/validators/link_validator_test.rb
govuk_content_models-20.1.0 test/validators/link_validator_test.rb
govuk_content_models-20.0.0 test/validators/link_validator_test.rb
govuk_content_models-19.0.0 test/validators/link_validator_test.rb