File: bots_test.rb

package info (click to toggle)
ruby-browser 5.3.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 872 kB
  • sloc: ruby: 4,752; makefile: 13
file content (111 lines) | stat: -rw-r--r-- 2,834 bytes parent folder | download
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# frozen_string_literal: true

require "test_helper"

class BotsTest < Minitest::Test
  Browser.bot_user_agents.each do |key, ua|
    test "detect #{key} as bot" do
      browser = Browser.new(ua)
      assert browser.bot?
    end
  end

  test "don't detect as bot" do
    browser = Browser.new(Browser["CHROME"])
    refute browser.bot?
  end

  test "returns bot name" do
    browser = Browser.new(Browser["GOOGLE_BOT"])
    assert_equal "Google Bot", browser.bot.name

    browser = Browser.new(Browser["FACEBOOK_BOT"])
    assert_equal "Facebook Bot", browser.bot.name
  end

  test "returns nil for non-bots" do
    browser = Browser.new(Browser["CHROME"])
    assert_nil browser.bot.name
  end

  Browser.search_engine_user_agents.each do |key, ua|
    test "detects #{key} as search engine" do
      browser = Browser.new(ua)
      assert browser.bot.search_engine?
    end
  end

  test "detects Daumoa" do
    browser = Browser.new(Browser["DAUMOA"])

    assert_equal :ie, browser.id
    assert_equal "Internet Explorer", browser.name
    assert_equal "0.0", browser.msie_full_version
    assert_equal "0", browser.msie_version
    assert_equal "0.0", browser.full_version
    assert_equal "0", browser.version
    assert browser.ie?
    assert browser.bot?
    refute browser.platform.windows10?
    refute browser.platform.windows_phone?
    refute browser.edge?
    refute browser.device.mobile?
    refute browser.webkit?
    refute browser.chrome?
    refute browser.safari?
  end

  test "custom android user agent (#144)" do
    browser = Browser.new(Browser["CUSTOM_APP"])

    assert browser.platform.android?
    refute browser.bot?
  end

  test "extends list in runtime" do
    browser = Browser.new("Faraday/0.9.2")
    refute browser.bot?

    Browser::Bot.bots["faraday"] = "Faraday"
    assert browser.bot?

    Browser::Bot.bots.delete("faraday")
  end

  test "detects recognized bots using common libs" do
    browser = Browser.new(Browser.bot_user_agents["LINKEDIN"])

    assert browser.bot?
    assert_equal "LinkedIn", browser.bot.name
  end

  test "tells why user agent is considered a bot" do
    matcher = Browser::Bot.why?(Browser.bot_user_agents["LINKEDIN"])

    assert_equal Browser::Bot::KnownBotsMatcher, matcher
  end

  test "adds custom bot matcher" do
    Browser::Bot.matchers << ->(ua, _) { ua.match?(/some-script/) }
    browser = Browser.new("some-script")

    assert browser.bot?
    assert_equal "Generic Bot", browser.bot.name
  end

  %w[
    content-fetcher
    content-crawler
    some-search-engine
    monitoring-service
    content-spider
    some-bot
  ].each do |ua|
    test "detects user agents based on keywords (#{ua})" do
      browser = Browser.new(ua)

      assert browser.bot?
      assert_equal Browser::Bot::KeywordMatcher, browser.bot.why?
    end
  end
end