kookaburra 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,5 +1,6 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
+ gem 'i18n'
3
4
  gem 'activesupport', '>= 3.0'
4
5
  gem 'rack-test'
5
6
 
data/Gemfile.lock CHANGED
@@ -4,6 +4,7 @@ GEM
4
4
  activesupport (3.1.3)
5
5
  multi_json (~> 1.0)
6
6
  git (1.2.5)
7
+ i18n (0.6.0)
7
8
  jeweler (1.6.4)
8
9
  bundler (~> 1.0)
9
10
  git (>= 1.2.5)
@@ -33,6 +34,7 @@ PLATFORMS
33
34
  DEPENDENCIES
34
35
  activesupport (>= 3.0)
35
36
  bundler (~> 1.0.0)
37
+ i18n
36
38
  jeweler (~> 1.6.4)
37
39
  minitest
38
40
  rack-test
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
data/kookaburra.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "kookaburra"
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Renewable Funding, LLC"]
@@ -40,6 +40,7 @@ Gem::Specification.new do |s|
40
40
  "lib/kookaburra/ui_driver/ui_component.rb",
41
41
  "lib/requires.rb",
42
42
  "test/helper.rb",
43
+ "test/kookaburra/ui_driver_test.rb",
43
44
  "test/kookaburra_test.rb"
44
45
  ]
45
46
  s.homepage = "http://github.com/projectdx/kookaburra"
@@ -52,6 +53,7 @@ Gem::Specification.new do |s|
52
53
  s.specification_version = 3
53
54
 
54
55
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
56
+ s.add_runtime_dependency(%q<i18n>, [">= 0"])
55
57
  s.add_runtime_dependency(%q<activesupport>, [">= 3.0"])
56
58
  s.add_runtime_dependency(%q<rack-test>, [">= 0"])
57
59
  s.add_development_dependency(%q<minitest>, [">= 0"])
@@ -61,6 +63,7 @@ Gem::Specification.new do |s|
61
63
  s.add_development_dependency(%q<rcov>, [">= 0"])
62
64
  s.add_development_dependency(%q<reek>, ["~> 1.2.8"])
63
65
  else
66
+ s.add_dependency(%q<i18n>, [">= 0"])
64
67
  s.add_dependency(%q<activesupport>, [">= 3.0"])
65
68
  s.add_dependency(%q<rack-test>, [">= 0"])
66
69
  s.add_dependency(%q<minitest>, [">= 0"])
@@ -71,6 +74,7 @@ Gem::Specification.new do |s|
71
74
  s.add_dependency(%q<reek>, ["~> 1.2.8"])
72
75
  end
73
76
  else
77
+ s.add_dependency(%q<i18n>, [">= 0"])
74
78
  s.add_dependency(%q<activesupport>, [">= 3.0"])
75
79
  s.add_dependency(%q<rack-test>, [">= 0"])
76
80
  s.add_dependency(%q<minitest>, [">= 0"])
@@ -6,11 +6,11 @@ module Kookaburra
6
6
  # This will fail if the options hash does not include a value for the key :browser
7
7
  def initialize(options = {})
8
8
  super()
9
- @browserish = options.fetch(:browser)
9
+ @opts = options
10
10
  end
11
11
 
12
12
  def browser
13
- @browserish
13
+ @browser ||= @opts.fetch(:browser)
14
14
  end
15
15
 
16
16
  def visit(*args)
@@ -1,6 +1,10 @@
1
+ require 'active_support/core_ext/string/inflections'
2
+
1
3
  module Kookaburra
2
4
  class UIDriver
3
5
  module HasUIComponent
6
+ UIComponentNotFound = Class.new(StandardError)
7
+
4
8
  module ClassMethods
5
9
  def ui_component(component_name)
6
10
  self.ui_component_names << component_name
@@ -34,23 +34,28 @@ module Kookaburra
34
34
 
35
35
  ##### Instance methods #####
36
36
 
37
+ # Returns the CSS locator used to locate the component in the DOM
38
+ def component_locator
39
+ raise "You must define component_locator in subclasses of UIComponent!"
40
+ end
41
+
37
42
  def visible!
38
43
  raise "#{self.class} not currently visible!" unless visible?
39
44
  end
40
45
 
41
46
  def visible?
42
47
  no_500_error!
43
- _visible?
44
- end
45
-
46
- def _visible?
47
48
  component_visible?
48
49
  end
49
- private :_visible?
50
50
 
51
+ # Default implementation navigates directly to this UIComponent's
52
+ # #component_path. If +opts[:query_params] is set to a Hash, the request
53
+ # will be made with the resulting querystring on the URL.
51
54
  def show(opts = {})
55
+ unless respond_to?(:component_path)
56
+ raise "You must either set component_path or redefine the #show method in UIComponent subclasses!"
57
+ end
52
58
  return if visible?
53
- raise "Subclass responsibility!" unless self.respond_to?(:component_path)
54
59
  path = component_path
55
60
  path << ( '?' + opts[:query_params].map{|kv| "%s=%s" % kv}.join('&') ) if opts[:query_params]
56
61
  visit path
@@ -66,11 +71,12 @@ module Kookaburra
66
71
  end
67
72
 
68
73
  def at_path?
69
- (component_path.to_a + alternate_paths.to_a).include?(browser.current_path)
74
+ (Array(component_path) + Array(alternate_paths)).include?(browser.current_path)
70
75
  end
71
76
 
72
77
  def component_visible?
73
- at_path? && browser.has_css?(component_locator)
78
+ return false if respond_to?(:component_path) && !at_path?
79
+ browser.has_css?(component_locator)
74
80
  end
75
81
 
76
82
  def alternate_paths
@@ -3,11 +3,21 @@ module Kookaburra
3
3
  include HasBrowser
4
4
  include HasUIComponent
5
5
 
6
- attr_reader :test_data
6
+ def test_data
7
+ @test_data ||= @opts.fetch(:test_data)
8
+ end
7
9
 
8
10
  def initialize(opts = {})
9
11
  super
10
- @test_data = opts.fetch(:test_data)
12
+ @opts = opts
13
+ end
14
+
15
+ def navigate_to(component_id, parameters = {})
16
+ if ui_component_names.include?(component_id)
17
+ self.send(component_id).show!(parameters)
18
+ else
19
+ raise UIComponentNotFound, "The #{component_id} component is not registered"
20
+ end
11
21
  end
12
22
  end
13
23
  end
@@ -0,0 +1,55 @@
1
+ require 'helper'
2
+
3
+ describe Kookaburra::UIDriver do
4
+ describe '#navigate_to' do
5
+ it 'raises a UIComponentNotFound if the specified UIComponent is not registered' do
6
+ ui = Kookaburra::UIDriver.new
7
+ assert_raises Kookaburra::UIDriver::UIComponentNotFound do
8
+ ui.navigate_to(:nonexistent_component)
9
+ end
10
+ end
11
+
12
+ Foo = Class.new do
13
+ @@last_instance = nil
14
+
15
+ def self.was_shown
16
+ @@last_instance.was_shown
17
+ end
18
+
19
+ def self.params
20
+ @@last_instance.params
21
+ end
22
+
23
+ def initialize(options)
24
+ @@last_instance = self
25
+ end
26
+
27
+ def show!(params = {})
28
+ @was_shown = true
29
+ @params = params
30
+ end
31
+ attr_reader :was_shown, :params
32
+ end
33
+
34
+ let(:ui_class) do
35
+ Class.new(Kookaburra::UIDriver) do
36
+ def browser; end
37
+ def test_data; end
38
+
39
+ ui_component :foo
40
+ end
41
+ end
42
+
43
+ it 'delegates to the UIComponent#show! method' do
44
+ ui = ui_class.new
45
+ ui.navigate_to :foo
46
+ assert Foo.was_shown, "#show! was never called on the Foo component"
47
+ end
48
+
49
+ it 'passed any additional options to the UIComponent#show! method' do
50
+ ui = ui_class.new
51
+ ui.navigate_to :foo, :bar => :baz
52
+ assert_equal({:bar => :baz}, Foo.params)
53
+ end
54
+ end
55
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kookaburra
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Renewable Funding, LLC
@@ -19,6 +19,20 @@ date: 2012-01-17 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ hash: 3
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ name: i18n
31
+ prerelease: false
32
+ type: :runtime
33
+ requirement: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ version_requirements: &id002 !ruby/object:Gem::Requirement
22
36
  none: false
23
37
  requirements:
24
38
  - - ">="
@@ -31,9 +45,9 @@ dependencies:
31
45
  name: activesupport
32
46
  prerelease: false
33
47
  type: :runtime
34
- requirement: *id001
48
+ requirement: *id002
35
49
  - !ruby/object:Gem::Dependency
36
- version_requirements: &id002 !ruby/object:Gem::Requirement
50
+ version_requirements: &id003 !ruby/object:Gem::Requirement
37
51
  none: false
38
52
  requirements:
39
53
  - - ">="
@@ -45,9 +59,9 @@ dependencies:
45
59
  name: rack-test
46
60
  prerelease: false
47
61
  type: :runtime
48
- requirement: *id002
62
+ requirement: *id003
49
63
  - !ruby/object:Gem::Dependency
50
- version_requirements: &id003 !ruby/object:Gem::Requirement
64
+ version_requirements: &id004 !ruby/object:Gem::Requirement
51
65
  none: false
52
66
  requirements:
53
67
  - - ">="
@@ -59,9 +73,9 @@ dependencies:
59
73
  name: minitest
60
74
  prerelease: false
61
75
  type: :development
62
- requirement: *id003
76
+ requirement: *id004
63
77
  - !ruby/object:Gem::Dependency
64
- version_requirements: &id004 !ruby/object:Gem::Requirement
78
+ version_requirements: &id005 !ruby/object:Gem::Requirement
65
79
  none: false
66
80
  requirements:
67
81
  - - ~>
@@ -75,9 +89,9 @@ dependencies:
75
89
  name: yard
76
90
  prerelease: false
77
91
  type: :development
78
- requirement: *id004
92
+ requirement: *id005
79
93
  - !ruby/object:Gem::Dependency
80
- version_requirements: &id005 !ruby/object:Gem::Requirement
94
+ version_requirements: &id006 !ruby/object:Gem::Requirement
81
95
  none: false
82
96
  requirements:
83
97
  - - ~>
@@ -91,9 +105,9 @@ dependencies:
91
105
  name: bundler
92
106
  prerelease: false
93
107
  type: :development
94
- requirement: *id005
108
+ requirement: *id006
95
109
  - !ruby/object:Gem::Dependency
96
- version_requirements: &id006 !ruby/object:Gem::Requirement
110
+ version_requirements: &id007 !ruby/object:Gem::Requirement
97
111
  none: false
98
112
  requirements:
99
113
  - - ~>
@@ -107,9 +121,9 @@ dependencies:
107
121
  name: jeweler
108
122
  prerelease: false
109
123
  type: :development
110
- requirement: *id006
124
+ requirement: *id007
111
125
  - !ruby/object:Gem::Dependency
112
- version_requirements: &id007 !ruby/object:Gem::Requirement
126
+ version_requirements: &id008 !ruby/object:Gem::Requirement
113
127
  none: false
114
128
  requirements:
115
129
  - - ">="
@@ -121,9 +135,9 @@ dependencies:
121
135
  name: rcov
122
136
  prerelease: false
123
137
  type: :development
124
- requirement: *id007
138
+ requirement: *id008
125
139
  - !ruby/object:Gem::Dependency
126
- version_requirements: &id008 !ruby/object:Gem::Requirement
140
+ version_requirements: &id009 !ruby/object:Gem::Requirement
127
141
  none: false
128
142
  requirements:
129
143
  - - ~>
@@ -137,7 +151,7 @@ dependencies:
137
151
  name: reek
138
152
  prerelease: false
139
153
  type: :development
140
- requirement: *id008
154
+ requirement: *id009
141
155
  description: Cucumber + Capybara = Kookaburra? It made sense at the time.
142
156
  email: devteam@renewfund.com
143
157
  executables: []
@@ -171,6 +185,7 @@ files:
171
185
  - lib/kookaburra/ui_driver/ui_component.rb
172
186
  - lib/requires.rb
173
187
  - test/helper.rb
188
+ - test/kookaburra/ui_driver_test.rb
174
189
  - test/kookaburra_test.rb
175
190
  homepage: http://github.com/projectdx/kookaburra
176
191
  licenses: