diff --git a/app/models/account.rb b/app/models/account.rb index 9999f05dd..cb186b465 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -1,7 +1,7 @@ class Account < ApplicationRecord include Targetable - MENTION_RE = /(?:^|\s|\.|>)@([a-z0-9_]+(?:@[a-z0-9\.\-]+)?)/i + MENTION_RE = /(?:^|[\s\.>*+])@([a-z0-9_]+(?:@[a-z0-9\.\-]+)?)/i IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze # Local users diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index 8c68ce989..df30f73ae 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -4,7 +4,7 @@ class ProcessHashtagsService < BaseService tags = status.text.scan(Tag::HASHTAG_RE).map(&:first) end - tags.map(&:downcase).each do |tag| + tags.map(&:downcase).uniq.each do |tag| status.tags << Tag.where(name: tag).first_or_initialize(name: tag) end end diff --git a/spec/controllers/tags_controller_spec.rb b/spec/controllers/tags_controller_spec.rb index f433cf271..92e25e03b 100644 --- a/spec/controllers/tags_controller_spec.rb +++ b/spec/controllers/tags_controller_spec.rb @@ -3,6 +3,10 @@ require 'rails_helper' RSpec.describe TagsController, type: :controller do describe 'GET #show' do + before do + Fabricate(:tag, name: 'test') + end + it 'returns http success' do get :show, params: { id: 'test' } expect(response).to have_http_status(:success)