add validation to tag name (#4194)
This commit is contained in:
		
							parent
							
								
									21d7c38b40
								
							
						
					
					
						commit
						d0a037ae79
					
				
					 2 changed files with 21 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -12,9 +12,10 @@
 | 
			
		|||
class Tag < ApplicationRecord
 | 
			
		||||
  has_and_belongs_to_many :statuses
 | 
			
		||||
 | 
			
		||||
  HASHTAG_RE = /(?:^|[^\/\)\w])#([[:word:]_]*[[:alpha:]_][[:word:]_]*)/i
 | 
			
		||||
  HASHTAG_NAME_RE = '[[:word:]_]*[[:alpha:]_][[:word:]_]*'
 | 
			
		||||
  HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_RE})/i
 | 
			
		||||
 | 
			
		||||
  validates :name, presence: true, uniqueness: true
 | 
			
		||||
  validates :name, presence: true, uniqueness: true, format: { with: /\A#{HASHTAG_NAME_RE}\z/i }
 | 
			
		||||
 | 
			
		||||
  def to_param
 | 
			
		||||
    name
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,24 @@
 | 
			
		|||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe Tag, type: :model do
 | 
			
		||||
  describe 'validations' do
 | 
			
		||||
    it 'invalid with #' do
 | 
			
		||||
      expect(Tag.new(name: '#hello_world')).to_not be_valid
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'invalid with .' do
 | 
			
		||||
      expect(Tag.new(name: '.abcdef123')).to_not be_valid
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'invalid with spaces' do
 | 
			
		||||
      expect(Tag.new(name: 'hello world')).to_not be_valid
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'valid with aesthetic' do
 | 
			
		||||
      expect(Tag.new(name: 'aesthetic')).to be_valid
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'HASHTAG_RE' do
 | 
			
		||||
    subject { Tag::HASHTAG_RE }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue