summaryrefslogtreecommitdiff
path: root/spec/helpers/tab_helper_spec.rb
blob: 9abf63d4bd407b2f5d9296100815b78441cdd3d5 (plain)
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
require 'spec_helper'

describe TabHelper do
  include ApplicationHelper

  describe 'nav_link' do
    before do
      allow(controller).to receive(:controller_name).and_return('foo')
      allow(self).to receive(:action_name).and_return('foo')
    end

    context 'with the content of the li' do
      it "captures block output" do
        expect(nav_link { "Testing Blocks" }).to match(/Testing Blocks/)
      end
    end

    context 'with controller param' do
      it "performs checks on the current controller" do
        expect(nav_link(controller: :foo)).to match(/<li class="active">/)
        expect(nav_link(controller: :bar)).not_to match(/active/)
        expect(nav_link(controller: [:foo, :bar])).to match(/active/)
      end

      context 'with action param' do
        it "performs checks on both controller and action when both are present" do
          expect(nav_link(controller: :bar, action: :foo)).not_to match(/active/)
          expect(nav_link(controller: :foo, action: :bar)).not_to match(/active/)
          expect(nav_link(controller: :foo, action: :foo)).to match(/active/)
        end
      end

      context 'with namespace in path notation' do
        before do
          allow(controller).to receive(:controller_path).and_return('bar/foo')
        end

        it 'performs checks on both controller and namespace' do
          expect(nav_link(controller: 'foo/foo')).not_to match(/active/)
          expect(nav_link(controller: 'bar/foo')).to match(/active/)
        end

        context 'with action param' do
          it "performs checks on both namespace, controller and action when they are all present" do
            expect(nav_link(controller: 'foo/foo', action: :foo)).not_to match(/active/)
            expect(nav_link(controller: 'bar/foo', action: :bar)).not_to match(/active/)
            expect(nav_link(controller: 'bar/foo', action: :foo)).to match(/active/)
          end
        end
      end
    end

    context 'with action param' do
      it "performs checks on the current action" do
        expect(nav_link(action: :foo)).to match(/<li class="active">/)
        expect(nav_link(action: :bar)).not_to match(/active/)
        expect(nav_link(action: [:foo, :bar])).to match(/active/)
      end
    end

    context 'with path param' do
      it "accepts a path shorthand" do
        expect(nav_link(path: 'foo#bar')).not_to match(/active/)
        expect(nav_link(path: 'foo#foo')).to match(/active/)
      end

      context 'with namespace' do
        before do
          allow(controller).to receive(:controller_path).and_return('bar/foo')
        end

        it 'accepts a path shorthand with namespace' do
          expect(nav_link(path: 'bar/foo#foo')).to match(/active/)
          expect(nav_link(path: 'foo/foo#foo')).not_to match(/active/)
        end
      end
    end

    it "passes extra html options to the list element" do
      expect(nav_link(action: :foo, html_options: { class: 'home' })).to match(/<li class="home active">/)
      expect(nav_link(html_options: { class: 'active' })).to match(/<li class="active">/)
    end
  end
end