Allow webhooks URL to have leading and trailing spaces
This commit is contained in:
		
							parent
							
								
									01160fc061
								
							
						
					
					
						commit
						4d0e2979b9
					
				| 
						 | 
					@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date.
 | 
				
			||||||
v 8.6.0 (unreleased)
 | 
					v 8.6.0 (unreleased)
 | 
				
			||||||
  - Improve the formatting for the user page bio (Connor Shea)
 | 
					  - Improve the formatting for the user page bio (Connor Shea)
 | 
				
			||||||
  - Fix avatar stretching by providing a cropping feature (Johann Pardanaud)
 | 
					  - Fix avatar stretching by providing a cropping feature (Johann Pardanaud)
 | 
				
			||||||
 | 
					  - Strip leading and trailing spaces in URL validator (evuez)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
v 8.5.1
 | 
					v 8.5.1
 | 
				
			||||||
  - Fix group projects styles
 | 
					  - Fix group projects styles
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,8 +29,11 @@ class UrlValidator < ActiveModel::EachValidator
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def valid_url?(value)
 | 
					  def valid_url?(value)
 | 
				
			||||||
 | 
					    return false if value.nil?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    options = default_options.merge(self.options)
 | 
					    options = default_options.merge(self.options)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    value.strip!
 | 
				
			||||||
    value =~ /\A#{URI.regexp(options[:protocols])}\z/
 | 
					    value =~ /\A#{URI.regexp(options[:protocols])}\z/
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,10 @@
 | 
				
			||||||
require 'spec_helper'
 | 
					require 'spec_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe ProjectHook, models: true do
 | 
					describe ProjectHook, models: true do
 | 
				
			||||||
 | 
					  describe "Associations" do
 | 
				
			||||||
 | 
					    it { is_expected.to belong_to :project }
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe '.push_hooks' do
 | 
					  describe '.push_hooks' do
 | 
				
			||||||
    it 'should return hooks for push events only' do
 | 
					    it 'should return hooks for push events only' do
 | 
				
			||||||
      hook = create(:project_hook, push_events: true)
 | 
					      hook = create(:project_hook, push_events: true)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,20 +18,14 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require 'spec_helper'
 | 
					require 'spec_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe ProjectHook, models: true do
 | 
					describe WebHook, models: true do
 | 
				
			||||||
  describe "Associations" do
 | 
					 | 
				
			||||||
    it { is_expected.to belong_to :project }
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe "Mass assignment" do
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  describe "Validations" do
 | 
					  describe "Validations" do
 | 
				
			||||||
    it { is_expected.to validate_presence_of(:url) }
 | 
					    it { is_expected.to validate_presence_of(:url) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context "url format" do
 | 
					    describe 'url' do
 | 
				
			||||||
      it { is_expected.to allow_value("http://example.com").for(:url) }
 | 
					      it { is_expected.to allow_value("http://example.com").for(:url) }
 | 
				
			||||||
      it { is_expected.to allow_value("https://excample.com").for(:url) }
 | 
					      it { is_expected.to allow_value("https://example.com").for(:url) }
 | 
				
			||||||
 | 
					      it { is_expected.to allow_value(" https://example.com ").for(:url) }
 | 
				
			||||||
      it { is_expected.to allow_value("http://test.com/api").for(:url) }
 | 
					      it { is_expected.to allow_value("http://test.com/api").for(:url) }
 | 
				
			||||||
      it { is_expected.to allow_value("http://test.com/api?key=abc").for(:url) }
 | 
					      it { is_expected.to allow_value("http://test.com/api?key=abc").for(:url) }
 | 
				
			||||||
      it { is_expected.to allow_value("http://test.com/api?key=abc&type=def").for(:url) }
 | 
					      it { is_expected.to allow_value("http://test.com/api?key=abc&type=def").for(:url) }
 | 
				
			||||||
| 
						 | 
					@ -39,6 +33,12 @@ describe ProjectHook, models: true do
 | 
				
			||||||
      it { is_expected.not_to allow_value("example.com").for(:url) }
 | 
					      it { is_expected.not_to allow_value("example.com").for(:url) }
 | 
				
			||||||
      it { is_expected.not_to allow_value("ftp://example.com").for(:url) }
 | 
					      it { is_expected.not_to allow_value("ftp://example.com").for(:url) }
 | 
				
			||||||
      it { is_expected.not_to allow_value("herp-and-derp").for(:url) }
 | 
					      it { is_expected.not_to allow_value("herp-and-derp").for(:url) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'strips :url before saving it' do
 | 
				
			||||||
 | 
					        hook = create(:project_hook, url: ' https://example.com ')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        expect(hook.url).to eq('https://example.com')
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue