kookaburra 2.0.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.travis.yml +1 -3
  4. data/README.markdown +259 -181
  5. data/Rakefile +11 -2
  6. data/kookaburra.gemspec +1 -0
  7. data/lib/kookaburra.rb +24 -9
  8. data/lib/kookaburra/api_client.rb +1 -1
  9. data/lib/kookaburra/api_driver.rb +1 -1
  10. data/lib/kookaburra/assertion.rb +1 -1
  11. data/lib/kookaburra/configuration.rb +25 -9
  12. data/lib/kookaburra/configuration/proxy.rb +55 -0
  13. data/lib/kookaburra/dependency_accessor.rb +7 -0
  14. data/lib/kookaburra/exceptions.rb +11 -3
  15. data/lib/kookaburra/mental_model.rb +5 -5
  16. data/lib/kookaburra/rack_app_server.rb +3 -12
  17. data/lib/kookaburra/test_helpers.rb +53 -12
  18. data/lib/kookaburra/ui_driver/ui_component.rb +9 -2
  19. data/lib/kookaburra/version.rb +1 -1
  20. data/spec/integration/test_a_rack_application_spec.rb +3 -2
  21. data/spec/integration/test_multiple_applications_spec.rb +96 -0
  22. data/spec/kookaburra/api_client_spec.rb +6 -5
  23. data/spec/kookaburra/api_driver_spec.rb +18 -0
  24. data/spec/kookaburra/configuration/proxy_spec.rb +39 -0
  25. data/spec/kookaburra/configuration_spec.rb +54 -2
  26. data/spec/kookaburra/mental_model_spec.rb +22 -20
  27. data/spec/kookaburra/test_helpers_spec.rb +60 -24
  28. data/spec/kookaburra/ui_driver/scoped_browser_spec.rb +3 -2
  29. data/spec/kookaburra/ui_driver/ui_component/address_bar_spec.rb +2 -1
  30. data/spec/kookaburra/ui_driver/ui_component_spec.rb +48 -14
  31. data/spec/kookaburra/ui_driver_spec.rb +4 -3
  32. data/spec/kookaburra_spec.rb +19 -14
  33. data/spec/spec_helper.rb +79 -0
  34. data/spec/support/shared_examples/it_can_have_ui_components.rb +2 -2
  35. data/spec/support/shared_examples/it_can_make_assertions.rb +3 -3
  36. data/spec/support/shared_examples/it_has_a_dependency_accessor.rb +3 -4
  37. metadata +25 -2
@@ -1,3 +1,3 @@
1
1
  class Kookaburra
2
- VERSION = "2.0.0"
2
+ VERSION = "3.0.0"
3
3
  end
@@ -1,3 +1,4 @@
1
+ require 'spec_helper'
1
2
  require 'kookaburra/test_helpers'
2
3
  require 'kookaburra/api_client'
3
4
  require 'kookaburra/rack_app_server'
@@ -7,7 +8,7 @@ require 'uuid'
7
8
 
8
9
  require 'support/json_api_app_and_kookaburra_drivers'
9
10
 
10
- describe "testing a Rack application with Kookaburra" do
11
+ describe "testing a Rack application with Kookaburra", :slow do
11
12
  include Kookaburra::TestHelpers
12
13
 
13
14
  describe "with an HTML interface" do
@@ -40,7 +41,7 @@ describe "testing a Rack application with Kookaburra" do
40
41
  api.create_widget(:widget_b, :name => 'Widget B')
41
42
  end
42
43
 
43
- define_method(:widgets) { k.get_data(:widgets) }
44
+ define_method(:widgets) { get_data(:widgets) }
44
45
 
45
46
  it "runs the tests against the application's UI" do
46
47
  ui.sign_in(:bob)
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+ require 'kookaburra/test_helpers'
3
+ require 'kookaburra/rack_app_server'
4
+ require 'capybara'
5
+ require 'capybara/webkit'
6
+ require 'uuid'
7
+
8
+ require 'support/json_api_app_and_kookaburra_drivers'
9
+
10
+ describe 'testing multiple applications', :slow do
11
+ include Kookaburra::TestHelpers
12
+
13
+ OtherJsonApiApp = Class.new(JsonApiApp)
14
+ MyOtherUIDriver = Class.new(MyUIDriver)
15
+ MyOtherAPIDriver = Class.new(MyAPIDriver)
16
+
17
+ app_server_1 = Kookaburra::RackAppServer.new do
18
+ JsonApiApp.new
19
+ end
20
+
21
+ app_server_2 = Kookaburra::RackAppServer.new do
22
+ OtherJsonApiApp.new
23
+ end
24
+
25
+ before(:all) do
26
+ app_server_1.boot
27
+ app_server_2.boot
28
+
29
+ Kookaburra.configure do |c|
30
+ c.application(:app_1) do |a|
31
+ a.ui_driver_class = MyUIDriver
32
+ a.api_driver_class = MyAPIDriver
33
+ a.app_host = 'http://127.0.0.1:%d' % app_server_1.port
34
+ end
35
+ c.application(:app_2) do |a|
36
+ a.ui_driver_class = MyOtherUIDriver
37
+ a.api_driver_class = MyOtherAPIDriver
38
+ a.app_host = 'http://127.0.0.1:%d' % app_server_2.port
39
+ end
40
+ c.browser = Capybara::Session.new(:webkit)
41
+ c.server_error_detection do |browser|
42
+ browser.has_css?('head title', :text => 'Internal Server Error', :visible => false)
43
+ end
44
+ end
45
+ end
46
+
47
+ after(:all) do
48
+ app_server_1.shutdown
49
+ app_server_2.shutdown
50
+ end
51
+
52
+ specify 'once you have defined multiple apps, the top-level #api and #ui methods raise errors' do
53
+ expect { api } .to raise_error( Kookaburra::AmbiguousDriverError )
54
+ expect { ui } .to raise_error( Kookaburra::AmbiguousDriverError )
55
+ end
56
+
57
+ context "with different data in each app" do
58
+ before(:each) do
59
+ app_1.api.create_user(:bob)
60
+ app_2.api.create_user(:sue)
61
+ app_1.api.create_widget(:widget_a)
62
+ app_2.api.create_widget(:widget_b)
63
+ end
64
+
65
+ let(:widgets) { get_data(:widgets) }
66
+
67
+ it 'can speak to both application APIs' do
68
+ expect(app_1.api.widgets).to include widgets[:widget_a]
69
+ expect(app_1.api.widgets).not_to include widgets[:widget_b]
70
+
71
+ expect(app_2.api.widgets).not_to include widgets[:widget_a]
72
+ expect(app_2.api.widgets).to include widgets[:widget_b]
73
+ end
74
+
75
+ it 'can speak to both application UIs' do
76
+ app_1.ui.sign_in(:bob)
77
+ app_1.ui.view_widget_list
78
+ expect(app_1.ui.widget_list.widgets).to include widgets[:widget_a]
79
+ expect(app_1.ui.widget_list.widgets).to_not include widgets[:widget_b]
80
+
81
+ app_2.ui.sign_in(:sue)
82
+ app_2.ui.view_widget_list
83
+ expect(app_2.ui.widget_list.widgets).to_not include widgets[:widget_a]
84
+ expect(app_2.ui.widget_list.widgets).to include widgets[:widget_b]
85
+ end
86
+
87
+ it 'shares a single browser session' do
88
+ app_1.ui.sign_in(:bob)
89
+ app_1.ui.view_widget_list
90
+ app_2.ui.sign_in(:sue)
91
+ expect(app_1.ui.widget_list).to be_not_visible
92
+ app_1.ui.view_widget_list
93
+ expect(app_1.ui.widget_list).to be_visible
94
+ end
95
+ end
96
+ end
@@ -1,3 +1,4 @@
1
+ require 'spec_helper'
1
2
  require 'kookaburra/api_client'
2
3
 
3
4
  describe Kookaburra::APIClient do
@@ -16,7 +17,7 @@ describe Kookaburra::APIClient do
16
17
  shared_examples_for 'any type of HTTP request' do |http_verb|
17
18
  context "(#{http_verb})" do
18
19
  before(:each) do
19
- client.stub(http_verb => response)
20
+ allow(client).to receive(http_verb).and_return(response)
20
21
  end
21
22
 
22
23
  it 'returns the response body' do
@@ -24,8 +25,8 @@ describe Kookaburra::APIClient do
24
25
  end
25
26
 
26
27
  it 'raises an UnexpectedResponse if the request is not successful' do
27
- response.stub(code: 500)
28
- client.stub(http_verb).and_raise(RestClient::Exception.new(response))
28
+ allow(response).to receive(:code) { 500 }
29
+ allow(client).to receive(http_verb).and_raise(RestClient::Exception.new(response))
29
30
  expect{ api.send(http_verb, '/foo') } \
30
31
  .to raise_error(Kookaburra::UnexpectedResponse)
31
32
  end
@@ -116,7 +117,7 @@ describe Kookaburra::APIClient do
116
117
  shared_examples_for 'it encodes request data' do |http_verb|
117
118
  context "(#{http_verb})" do
118
119
  before(:each) do
119
- client.stub(http_verb => response)
120
+ allow(client).to receive(http_verb) { response }
120
121
  end
121
122
 
122
123
  context 'when a custom encoder is specified' do
@@ -132,7 +133,7 @@ describe Kookaburra::APIClient do
132
133
 
133
134
  it "encodes input to requests" do
134
135
  expect(client).to receive(http_verb) do |_, data, _|
135
- data.should == :some_encoded_data
136
+ expect(data).to eq :some_encoded_data
136
137
  response
137
138
  end
138
139
 
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kookaburra::APIDriver do
4
+ subject {
5
+ klass = Class.new(described_class) do
6
+ def do_something
7
+ api
8
+ end
9
+ end
10
+ klass.new(configuration)
11
+ }
12
+
13
+ let(:configuration) { double(:configuration) }
14
+
15
+ it 'requires subclasses to implement their #api method' do
16
+ expect{ subject.do_something }.to raise_error(Kookaburra::ConfigurationError)
17
+ end
18
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kookaburra::Configuration::Proxy do
4
+ subject { described_class.new(name: :foobar, basis: basis) }
5
+
6
+ let(:basis) {
7
+ Kookaburra::Configuration.new.tap do |c|
8
+ c.ui_driver_class = default_ui_driver_class
9
+ end
10
+ }
11
+
12
+ let(:default_ui_driver_class) { double(:default_ui_driver_class) }
13
+
14
+ it 'it knows the name with which it was created' do
15
+ expect(subject.name).to eq :foobar
16
+ end
17
+
18
+ it 'delegates to its basis by default' do
19
+ expect(subject.ui_driver_class).to equal default_ui_driver_class
20
+ end
21
+
22
+ it 'does not delegate attributes that are set explicitly to a value' do
23
+ ui_driver_class_override = double(:ui_driver_class_override)
24
+ subject.ui_driver_class = ui_driver_class_override
25
+ expect(basis.ui_driver_class).to equal default_ui_driver_class
26
+ expect(subject.ui_driver_class).to equal ui_driver_class_override
27
+ end
28
+
29
+ it 'does not delegate attributes that are set explicitly to nil' do
30
+ subject.ui_driver_class = nil
31
+ expect(basis.ui_driver_class).to equal default_ui_driver_class
32
+ expect(subject.ui_driver_class).to be_nil
33
+ end
34
+
35
+ it 'responds only to methods to which its basis also responds' do
36
+ expect{ subject.not_a_defined_method }.to raise_error(NameError)
37
+ expect{ subject.not_a_defined_method = :something }.to raise_error(NameError)
38
+ end
39
+ end
@@ -1,3 +1,4 @@
1
+ require 'spec_helper'
1
2
  require 'kookaburra/configuration'
2
3
  require 'support/shared_examples/it_has_a_dependency_accessor'
3
4
 
@@ -6,7 +7,6 @@ describe Kookaburra::Configuration do
6
7
  it_behaves_like :it_has_a_dependency_accessor, :ui_driver_class
7
8
  it_behaves_like :it_has_a_dependency_accessor, :browser
8
9
  it_behaves_like :it_has_a_dependency_accessor, :app_host
9
- it_behaves_like :it_has_a_dependency_accessor, :mental_model
10
10
  it_behaves_like :it_has_a_dependency_accessor, :logger
11
11
 
12
12
  describe '#server_error_detection' do
@@ -23,7 +23,7 @@ describe Kookaburra::Configuration do
23
23
  .with('http://example.com') \
24
24
  .and_return(:a_parsed_uri)
25
25
  subject.app_host = 'http://example.com'
26
- subject.app_host_uri.should == :a_parsed_uri
26
+ expect(subject.app_host_uri).to eq :a_parsed_uri
27
27
  end
28
28
 
29
29
  it 'changes if #app_host changes' do
@@ -36,4 +36,56 @@ describe Kookaburra::Configuration do
36
36
  expect(subject.app_host_uri).to eq 'http://foo.example.com'.to_sym
37
37
  end
38
38
  end
39
+
40
+ describe '#mental_model' do
41
+ it 'returns an instance of MentalModel' do
42
+ expect(subject.mental_model).to be_kind_of Kookaburra::MentalModel
43
+ end
44
+
45
+ it 'always returns the same instance' do
46
+ expect(subject.mental_model.__id__).to eq subject.mental_model.__id__
47
+ end
48
+ end
49
+
50
+ describe '#application' do
51
+ let(:proxy) { double(:proxy) }
52
+ let(:app_kookaburra) { double(:app_kookaburra) }
53
+
54
+ before(:each) do
55
+ allow(Kookaburra::Configuration::Proxy).to receive(:new) { proxy }
56
+ allow(Kookaburra).to receive(:new) { app_kookaburra }
57
+ end
58
+
59
+ it 'builds a proxy configuration based on this one' do
60
+ expect(Kookaburra::Configuration::Proxy).to receive(:new) \
61
+ .with(name: :foo, basis: subject)
62
+ subject.application(:foo)
63
+ end
64
+
65
+ it 'yields the proxy configuration' do
66
+ expect{ |b| subject.application(:foo, &b) }.to yield_with_args(proxy)
67
+ end
68
+
69
+ it 'builds a new Kookaburra instance with the proxy configuration' do
70
+ expect(Kookaburra).to receive(:new).with(proxy)
71
+ subject.application(:foo)
72
+ end
73
+
74
+ it 'stores the new Kookaburra instance by name' do
75
+ expect(subject.applications.keys).to_not include(:foo)
76
+ subject.application(:foo)
77
+ expect(subject.applications[:foo]).to equal app_kookaburra
78
+ end
79
+ end
80
+
81
+ describe '#has_named_applications?' do
82
+ it 'is true when a named application is configured' do
83
+ subject.application(:foo)
84
+ expect(subject).to have_named_applications
85
+ end
86
+
87
+ it 'is false when no named applications are configured' do
88
+ expect(subject).to_not have_named_applications
89
+ end
90
+ end
39
91
  end
@@ -1,13 +1,14 @@
1
+ require 'spec_helper'
1
2
  require 'kookaburra/mental_model'
2
3
 
3
4
  describe Kookaburra::MentalModel do
4
5
  describe '#method_missing' do
5
6
  it 'returns a Collection' do
6
- subject.foo.should be_kind_of(Kookaburra::MentalModel::Collection)
7
+ expect(subject.foo).to be_kind_of(Kookaburra::MentalModel::Collection)
7
8
  end
8
9
 
9
10
  it 'returns different Collections for different messages' do
10
- subject.foo.should_not === subject.bar
11
+ expect(subject.foo).to_not equal subject.bar
11
12
  end
12
13
  end
13
14
 
@@ -19,7 +20,7 @@ describe Kookaburra::MentalModel do
19
20
  collection[:foo] = 'foo'
20
21
  collection[:bar] = 'bar'
21
22
  collection[:baz] = 'baz'
22
- collection.values_at(:foo, :baz).should == %w(foo baz)
23
+ expect(collection.values_at(:foo, :baz)).to eq %w(foo baz)
23
24
  end
24
25
  end
25
26
 
@@ -28,7 +29,7 @@ describe Kookaburra::MentalModel do
28
29
  collection[:foo] = 'foo'
29
30
  collection[:bar] = 'bar'
30
31
  collection[:baz] = 'baz'
31
- collection.slice(:foo, :baz).should == {:foo => 'foo', :baz => 'baz'}
32
+ expect(collection.slice(:foo, :baz)).to eq({:foo => 'foo', :baz => 'baz'})
32
33
  end
33
34
  end
34
35
 
@@ -38,25 +39,25 @@ describe Kookaburra::MentalModel do
38
39
  collection[:bar] = 'bar'
39
40
  collection[:baz] = 'baz'
40
41
  collection[:yak] = 'yak'
41
- collection.except(:foo, :baz).should == {:bar => 'bar', :yak => 'yak'}
42
+ expect(collection.except(:foo, :baz)).to eq({:bar => 'bar', :yak => 'yak'})
42
43
  end
43
44
  end
44
45
 
45
46
  describe '#delete' do
46
47
  it 'deletes and returns the item matching the specified key' do
47
48
  collection[:baz] = 'baz'
48
- collection.delete(:baz).should == 'baz'
49
- lambda { collection[:baz] }.should raise_error(Kookaburra::UnknownKeyError)
49
+ expect(collection.delete(:baz)).to eq 'baz'
50
+ expect{ collection[:baz] }.to raise_error(Kookaburra::UnknownKeyError)
50
51
  end
51
52
 
52
53
  it 'persists the deleted key/value pair to the #deleted subcollection' do
53
54
  collection[:baz] = 'baz'
54
55
  collection.delete(:baz)
55
- collection.deleted[:baz].should == 'baz'
56
+ expect(collection.deleted[:baz]).to eq 'baz'
56
57
  end
57
58
 
58
59
  it 'raises a Kookaburra::UnknownKeyError exception if trying to delete a missing key' do
59
- lambda { collection.delete(:snerf) }.should \
60
+ expect{ collection.delete(:snerf) }.to \
60
61
  raise_error(Kookaburra::UnknownKeyError, "Can't find mental_model.widgets[:snerf]. Did you forget to set it?")
61
62
  end
62
63
  end
@@ -70,57 +71,58 @@ describe Kookaburra::MentalModel do
70
71
 
71
72
  it 'deletes all members of collection for whom given block evaluates to false' do
72
73
  collection.delete_if { |k,v| k.to_s != v }
73
- collection.keys.should =~ [:foo, :baz]
74
+ expect(collection.keys).to match_array [:foo, :baz]
74
75
  end
75
76
 
76
77
  it 'adds deleted members of collection to #deleted subcollection' do
77
78
  collection.delete_if { |k,v| k.to_s != v }
78
- collection.deleted.keys.should == [:bar]
79
+ expect(collection.deleted.keys).to eq [:bar]
79
80
  end
80
81
 
81
82
  it 'returns hash of items not deleted' do
82
- collection.delete_if { |k,v| k.to_s != v }.should == { :foo => 'foo', :baz => 'baz' }
83
+ expect(collection.delete_if { |k,v| k.to_s != v }).to \
84
+ eq({:foo => 'foo', :baz => 'baz'})
83
85
  end
84
86
  end
85
87
 
86
88
  describe '#deleted' do
87
89
  it 'generates a new subcollection if none exists' do
88
90
  initialized_collection = collection
89
- Kookaburra::MentalModel::Collection.should_receive(:new) \
91
+ expect(Kookaburra::MentalModel::Collection).to receive(:new) \
90
92
  .with("#{initialized_collection.name}.deleted")
91
93
  initialized_collection.deleted
92
94
  end
93
95
 
94
96
  it 'returns the deleted subcollection if already initialized' do
95
97
  deleted_collection = collection.deleted
96
- collection.deleted.should === deleted_collection
98
+ expect(collection.deleted).to equal deleted_collection
97
99
  end
98
100
  end
99
101
 
100
102
  it 'raises a Kookaburra::UnknownKeyError exception for #[] with a missing key' do
101
- lambda { collection[:foo] }.should \
103
+ expect{ collection[:foo] }.to \
102
104
  raise_error(Kookaburra::UnknownKeyError, "Can't find mental_model.widgets[:foo]. Did you forget to set it?")
103
105
  end
104
106
 
105
107
  describe '#dup' do
106
108
  it 'returns a different object' do
107
109
  new_collection = collection.dup
108
- new_collection.__id__.should_not === collection.__id__
110
+ expect(new_collection).to_not equal collection
109
111
  end
110
112
 
111
113
  it 'returns an object with equal values to the original' do
112
114
  collection[:foo] = :bar
113
115
  collection[:baz] = :bam
114
116
  new_collection = collection.dup
115
- new_collection[:foo].should == :bar
116
- new_collection[:baz].should == :bam
117
+ expect(new_collection[:foo]).to eq :bar
118
+ expect(new_collection[:baz]).to eq :bam
117
119
  end
118
120
 
119
121
  it 'is a deep copy' do
120
122
  collection[:foo] = {:bar => 'baz'}
121
123
  new_collection = collection.dup
122
- new_collection[:foo][:bar].should == 'baz'
123
- new_collection[:foo][:bar].__id__.should_not === collection[:foo][:bar].__id__
124
+ expect(new_collection[:foo][:bar]).to eq 'baz'
125
+ expect(new_collection[:foo][:bar]).to_not equal collection[:foo][:bar]
124
126
  end
125
127
 
126
128
  context 'when there are deleted items present' do
@@ -1,42 +1,78 @@
1
+ require 'spec_helper'
1
2
  require 'kookaburra/test_helpers'
2
3
 
3
4
  describe Kookaburra::TestHelpers do
4
- include Kookaburra::TestHelpers
5
-
6
- before(:all) do
7
- Kookaburra.configure do |c|
8
- c.api_driver_class = Kookaburra::APIDriver
9
- c.ui_driver_class = Kookaburra::UIDriver
5
+ subject {
6
+ Object.new.tap do |o|
7
+ o.extend Kookaburra::TestHelpers
10
8
  end
9
+ }
10
+
11
+ let(:k_kookaburra) {
12
+ double(:k_kookaburra, api: k_api, ui: k_ui, get_data: k_data)
13
+ }
14
+ let(:k_api) { double(:k_api) }
15
+ let(:k_ui) { double(:k_ui) }
16
+ let(:k_data) { double(:k_data) }
17
+
18
+ before(:each) do
19
+ allow(Kookaburra).to receive(:new) { k_kookaburra }
11
20
  end
12
21
 
13
- after(:all) do
14
- Kookaburra.configure do |c|
15
- c.api_driver_class = nil
16
- c.ui_driver_class = nil
22
+ shared_examples_for 'it has no individual applications configured' do
23
+ it 'forwards #api to the main Kookaburra instance' do
24
+ expect(subject.api).to equal k_api
17
25
  end
18
- end
19
26
 
20
- describe "#k" do
21
- it "returns an instance of Kookaburra" do
22
- k.should be_kind_of(Kookaburra)
27
+ it 'forwards #ui to the main Kookaburra instance' do
28
+ expect(subject.ui).to equal k_ui
23
29
  end
24
30
 
25
- it "memoizes" do
26
- a = k; b = k
27
- a.should equal(b)
31
+ it 'forwards #get_data to the main Kookaburra instance' do
32
+ expect(subject.get_data).to equal k_data
28
33
  end
29
34
  end
30
35
 
31
- describe "methods delegated to #k" do
32
- it "includes #api" do
33
- k.should_receive(:api)
34
- api
36
+ context "when no individual applications are configured" do
37
+ it_behaves_like 'it has no individual applications configured'
38
+ end
39
+
40
+ context "when individual applications are configured" do
41
+ before(:each) do
42
+ Kookaburra.configure do |c|
43
+ c.application(:foo)
44
+ c.application(:bar)
45
+ end
46
+ end
47
+
48
+ specify '#api raises an AmbiguousDriverError' do
49
+ expect{ subject.api }.to raise_error Kookaburra::AmbiguousDriverError
35
50
  end
36
51
 
37
- it "includes #ui" do
38
- k.should_receive(:ui)
39
- ui
52
+ specify '#ui raises an AmbiguousDriverError' do
53
+ expect{ subject.api }.to raise_error Kookaburra::AmbiguousDriverError
54
+ end
55
+
56
+ specify '#get_data is forwarded to the main Kookaburra instance' do
57
+ expect(subject.get_data).to equal k_data
58
+ end
59
+
60
+ it 'has a helper method for each configured application' do
61
+ expect(subject.foo).to equal Kookaburra.configuration.applications[:foo]
62
+ expect(subject.bar).to equal Kookaburra.configuration.applications[:bar]
63
+ end
64
+
65
+ context "and then Kookaburra is reconfigured" do
66
+ before(:each) do
67
+ Kookaburra.configure {}
68
+ end
69
+
70
+ it_behaves_like 'it has no individual applications configured'
71
+
72
+ it 'does not have helper methods for the previously configured applications' do
73
+ expect{ subject.foo }.to raise_error(NameError)
74
+ expect{ subject.bar }.to raise_error(NameError)
75
+ end
40
76
  end
41
77
  end
42
78
  end