File: has_link_spec.rb

package info (click to toggle)
ruby-capybara 3.40.0%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,368 kB
  • sloc: ruby: 23,988; javascript: 752; makefile: 11
file content (79 lines) | stat: -rw-r--r-- 3,155 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
# frozen_string_literal: true

Capybara::SpecHelper.spec '#has_link?' do
  before do
    @session.visit('/with_html')
  end

  it 'should be true if the given link is on the page' do
    expect(@session).to have_link('foo')
    expect(@session).to have_link('awesome title')
    expect(@session).to have_link('A link', href: '/with_simple_html')
    expect(@session).to have_link(:'A link', href: :'/with_simple_html')
    expect(@session).to have_link('A link', href: %r{/with_simple_html})
    expect(@session).to have_link('labore', target: '_self')
  end

  it 'should be false if the given link is not on the page' do
    expect(@session).not_to have_link('monkey')
    expect(@session).not_to have_link('A link', href: '/nonexistent-href')
    expect(@session).not_to have_link('A link', href: /nonexistent/)
    expect(@session).not_to have_link('labore', target: '_blank')
  end

  it 'should notify if an invalid locator is specified' do
    allow(Capybara::Helpers).to receive(:warn).and_return(nil)
    @session.has_link?(@session)
    expect(Capybara::Helpers).to have_received(:warn).with(/Called from: .+/)
  end

  context 'with focused:', requires: [:active_element] do
    it 'should be true if the given link is on the page and has focus' do
      @session.send_keys(:tab)

      expect(@session).to have_link('labore', focused: true)
    end

    it 'should be false if the given link is on the page and does not have focus' do
      expect(@session).to have_link('labore', focused: false)
    end
  end

  it 'should raise an error if an invalid option is passed' do
    expect do
      expect(@session).to have_link('labore', invalid: true)
    end.to raise_error(ArgumentError, 'Invalid option(s) :invalid, should be one of :above, :below, :left_of, :right_of, :near, :count, :minimum, :maximum, :between, :text, :id, :class, :style, :visible, :obscured, :exact, :exact_text, :normalize_ws, :match, :wait, :filter_set, :focused, :href, :alt, :title, :target, :download')
  end
end

Capybara::SpecHelper.spec '#has_no_link?' do
  before do
    @session.visit('/with_html')
  end

  it 'should be false if the given link is on the page' do
    expect(@session).not_to have_no_link('foo')
    expect(@session).not_to have_no_link('awesome title')
    expect(@session).not_to have_no_link('A link', href: '/with_simple_html')
    expect(@session).not_to have_no_link('labore', target: '_self')
  end

  it 'should be true if the given link is not on the page' do
    expect(@session).to have_no_link('monkey')
    expect(@session).to have_no_link('A link', href: '/nonexistent-href')
    expect(@session).to have_no_link('A link', href: %r{/nonexistent-href})
    expect(@session).to have_no_link('labore', target: '_blank')
  end

  context 'with focused:', requires: [:active_element] do
    it 'should be true if the given link is on the page and has focus' do
      expect(@session).to have_no_link('labore', focused: true)
    end

    it 'should be false if the given link is on the page and does not have focus' do
      @session.send_keys(:tab)

      expect(@session).to have_no_link('labore', focused: false)
    end
  end
end