about summary refs log tree commit diff
path: root/spec/lib/extractor_spec.rb
blob: dba4bd0bbcb5c7738557e8a0a07df7b5e2db426c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# frozen_string_literal: true

require 'rails_helper'

describe Extractor do
  describe 'extract_mentions_or_lists_with_indices' do
    it 'returns an empty array if the given string does not have at signs' do
      text = 'a string without at signs'
      extracted = Extractor.extract_mentions_or_lists_with_indices(text)
      expect(extracted).to eq []
    end

    it 'does not extract mentions which ends with particular characters' do
      text = '@screen_name@'
      extracted = Extractor.extract_mentions_or_lists_with_indices(text)
      expect(extracted).to eq []
    end

    it 'returns mentions as an array' do
      text = '@screen_name'
      extracted = Extractor.extract_mentions_or_lists_with_indices(text)
      expect(extracted).to eq [
        { screen_name: 'screen_name', indices: [ 0, 12 ] }
      ]
    end

    it 'yields mentions if a block is given' do
      text = '@screen_name'
      Extractor.extract_mentions_or_lists_with_indices(text) do |screen_name, start_position, end_position|
        expect(screen_name).to eq 'screen_name'
        expect(start_position).to eq 0
        expect(end_position).to eq 12
      end
    end
  end

  describe 'extract_hashtags_with_indices' do
    it 'returns an empty array if it does not have #' do
      text = 'a string without hash sign'
      extracted = Extractor.extract_hashtags_with_indices(text)
      expect(extracted).to eq []
    end

    it 'does not exclude normal hash text before ://' do
      text = '#hashtag://'
      extracted = Extractor.extract_hashtags_with_indices(text)
      expect(extracted).to eq [ { hashtag: 'hashtag', indices: [ 0, 8 ] } ]
    end

    it 'excludes http://' do
      text = '#hashtaghttp://'
      extracted = Extractor.extract_hashtags_with_indices(text)
      expect(extracted).to eq [ { hashtag: 'hashtag', indices: [ 0, 8 ] } ]
    end

    it 'excludes https://' do
      text = '#hashtaghttps://'
      extracted = Extractor.extract_hashtags_with_indices(text)
      expect(extracted).to eq [ { hashtag: 'hashtag', indices: [ 0, 8 ] } ]
    end

    it 'yields hashtags if a block is given' do
      text = '#hashtag'
      Extractor.extract_hashtags_with_indices(text) do |hashtag, start_position, end_position|
        expect(hashtag).to eq 'hashtag'
        expect(start_position).to eq 0
        expect(end_position).to eq 8
      end
    end
  end

  describe 'extract_cashtags_with_indices' do
    it 'returns []' do
      text = '$cashtag'
      extracted = Extractor.extract_cashtags_with_indices(text)
      expect(extracted).to eq []
    end
  end
end