# frozen_string_literal: true

require 'rails_helper'

RSpec.describe CustomFilterKeyword do
  describe 'Validations' do
    it { is_expected.to validate_length_of(:keyword).is_at_most(described_class::KEYWORD_LENGTH_LIMIT) }
    it { is_expected.to validate_presence_of(:keyword) }
  end

  describe '#to_regex' do
    context 'when whole_word is true' do
      it 'builds a regex with boundaries and the keyword' do
        keyword = described_class.new(whole_word: true, keyword: 'test')

        expect(keyword.to_regex).to eq(/(?mix:\b#{Regexp.escape(keyword.keyword)}\b)/)
      end

      it 'builds a regex with starting boundary and the keyword when end with non-word' do
        keyword = described_class.new(whole_word: true, keyword: 'test#')

        expect(keyword.to_regex).to eq(/(?mix:\btest\#)/)
      end

      it 'builds a regex with end boundary and the keyword when start with non-word' do
        keyword = described_class.new(whole_word: true, keyword: '#test')

        expect(keyword.to_regex).to eq(/(?mix:\#test\b)/)
      end
    end

    context 'when whole_word is false' do
      it 'builds a regex with the keyword' do
        keyword = described_class.new(whole_word: false, keyword: 'test')

        expect(keyword.to_regex).to eq(/test/i)
      end
    end
  end
end
