Module: Kameleon::Dsl::See

Included in:
User::Abstract
Defined in:
lib/kameleon/dsl/see.rb

Instance Method Summary collapse

Instance Method Details

#not_see(*content) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/kameleon/dsl/see.rb', line 88

def not_see(*content)
  options = extract_options(content)

  case options.class.name
    when 'String'
      session.should_not rspec_world.have_content(options)
    when 'Array'
      options.each do |content_part|
        session.should_not rspec_world.have_content(content_part)
      end
    when 'Hash'
      options.each_pair do |value, locators|
        case value
          when :button, :buttons
            one_or_all(locators).each do |selector|
              session.should_not rspec_world.have_button(selector)
            end
          when :error_message_for, :error_messages_for
            one_or_all(locators).each do |selector|
              session.find(:xpath, '//div[@id="error_explanation"]').should_not rspec_world.have_content(selector.capitalize)
            end
          when :image, :images
            one_or_all(locators).each do |selector|
              session.should_not rspec_world.have_xpath("//img[@alt=\"#{selector}\"] | //img[@src=\"#{selector}\"]")
            end
          when :field, :fields
            one_or_all(locators).each do |locator|
              session.should_not rspec_world.have_field(locator)
            end
          when :link, :links
            if locators.respond_to?(:each_pair)
              locators.each_pair do |link_text, url|
                session.should_not rspec_world.have_link(link_text, :href => url)
              end
            else
              one_or_all(locators).each { |text| session.should_not rspec_world.have_link(text) }
            end
          when :ordered
            nodes = session.all(:xpath, locators.collect { |n| "//node()[text()= \"#{n}\"]" }.join(' | '))
            nodes.map(&:text).should_not == locators
          when :readonly
            one_or_all(locators).each do |selector|
              see :field => selector
              case session.driver
                when Capybara::Selenium::Driver
                  session.find_field(selector)[value].should == 'false'
                when Capybara::RackTest::Driver
                  session.find_field(selector)[value].should rspec_world.be_nil
              end
            end
          when :empty
            one_or_all(locators).each do |locator|
              see :field => locator
              session.find_field(locator).value.to_s.should_not == ''
            end
          else
            one_or_all(locators).each do |locator|
              session.should_not rspec_world.have_field(locator, :with => value)
            end
        end
      end
    else
      raise "Not Implemented Structure #{options} :: #{options.class}"
  end
end

#see(*content) ⇒ Object



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
# File 'lib/kameleon/dsl/see.rb', line 4

def see(*content)
  options = extract_options(content)

  case options.class.name
    when 'String'
      session.should rspec_world.have_content(options)
    when 'Array'
      options.each do |content_part|
        see(content_part)
      end
    when 'Hash'
      options.each_pair do |value, locator|
        case value.class.name
          when 'Symbol'
            case value
              when :button, :buttons
                one_or_all(locator).each do |selector|
                  session.should rspec_world.have_button(selector)
                end
              when :checked, :unchecked
                one_or_all(locator).each do |selector|
                  session.should rspec_world.send("have_#{value.to_s}_field", selector)
                end
              when :disabled, :readonly
                one_or_all(locator).each do |selector|
                  see :field => selector
                  case session.driver
                    when Capybara::Selenium::Driver
                      session.find_field(selector)[value].should == 'true'
                    when Capybara::RackTest::Driver
                      session.find_field(selector)[value].should ==(value.to_s)
                  end
                end
              when :empty
                one_or_all(locator).each do |selector|
                  see :field => selector
                  session.find_field(selector).value.to_s.should == ''
                end
              when :error_message_for, :error_messages_for
                one_or_all(locator).each do |selector|
                  session.find(:xpath, '//div[@id="error_explanation"]').should rspec_world.have_content(selector.capitalize)
                end
              when :field, :fields
                one_or_all(locator).each do |selector|
                  session.should rspec_world.have_field(selector)
                end
              when :image, :images
                one_or_all(locator).each do |selector|
                  session.should rspec_world.have_xpath("//img[@alt=\"#{selector}\"] | //img[@src=\"#{selector}\"]")
                end
              when :selected
                locator.each_pair do |selected_value, selected_locator|
                  session.should rspec_world.have_select(selected_locator, :selected => selected_value)
                end
              when :unselected
                locator.each_pair do |selected_value, selected_locator|
                  session.should rspec_world.have_no_select(selected_locator, :selected => selected_value)
                end
              when :link, :links
                if locator.respond_to?(:each_pair)
                  locator.each_pair do |link_text, url|
                    session.should rspec_world.have_link(link_text, :href => url)
                  end
                else
                  one_or_all(locator).each { |text| session.should rspec_world.have_link(text) }
                end
              when :ordered
                #! we should extend this beyond simply text match (allow to pass full xpath)
                nodes = session.all(:xpath, locator.collect { |n| "//node()[text()= \"#{n}\"]" }.join(' | '))
                nodes.map(&:text).should == locator
              else
                raise("User can not see #{value} - you need to teach him how")
            end
          when 'Fixnum'
            session.should ::Capybara::RSpecMatchers::HaveMatcher.new(*(get_selector(locator) << {:count => value}))
          else
            session.should rspec_world.have_field(locator, :with => value)
        end
      end
    else
      raise "Not Implemented Structure #{options} :: #{options.class}"
  end
end