kookaburra 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.markdown CHANGED
@@ -177,15 +177,15 @@ might look:
177
177
  end
178
178
 
179
179
  Then "I see my order summary" do
180
- ui.order_summary.should be_visible
180
+ ui.should be_displaying_order_summary
181
181
  end
182
182
 
183
183
  Then "I see that my default payment options will be used" do
184
- ui.order_summary.payment_options.should be_account_default_options
184
+ ui.should be_displaying_account_default_payment_options_in_order_summary
185
185
  end
186
186
 
187
187
  Then "I see that my default shipping options will be used" do
188
- ui.order_summary.shipping_options.should be_account_default_options
188
+ ui.should be_displaying_account_default_shipping_options_in_order_summary
189
189
  end
190
190
 
191
191
  The step definitions contain neither explicitly shared state (instance
@@ -199,11 +199,11 @@ scenario, it's not a big deal to have the following in your step definitions (as
199
199
  long as the author of the spec confirms that they really mean the same thing):
200
200
 
201
201
  Then "I see my order summary" do
202
- ui.order_summary.should be_visible
202
+ ui.should be_displaying_order_summary
203
203
  end
204
204
 
205
205
  Then "I see a summary of my order" do
206
- ui.order_summary.should be_visible
206
+ ui.should be_displaying_order_summary
207
207
  end
208
208
 
209
209
  The step definitions are nothing more than a natural language reference to an
@@ -234,8 +234,8 @@ Using RSpec, the test implementation would be as follows:
234
234
  ui.choose_to_check_out
235
235
 
236
236
  ui.order_summary.should be_visible
237
- ui.order_summary.payment_options.should be_account_default_options
238
- ui.order_summary.shipping_options.should be_account_default_options
237
+ ui.should be_displaying_account_default_payment_options_in_order_summary
238
+ ui.should be_displaying_account_default_shipping_options_in_order_summary
239
239
  end
240
240
  end
241
241
 
@@ -371,7 +371,7 @@ within your subclass:
371
371
 
372
372
  class MyApplication::Kookaburra::UIDriver < Kookaburra::UIDriver
373
373
  # makes an instance of MyApplication::Kookaburra::UIDriver::SignInScreen
374
- # available via the instance method #sign_in_screen
374
+ # available via the private instance method #sign_in_screen
375
375
  ui_component :sign_in_screen
376
376
 
377
377
  def sign_in(account_nickname)
@@ -381,6 +381,12 @@ within your subclass:
381
381
  end
382
382
  end
383
383
 
384
+ The call to `Kookaburra::UIDriver.ui_component` defines the UIComponent accessor
385
+ as a private method in order to discourage accessing your UIComponent objects
386
+ directly in the test implementation layer. Instead, you should build out your
387
+ testing DSL in the `UIDriver` subclass as was done with the `#sign_in` method
388
+ above.
389
+
384
390
  ### The Window Driver Layer ###
385
391
 
386
392
  While your `GivenDriver` and `UIDriver` provide a DSL that represents actions
@@ -430,6 +436,43 @@ You describe the various user interface components by sub-classing
430
436
  end
431
437
  end
432
438
 
439
+ A `UIComponent` subclass can also contain nested components of its own. For
440
+ instance:
441
+
442
+ class MyApplication::Kookaburra::UIDriver::UserList::NewUserForm < Kookaburra::UIDriver::UIComponent
443
+ component_locator '#new_user_form'
444
+ end
445
+
446
+ class MyApplication::Kookaburra::UIDriver::UserList < Kookaburra::UIDriver::UIComponent
447
+ component_locator '#user_list'
448
+
449
+ ui_component :new_user_form
450
+ end
451
+
452
+ In this case, `UserList#new_user_form` is still defined as a private method. In
453
+ order to manipulate it from your domain driver, you can define either explicit
454
+ methods or delegators on `UserList`:
455
+
456
+ class MyApplication::Kookaburra::UIDriver::UserList < Kookaburra::UIDriver::UIComponent
457
+ def fill_in_new_user_form(username, password, full_name)
458
+ new_user_form.username = username
459
+ new_user_form.password = password
460
+ new_user_form.full_name = full_name
461
+ end
462
+
463
+ delegate :submit!, :to => :new_user_form, :prefix => true
464
+ end
465
+
466
+ class MyApplication::Kookaburra::UIDriver < Kookaburra::UIDriver
467
+ ui_component :user_list
468
+
469
+ def create_new_user_with_valid_data
470
+ user = default_user_data # factory method defined elsewhere
471
+ user_list.fill_in_new_user_form(user[:username], user[:password], user[:full_name])
472
+ user_list.new_user_form_submit!
473
+ end
474
+ end
475
+
433
476
  ### The Application Driver Layer ###
434
477
 
435
478
  `Kookaburra::APIDriver`, `Kookaburra::UIDriver` and
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.12.0
1
+ 0.13.0
data/kookaburra.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "kookaburra"
8
- s.version = "0.12.0"
8
+ s.version = "0.13.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"]
12
- s.date = "2012-01-28"
12
+ s.date = "2012-01-29"
13
13
  s.description = "Cucumber + Capybara = Kookaburra? It made sense at the time."
14
14
  s.email = "devteam@renewfund.com"
15
15
  s.extra_rdoc_files = [
@@ -35,7 +35,6 @@ Gem::Specification.new do |s|
35
35
  "lib/kookaburra/ui_driver.rb",
36
36
  "lib/kookaburra/ui_driver/mixins/has_browser.rb",
37
37
  "lib/kookaburra/ui_driver/mixins/has_strategies.rb",
38
- "lib/kookaburra/ui_driver/mixins/has_subcomponents.rb",
39
38
  "lib/kookaburra/ui_driver/mixins/has_ui_component.rb",
40
39
  "lib/kookaburra/ui_driver/ui_component.rb",
41
40
  "test/helper.rb",
@@ -15,6 +15,7 @@ module Kookaburra
15
15
  # TODO: memoize the following line?
16
16
  component_class(component_name).new(options)
17
17
  end
18
+ private component_name
18
19
 
19
20
  define_method("has_#{component_name}?") do
20
21
  send(component_name).visible?
@@ -1,6 +1,5 @@
1
1
  require 'kookaburra/ui_driver/mixins/has_browser'
2
2
  require 'kookaburra/ui_driver/mixins/has_strategies'
3
- require 'kookaburra/ui_driver/mixins/has_subcomponents'
4
3
  require 'kookaburra/ui_driver/mixins/has_ui_component'
5
4
 
6
5
  module Kookaburra
@@ -10,7 +9,6 @@ module Kookaburra
10
9
  include HasBrowser
11
10
  include HasStrategies
12
11
  include HasUIComponent
13
- extend HasSubcomponents
14
12
 
15
13
  ##### Class macros #####
16
14
  def self.component_locator(locator)
@@ -3,12 +3,26 @@ require 'minitest/mock'
3
3
 
4
4
  describe Kookaburra::UIDriver::UIComponent do
5
5
  it 'can have nested UIComponents' do
6
- InnerComponent = Class.new(Kookaburra::UIDriver::UIComponent)
6
+ InnerComponentA = Class.new(Kookaburra::UIDriver::UIComponent) do
7
+ def visible?
8
+ true
9
+ end
10
+ end
11
+
12
+ InnerComponentB = Class.new(Kookaburra::UIDriver::UIComponent) do
13
+ def visible?
14
+ false
15
+ end
16
+ end
17
+
7
18
  OuterComponent = Class.new(Kookaburra::UIDriver::UIComponent) do
8
- ui_component :inner_component
19
+ ui_component :inner_component_a
20
+ ui_component :inner_component_b
9
21
  end
22
+
10
23
  component = OuterComponent.new(:browser => Object.new)
11
- assert_kind_of InnerComponent, component.inner_component
24
+ assert_equal true, component.has_inner_component_a?
25
+ assert_equal false, component.has_inner_component_b?
12
26
  end
13
27
 
14
28
  let(:component_class) do
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: 47
4
+ hash: 43
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 12
8
+ - 13
9
9
  - 0
10
- version: 0.12.0
10
+ version: 0.13.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Renewable Funding, LLC
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-01-28 00:00:00 Z
18
+ date: 2012-01-29 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -187,7 +187,6 @@ files:
187
187
  - lib/kookaburra/ui_driver.rb
188
188
  - lib/kookaburra/ui_driver/mixins/has_browser.rb
189
189
  - lib/kookaburra/ui_driver/mixins/has_strategies.rb
190
- - lib/kookaburra/ui_driver/mixins/has_subcomponents.rb
191
190
  - lib/kookaburra/ui_driver/mixins/has_ui_component.rb
192
191
  - lib/kookaburra/ui_driver/ui_component.rb
193
192
  - test/helper.rb
@@ -1,10 +0,0 @@
1
- module Kookaburra
2
- class UIDriver
3
- module HasSubcomponents
4
- # Nothing to see here, really -- this just gives us a way to logically group subsections in a file
5
- def subcomponent(name, &proc)
6
- class_eval &proc
7
- end
8
- end
9
- end
10
- end