warp 1.0.0 → 1.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c3ced099297c6651735bef5b460ba7d59ca44ea7
4
- data.tar.gz: a358f43f18681cd99088c1669ba3ff9dfdc8f98f
3
+ metadata.gz: a26f9c24ab61368b029824ef4d7da7224830142b
4
+ data.tar.gz: 1b26fa712ddd38e5e70ee757920f4ee8a2e89ed0
5
5
  SHA512:
6
- metadata.gz: e256fafcd4a89e333ee478fdff1a8fbc3c5fca8bb6cd84e666db9279bf1f0339d3cb8c3541b61d0b738051e6357a5c470bd60fc7b524875baad3fd63cea7ad3d
7
- data.tar.gz: 4163e2f6b8e369414508e0b0b59b160a316deaa5f0c5fda5a10ef4097299482221bf492c4cdbb563ac69f1da5af001b6084ccf58b196b2966e84b76cb0fc1de4
6
+ metadata.gz: 2a851430a6ff0293d2e4ed1978aae6afc1111af4a826ea7ce0fe006bcf64eea0279c2de0dd9f523b17df122f495a53a4427d3b5a3d87b3c0781aad9e05f82160
7
+ data.tar.gz: 13504117019ea432a0947c9b6601c8ace8d90d9113a001f33becd1103e03b5b18aec2495d2959dd9f8d53f705cb41e96012f2d0822082e300b6e265e92f8029e
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ - 1.0.1
2
+ - Fixed issue where matchers would error unless explicitly passed the controller object.
3
+
4
+ - 1.0.0
5
+ - Initial release
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Warp
2
2
 
3
3
  [![Build Status](https://travis-ci.org/thomasfedb/warp.png)](https://travis-ci.org/thomasfedb/warp)
4
+ [![Gem Version](https://badge.fury.io/rb/warp.png)](http://rubygems.org/gems/warp)
5
+ [![Code Climate](https://codeclimate.com/github/thomasfedb/warp.png)](https://codeclimate.com/github/thomasfedb/warp)
4
6
 
5
7
  RSpec Matchers to simplify writing unit and feature tests for your Rails applications.
6
8
 
@@ -18,7 +20,7 @@ And then execute:
18
20
 
19
21
  ## Usage
20
22
 
21
- ### assigns(:key)
23
+ ### assigns(key)
22
24
 
23
25
  Ensures that the specific assign is set:
24
26
 
@@ -26,7 +28,7 @@ Ensures that the specific assign is set:
26
28
  specify { expect(controller).to assign(:posts) }
27
29
  ```
28
30
 
29
- ### assigns(:key).with
31
+ ### assigns(key).with(object)
30
32
 
31
33
  Ensures that the specific assign is set with the specified value:
32
34
 
@@ -34,7 +36,7 @@ Ensures that the specific assign is set with the specified value:
34
36
  specify { expect(controller).to assign(:posts).with(posts) }
35
37
  ```
36
38
 
37
- ### assigns(:key).with_a
39
+ ### assigns(key).with_a(klass)
38
40
 
39
41
  Ensures that the specific assign is set with an instance of the specified class:
40
42
 
@@ -42,7 +44,7 @@ Ensures that the specific assign is set with an instance of the specified class:
42
44
  specify { expect(controller).to assign(:post).with_a(Post) }
43
45
  ```
44
46
 
45
- ### assigns(:key).with_a_new
47
+ ### assigns(key).with_a_new(klass)
46
48
 
47
49
  Ensures that the specific assign is set with a instance of the specified class that is not persisted:
48
50
 
@@ -50,14 +52,14 @@ Ensures that the specific assign is set with a instance of the specified class t
50
52
  specify { expect(controller).to assign(:post).with_a_new(Post) }
51
53
  ```
52
54
 
53
- ### set_flash(:key)
55
+ ### set_flash(key)
54
56
 
55
57
  Ensure that the specific flash key is set:
56
58
 
57
59
  ```ruby
58
60
  specify { expect(controller).to set_flash(:notice) }
59
61
  ```
60
- ### set_flash(:key).to("expected value")
62
+ ### set_flash(key).to(value)
61
63
 
62
64
  Ensure that the specific flash key is set:
63
65
 
@@ -6,8 +6,9 @@ module Warp
6
6
  attr_reader :assign_key, :assign_with, :assign_with_a, :assign_with_a_new
7
7
  attr_reader :controller, :failure_message, :failure_message_when_negated, :description
8
8
 
9
- def initialize(assign_key)
9
+ def initialize(assign_key, controller)
10
10
  @assign_key = assign_key
11
+ @controller = controller
11
12
  end
12
13
 
13
14
  def with(assign_eq)
@@ -25,8 +26,8 @@ module Warp
25
26
  self
26
27
  end
27
28
 
28
- def matches?(controller)
29
- @controller = controller
29
+ def matches?(actual)
30
+ @controller = actual if actual.is_a?(ActionController::Metal)
30
31
 
31
32
  if multiple_assertions?
32
33
  raise "Only one of .with, .with_a, and .with_a_new can be used with the assigns matcher."
@@ -49,9 +50,9 @@ module Warp
49
50
  end
50
51
 
51
52
  def check_assign_with
52
- @description = "assign @#{assign_key} with #{assign_with.inspect}"
53
- @failure_message = "expected @#{assign_key} to be assigned with #{assign_with.inspect} but was assigned with #{assign_value.inspect}"
54
- @failure_message_when_negated = "expected @#{assign_key} to not be assigned with #{assign_with.inspect}"
53
+ @description = "assign @#{assign_key} with #{description_of(assign_with)}"
54
+ @failure_message = "expected @#{assign_key} to be assigned with #{description_of(assign_with)} but was assigned with #{assign_value.inspect}"
55
+ @failure_message_when_negated = "expected @#{assign_key} to not be assigned with #{description_of(assign_with)}"
55
56
 
56
57
  values_match?(assign_with, assign_value)
57
58
  end
@@ -61,7 +62,7 @@ module Warp
61
62
  @failure_message = "expected @#{assign_key} to be assigned with an instance of #{assign_with_a.name} but was assigned with an instance of #{assign_value.class.name}"
62
63
  @failure_message_when_negated = "expected @#{assign_key} to not be assigned with an instance of #{assign_with_a.name}"
63
64
 
64
- has_ancestor?(assign_value, assign_with_a)
65
+ has_ancestor?(assign_with_a, assign_value)
65
66
  end
66
67
 
67
68
  def check_assign_with_a_new
@@ -69,7 +70,7 @@ module Warp
69
70
  @failure_message = "expected @#{assign_key} to be assigned with a new instance of #{assign_with_a_new.name} but was assigned with a #{assign_value.persisted? ? "persisted" : "new"} instance of #{assign_value.class.name}"
70
71
  @failure_message_when_negated = "expected @#{assign_key} to not be assigned with a new instance of #{assign_with_a_new.name}"
71
72
 
72
- has_ancestor?(assign_value, assign_with_a_new) && values_match?(false, assign_value.persisted?)
73
+ has_ancestor?(assign_with_a_new, assign_value) && values_match?(false, assign_value.persisted?)
73
74
  end
74
75
 
75
76
  def assign_value
@@ -80,13 +81,13 @@ module Warp
80
81
  [@assign_with, @assign_with_a, @assign_with_a_new].compact.size > 1
81
82
  end
82
83
 
83
- def has_ancestor?(object, klass)
84
- object.class.ancestors.any? {|ancestor| values_match?(klass, ancestor) }
84
+ def has_ancestor?(expected_class, actual)
85
+ actual.class.ancestors.any? {|ancestor| values_match?(expected_class, ancestor) }
85
86
  end
86
87
  end
87
88
 
88
89
  def assign(assign_key)
89
- AssignMatcher.new(assign_key)
90
+ AssignMatcher.new(assign_key, controller)
90
91
  end
91
92
  end
92
93
  end
@@ -6,8 +6,9 @@ module Warp
6
6
  attr_reader :flash_key, :expected_flash_value
7
7
  attr_reader :controller, :failure_message, :failure_message_when_negated, :description
8
8
 
9
- def initialize(flash_key)
9
+ def initialize(flash_key, controller)
10
10
  @flash_key = flash_key
11
+ @controller = controller
11
12
  end
12
13
 
13
14
  def to(expected_flash_value)
@@ -15,8 +16,8 @@ module Warp
15
16
  self
16
17
  end
17
18
 
18
- def matches?(controller)
19
- @controller = controller
19
+ def matches?(actual)
20
+ @controller = actual if actual.is_a?(ActionController::Metal)
20
21
 
21
22
  if expected_flash_value
22
23
  @description = "set flash[:#{flash_key}] to #{expected_flash_value.inspect}"
@@ -43,7 +44,7 @@ module Warp
43
44
  end
44
45
 
45
46
  def set_flash(flash_key)
46
- SetFlashMatcher.new(flash_key)
47
+ SetFlashMatcher.new(flash_key, controller)
47
48
  end
48
49
  end
49
50
  end
data/lib/warp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Warp
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -17,4 +17,5 @@ RSpec.configure do |config|
17
17
  config.order = 'random'
18
18
 
19
19
  config.extend ControllerHelpers
20
+ config.extend WithContextsHelpers
20
21
  end
@@ -1,5 +1,7 @@
1
1
  module ControllerHelpers
2
- def build_controller
2
+ def build_controller(name = :controller)
3
+ let(:controller_name) { name }
4
+
3
5
  let(:controller_class) do
4
6
  Class.new(ActionController::Metal).tap do |klass|
5
7
  klass.instance_eval do
@@ -26,7 +28,7 @@ module ControllerHelpers
26
28
  end
27
29
  end
28
30
 
29
- let(:controller) do
31
+ let(name) do
30
32
  controller_class.new.tap do |controller|
31
33
  controller.instance_variable_set(:@_request, request)
32
34
  end
@@ -40,7 +42,7 @@ module ControllerHelpers
40
42
  render text: ""
41
43
  end
42
44
 
43
- controller.dispatch(:index, request)
45
+ send(controller_name).dispatch(:index, request)
44
46
  end
45
47
  end
46
48
  end
@@ -0,0 +1,32 @@
1
+ module WithContextsHelpers
2
+ class WithContextsBuilder
3
+ attr_accessor :contexts, :examples, :group
4
+
5
+ def initialize(group)
6
+ @contexts = {}
7
+ @group = group
8
+ end
9
+
10
+ def context(name, &blk)
11
+ self.contexts[name] = blk
12
+ end
13
+
14
+ def behaviour(&blk)
15
+ self.examples = blk
16
+ end
17
+
18
+ def execute
19
+ contexts.each do |name, blk|
20
+ context = group.context(name)
21
+ context.instance_eval(&blk)
22
+ context.instance_eval(&examples)
23
+ end
24
+ end
25
+ end
26
+
27
+ def with_contexts(&blk)
28
+ builder = WithContextsBuilder.new(self)
29
+ builder.instance_eval(&blk)
30
+ builder.execute
31
+ end
32
+ end
@@ -1,211 +1,230 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Warp::ControllerMatchers::AssignMatcher do
4
- build_controller
5
-
6
- subject { assign(:assign) }
7
-
8
- describe "#description" do
9
- subject { super().matches?(controller); super().description }
10
-
11
- specify { expect(subject).to eq "assign @assign" }
12
- end
13
-
14
- context "when assigned" do
15
- controller_action do
16
- @assign = Object.new
17
- end
18
-
19
- specify { expect(subject).to match(controller) }
20
-
21
- describe "#failure_message_when_negated" do
22
- subject { super().matches?(controller); super().failure_message_when_negated }
23
-
24
- specify { expect(subject).to eq "expected @assign to not be assigned" }
25
- end
26
- end
4
+ with_contexts do
5
+ context "with implicit controller" do
6
+ build_controller(:controller)
7
+
8
+ let(:_controller) { controller }
27
9
 
28
- context "when not assigned" do
29
- controller_action do
30
- # no assign
10
+ subject { matcher.tap {|m| m.matches?(Object.new) } }
31
11
  end
32
-
33
- specify { expect(subject).to_not match(controller) }
34
12
 
35
- describe "#failure_message" do
36
- subject { super().matches?(controller); super().failure_message }
13
+ context "with explicit controller" do
14
+ build_controller(:other_controller)
15
+ let(:controller) { double("fake controller") }
37
16
 
38
- specify { expect(subject).to eq "expected @assign to be assigned" }
39
- end
40
- end
17
+ let(:_controller) { other_controller }
41
18
 
42
- describe "#with" do
43
- controller_action do
44
- @assign = spec.actual_assign_value
19
+ subject { matcher.tap {|m| m.matches?(other_controller) } }
45
20
  end
21
+
22
+ behaviour do
23
+ let(:matcher) { assign(:assign) }
46
24
 
47
- let(:actual_assign_value) { "foobar" }
48
- let(:expected_assign_value) { "foobar" }
49
-
50
- subject { super().with(expected_assign_value) }
25
+ describe "#description" do
26
+ subject { super().description }
51
27
 
52
- describe "#description" do
53
- subject { super().matches?(controller); super().description }
28
+ specify { expect(subject).to eq "assign @assign" }
29
+ end
54
30
 
55
- specify { expect(subject).to eq "assign @assign with #{expected_assign_value.inspect}" }
56
- end
31
+ context "when assigned" do
32
+ controller_action do
33
+ @assign = Object.new
34
+ end
57
35
 
58
- context "with the right value" do
59
- specify { expect(subject).to match(controller) }
60
-
61
- describe "#failure_message_when_negated" do
62
- subject { super().matches?(controller); super().failure_message_when_negated }
36
+ specify { expect(subject).to match(_controller) }
37
+
38
+ describe "#failure_message_when_negated" do
39
+ subject { super().failure_message_when_negated }
63
40
 
64
- specify { expect(subject).to eq "expected @assign to not be assigned with #{expected_assign_value.inspect}" }
41
+ specify { expect(subject).to eq "expected @assign to not be assigned" }
42
+ end
65
43
  end
66
- end
67
44
 
68
- context "with the wrong value" do
69
- let(:expected_assign_value) { "foobaz" }
45
+ context "when not assigned" do
46
+ controller_action do
47
+ # no assign
48
+ end
70
49
 
71
- specify { expect(subject).to_not match(controller) }
72
-
73
- describe "#failure_message" do
74
- subject { super().matches?(controller); super().failure_message }
50
+ specify { expect(subject).to_not match(_controller) }
51
+
52
+ describe "#failure_message" do
53
+ subject { super().failure_message }
75
54
 
76
- specify { expect(subject).to eq "expected @assign to be assigned with #{expected_assign_value.inspect} but was assigned with #{actual_assign_value.inspect}" }
55
+ specify { expect(subject).to eq "expected @assign to be assigned" }
56
+ end
77
57
  end
78
- end
79
- end
80
58
 
81
- describe "#with_a" do
82
- controller_action do
83
- @assign = spec.actual_assign_class.new
84
- end
59
+ describe "#with" do
60
+ controller_action do
61
+ @assign = spec.actual_assign_value
62
+ end
85
63
 
86
- let(:actual_assign_class) { Class.new.tap {|klass| allow(klass).to receive(:name) { "FooClass" } } }
87
- let(:expected_assign_class) { actual_assign_class }
64
+ let(:actual_assign_value) { "foobar" }
65
+ let(:expected_assign_value) { "foobar" }
88
66
 
89
- subject { assign(:assign).with_a(expected_assign_class) }
67
+ let(:matcher) { super().with(expected_assign_value) }
90
68
 
91
- describe "#description" do
92
- subject { super().matches?(controller); super().description }
69
+ describe "#description" do
70
+ subject { super().description }
93
71
 
94
- specify { expect(subject).to eq "assign @assign with an instance of #{expected_assign_class.name}" }
95
- end
72
+ specify { expect(subject).to eq "assign @assign with #{expected_assign_value.inspect}" }
73
+ end
96
74
 
97
- context "with the right class" do
98
- specify { expect(subject).to match(controller) }
75
+ context "with the right value" do
76
+ specify { expect(subject).to match(_controller) }
99
77
 
100
- describe "#failure_message_when_negated" do
101
- subject { super().matches?(controller); super().failure_message_when_negated }
78
+ describe "#failure_message_when_negated" do
79
+ subject { super().failure_message_when_negated }
102
80
 
103
- specify { expect(subject).to eq "expected @assign to not be assigned with an instance of #{expected_assign_class.name}" }
104
- end
105
- end
81
+ specify { expect(subject).to eq "expected @assign to not be assigned with #{expected_assign_value.inspect}" }
82
+ end
83
+ end
106
84
 
107
- context "with the wrong class" do
108
- let(:expected_assign_class) { Class.new.tap {|klass| allow(klass).to receive(:name) { "BarClass" } } }
85
+ context "with the wrong value" do
86
+ let(:expected_assign_value) { "foobaz" }
109
87
 
110
- specify { expect(subject).to_not match(controller) }
111
-
112
- describe "#failure_message" do
113
- subject { super().matches?(controller); super().failure_message }
88
+ specify { expect(subject).to_not match(_controller) }
89
+
90
+ describe "#failure_message" do
91
+ subject { super().failure_message }
114
92
 
115
- specify { expect(subject).to eq "expected @assign to be assigned with an instance of #{expected_assign_class.name} but was assigned with an instance of #{actual_assign_class.name}"
116
- }
93
+ specify { expect(subject).to eq "expected @assign to be assigned with #{expected_assign_value.inspect} but was assigned with #{actual_assign_value.inspect}" }
94
+ end
95
+ end
117
96
  end
118
- end
119
- end
120
97
 
121
- describe "#with_a_new" do
122
- controller_action do
123
- @assign = spec.actual_assign_class.new
124
- end
98
+ describe "#with_a" do
99
+ controller_action do
100
+ @assign = spec.actual_assign_class.new
101
+ end
125
102
 
126
- let(:actual_persisted?) { false }
127
- let(:actual_assign_class) do
128
- Class.new.tap do |klass|
129
- allow(klass).to receive(:name) { "FooClass" }
130
- allow_any_instance_of(klass).to receive(:persisted?) { actual_persisted? }
131
- end
132
- end
103
+ let(:actual_assign_class) { Class.new.tap {|klass| allow(klass).to receive(:name) { "FooClass" } } }
104
+ let(:expected_assign_class) { actual_assign_class }
133
105
 
134
- let(:expected_assign_class) { actual_assign_class }
106
+ let(:matcher) { super().with_a(expected_assign_class) }
135
107
 
136
- subject { assign(:assign).with_a_new(expected_assign_class) }
108
+ describe "#description" do
109
+ subject { super().description }
137
110
 
138
- describe "#description" do
139
- subject { super().matches?(controller); super().description }
111
+ specify { expect(subject).to eq "assign @assign with an instance of #{expected_assign_class.name}" }
112
+ end
140
113
 
141
- specify { expect(subject).to eq "assign @assign with a new instance of #{expected_assign_class.name}" }
142
- end
114
+ context "with the right class" do
115
+ specify { expect(subject).to match(_controller) }
116
+
117
+ describe "#failure_message_when_negated" do
118
+ subject { super().failure_message_when_negated }
143
119
 
144
- context "with a new object" do
145
- let(:actual_persisted?) { false }
120
+ specify { expect(subject).to eq "expected @assign to not be assigned with an instance of #{expected_assign_class.name}" }
121
+ end
122
+ end
146
123
 
147
- context "with the right class" do
148
- specify { expect(subject).to match(controller) }
124
+ context "with the wrong class" do
125
+ let(:expected_assign_class) { Class.new.tap {|klass| allow(klass).to receive(:name) { "BarClass" } } }
149
126
 
150
- describe "#failure_message_when_negated" do
151
- subject { super().matches?(controller); super().failure_message_when_negated }
127
+ specify { expect(subject).to_not match(_controller) }
128
+
129
+ describe "#failure_message" do
130
+ subject { super().failure_message }
152
131
 
153
- specify { expect(subject).to eq "expected @assign to not be assigned with a new instance of #{expected_assign_class.name}" }
132
+ specify { expect(subject).to eq "expected @assign to be assigned with an instance of #{expected_assign_class.name} but was assigned with an instance of #{actual_assign_class.name}"
133
+ }
134
+ end
154
135
  end
155
136
  end
156
137
 
157
- context "with a descendant class" do
138
+ describe "#with_a_new" do
139
+ controller_action do
140
+ @assign = spec.actual_assign_class.new
141
+ end
142
+
143
+ let(:actual_persisted?) { false }
158
144
  let(:actual_assign_class) do
159
- Class.new(super())
145
+ Class.new.tap do |klass|
146
+ allow(klass).to receive(:name) { "FooClass" }
147
+ allow_any_instance_of(klass).to receive(:persisted?) { actual_persisted? }
148
+ end
160
149
  end
161
150
 
162
- specify { expect(subject).to match(controller) }
151
+ let(:expected_assign_class) { actual_assign_class }
163
152
 
164
- describe "#failure_message_when_negated" do
165
- subject { super().matches?(controller); super().failure_message_when_negated }
153
+ let(:matcher) { super().with_a_new(expected_assign_class) }
166
154
 
167
- specify { expect(subject).to eq "expected @assign to not be assigned with a new instance of #{expected_assign_class.name}" }
168
- end
169
- end
155
+ describe "#description" do
156
+ subject { super().description }
170
157
 
171
- context "with the wrong class" do
172
- let(:expected_assign_class) { Class.new.tap {|klass| allow(klass).to receive(:name) { "BarClass" } } }
158
+ specify { expect(subject).to eq "assign @assign with a new instance of #{expected_assign_class.name}" }
159
+ end
173
160
 
174
- specify { expect(subject).to_not match(controller) }
175
-
176
- describe "#failure_message" do
177
- subject { super().matches?(controller); super().failure_message }
161
+ context "with a new object" do
162
+ let(:actual_persisted?) { false }
178
163
 
179
- specify { expect(subject).to eq "expected @assign to be assigned with a new instance of #{expected_assign_class.name} but was assigned with a new instance of #{actual_assign_class.name}"
180
- }
181
- end
182
- end
183
- end
164
+ context "with the right class" do
165
+ specify { expect(subject).to match(_controller) }
184
166
 
185
- context "with a persisted object" do
186
- let(:actual_persisted?) { true }
167
+ describe "#failure_message_when_negated" do
168
+ subject { super().failure_message_when_negated }
187
169
 
188
- context "with the right class" do
189
- specify { expect(subject).to_not match(controller) }
190
-
191
- describe "#failure_message" do
192
- subject { super().matches?(controller); super().failure_message }
170
+ specify { expect(subject).to eq "expected @assign to not be assigned with a new instance of #{expected_assign_class.name}" }
171
+ end
172
+ end
173
+
174
+ context "with a descendant class" do
175
+ let(:actual_assign_class) do
176
+ Class.new(super())
177
+ end
178
+
179
+ specify { expect(subject).to match(_controller) }
180
+
181
+ describe "#failure_message_when_negated" do
182
+ subject { super().failure_message_when_negated }
193
183
 
194
- specify { expect(subject).to eq "expected @assign to be assigned with a new instance of #{expected_assign_class.name} but was assigned with a persisted instance of #{actual_assign_class.name}"
195
- }
184
+ specify { expect(subject).to eq "expected @assign to not be assigned with a new instance of #{expected_assign_class.name}" }
185
+ end
186
+ end
187
+
188
+ context "with the wrong class" do
189
+ let(:expected_assign_class) { Class.new.tap {|klass| allow(klass).to receive(:name) { "BarClass" } } }
190
+
191
+ specify { expect(subject).to_not match(_controller) }
192
+
193
+ describe "#failure_message" do
194
+ subject { super().failure_message }
195
+
196
+ specify { expect(subject).to eq "expected @assign to be assigned with a new instance of #{expected_assign_class.name} but was assigned with a new instance of #{actual_assign_class.name}"
197
+ }
198
+ end
199
+ end
196
200
  end
197
- end
198
201
 
199
- context "with the wrong class" do
200
- let(:expected_assign_class) { Class.new.tap {|klass| allow(klass).to receive(:name) { "BarClass" } } }
202
+ context "with a persisted object" do
203
+ let(:actual_persisted?) { true }
201
204
 
202
- specify { expect(subject).to_not match(controller) }
203
-
204
- describe "#failure_message" do
205
- subject { super().matches?(controller); super().failure_message }
205
+ context "with the right class" do
206
+ specify { expect(subject).to_not match(_controller) }
207
+
208
+ describe "#failure_message" do
209
+ subject { super().failure_message }
210
+
211
+ specify { expect(subject).to eq "expected @assign to be assigned with a new instance of #{expected_assign_class.name} but was assigned with a persisted instance of #{actual_assign_class.name}"
212
+ }
213
+ end
214
+ end
215
+
216
+ context "with the wrong class" do
217
+ let(:expected_assign_class) { Class.new.tap {|klass| allow(klass).to receive(:name) { "BarClass" } } }
218
+
219
+ specify { expect(subject).to_not match(_controller) }
220
+
221
+ describe "#failure_message" do
222
+ subject { super().failure_message }
206
223
 
207
- specify { expect(subject).to eq "expected @assign to be assigned with a new instance of #{expected_assign_class.name} but was assigned with a persisted instance of #{actual_assign_class.name}"
208
- }
224
+ specify { expect(subject).to eq "expected @assign to be assigned with a new instance of #{expected_assign_class.name} but was assigned with a persisted instance of #{actual_assign_class.name}"
225
+ }
226
+ end
227
+ end
209
228
  end
210
229
  end
211
230
  end
@@ -1,80 +1,99 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Warp::ControllerMatchers::SetFlashMatcher do
4
- build_controller
4
+ with_contexts do
5
+ context "with implicit controller" do
6
+ build_controller(:controller)
7
+
8
+ let(:_controller) { controller }
5
9
 
6
- let(:flash_key) { [:notice, :error].sample }
10
+ subject { matcher.tap {|m| m.matches?(Object.new) } }
11
+ end
12
+
13
+ context "with explicit controller" do
14
+ build_controller(:other_controller)
15
+ let(:controller) { double("fake controller") }
7
16
 
8
- subject { set_flash(flash_key) }
17
+ let(:_controller) { other_controller }
9
18
 
10
- describe "#description" do
11
- subject { super().matches?(controller); super().description }
19
+ subject { matcher.tap {|m| m.matches?(other_controller) } }
20
+ end
12
21
 
13
- specify { expect(subject).to eq "set flash[:#{flash_key}]" }
14
- end
22
+ behaviour do
23
+ let(:flash_key) { [:notice, :error].sample }
15
24
 
16
- context "with a flash set" do
17
- let(:actual_flash_value) { Object.new }
25
+ let(:matcher) { set_flash(flash_key) }
18
26
 
19
- controller_action do
20
- flash[spec.flash_key] = spec.actual_flash_value
21
- end
27
+ describe "#description" do
28
+ subject { super().description }
22
29
 
23
- specify { expect(subject).to match(controller) }
24
-
25
- describe "#failure_message_when_negated" do
26
- subject { super().matches?(controller); super().failure_message_when_negated }
30
+ specify { expect(subject).to eq "set flash[:#{flash_key}]" }
31
+ end
27
32
 
28
- specify { expect(subject).to eq "expected flash[:#{flash_key}] to not be set" }
29
- end
30
- end
33
+ context "with a flash set" do
34
+ let(:actual_flash_value) { Object.new }
31
35
 
32
- context "with no flash set" do
33
- specify { expect(subject).to_not match(controller) }
34
-
35
- describe "#failure_message" do
36
- subject { super().matches?(controller); super().failure_message }
36
+ controller_action do
37
+ flash[spec.flash_key] = spec.actual_flash_value
38
+ end
37
39
 
38
- specify { expect(subject).to eq "expected flash[:#{flash_key}] to be set" }
39
- end
40
- end
40
+ specify { expect(subject).to match(_controller) }
41
+
42
+ describe "#failure_message_when_negated" do
43
+ subject { super().failure_message_when_negated }
41
44
 
42
- describe "#to" do
43
- let(:expected_flash_value) { Object.new }
45
+ specify { expect(subject).to eq "expected flash[:#{flash_key}] to not be set" }
46
+ end
47
+ end
44
48
 
45
- subject { set_flash(flash_key).to(expected_flash_value) }
49
+ context "with no flash set" do
50
+ specify { expect(subject).to_not match(_controller) }
51
+
52
+ describe "#failure_message" do
53
+ subject { super().failure_message }
46
54
 
47
- describe "#description" do
48
- subject { super().matches?(controller); super().description }
55
+ specify { expect(subject).to eq "expected flash[:#{flash_key}] to be set" }
56
+ end
57
+ end
49
58
 
50
- specify { expect(subject).to eq "set flash[:#{flash_key}] to #{expected_flash_value.inspect}" }
51
- end
59
+ describe "#to" do
60
+ let(:expected_flash_value) { Object.new }
52
61
 
53
- context "with expexted flash value" do
54
- let(:actual_flash_value) { expected_flash_value }
62
+ let(:matcher) { super().to(expected_flash_value) }
55
63
 
56
- controller_action do
57
- flash[spec.flash_key] = spec.actual_flash_value
58
- end
64
+ describe "#description" do
65
+ subject { super().description }
59
66
 
60
- specify { expect(subject).to match(controller) }
61
-
62
- describe "#failure_message_when_negated" do
63
- subject { super().matches?(controller); super().failure_message_when_negated }
67
+ specify { expect(subject).to eq "set flash[:#{flash_key}] to #{expected_flash_value.inspect}" }
68
+ end
64
69
 
65
- specify { expect(subject).to eq "expected flash[:#{flash_key}] to not be set to #{expected_flash_value.inspect}" }
66
- end
67
- end
70
+ context "with expexted flash value" do
71
+ let(:actual_flash_value) { expected_flash_value }
68
72
 
69
- context "with unexpexted flash value" do
70
- let(:actual_flash_value) { Object.new }
73
+ controller_action do
74
+ flash[spec.flash_key] = spec.actual_flash_value
75
+ end
71
76
 
72
- specify { expect(subject).to_not match(controller) }
73
-
74
- describe "#failure_message" do
75
- subject { super().matches?(controller); super().failure_message }
77
+ specify { expect(subject).to match(_controller) }
78
+
79
+ describe "#failure_message_when_negated" do
80
+ subject { super().failure_message_when_negated }
81
+
82
+ specify { expect(subject).to eq "expected flash[:#{flash_key}] to not be set to #{expected_flash_value.inspect}" }
83
+ end
84
+ end
85
+
86
+ context "with unexpexted flash value" do
87
+ let(:actual_flash_value) { Object.new }
88
+
89
+ specify { expect(subject).to_not match(_controller) }
90
+
91
+ describe "#failure_message" do
92
+ subject { super().failure_message }
76
93
 
77
- specify { expect(subject).to eq "expected flash[:#{flash_key}] to be set to #{expected_flash_value.inspect}" }
94
+ specify { expect(subject).to eq "expected flash[:#{flash_key}] to be set to #{expected_flash_value.inspect}" }
95
+ end
96
+ end
78
97
  end
79
98
  end
80
99
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: warp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Drake-Brockman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-05 00:00:00.000000000 Z
11
+ date: 2014-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -91,6 +91,7 @@ files:
91
91
  - ".ruby-gemset"
92
92
  - ".ruby-version"
93
93
  - ".travis.yml"
94
+ - CHANGELOG.md
94
95
  - Gemfile
95
96
  - Guardfile
96
97
  - LICENSE
@@ -107,6 +108,7 @@ files:
107
108
  - spec/spec_helper.rb
108
109
  - spec/support/controller_helpers.rb
109
110
  - spec/support/match_helpers.rb
111
+ - spec/support/with_contexts_helpers.rb
110
112
  - spec/warp/controller_matchers/assign_matcher_spec.rb
111
113
  - spec/warp/controller_matchers/set_flash_matcher_spec.rb
112
114
  - warp.gemspec
@@ -138,5 +140,6 @@ test_files:
138
140
  - spec/spec_helper.rb
139
141
  - spec/support/controller_helpers.rb
140
142
  - spec/support/match_helpers.rb
143
+ - spec/support/with_contexts_helpers.rb
141
144
  - spec/warp/controller_matchers/assign_matcher_spec.rb
142
145
  - spec/warp/controller_matchers/set_flash_matcher_spec.rb