active_cucumber 0.0.10 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/active_cucumber.gemspec +1 -1
- data/features/active_cucumber/create_many.feature +1 -1
- data/features/active_cucumber/diff_all/arrays_of_objects.feature +32 -0
- data/features/active_cucumber/diff_all/context_values.feature +19 -0
- data/features/active_cucumber/diff_all/converting_data.feature +41 -0
- data/features/active_cucumber/diff_all/filtering_columns.feature +32 -0
- data/features/active_cucumber/diff_all/filtering_rows.feature +35 -0
- data/features/active_cucumber/{diff_all.feature → diff_all/mismatching_data.feature} +9 -38
- data/lib/active_cucumber/cucumparer.rb +9 -8
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82983292d8a2b4e6df0cd50cd877e235f614275c
|
4
|
+
data.tar.gz: da7a7f2dfa980ebda5473095de60f5330cd065ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b60d2f0802e3ab25501630987719839a9c8a1eb95b9502a2a4a6e8851a1e2d6b1da4f61b5463f0d78382f1c0498c00a6e05cd3985b5a98ee548070bbb15723c
|
7
|
+
data.tar.gz: 9b7b0e600056a6166b62f94d19c40b9e6921faca98acfac453928022cb16bd900ebf5c1dbcf0d95552b7ae3955c4c47f71b89069298588829c46bd75c8f4da8c
|
data/Gemfile.lock
CHANGED
data/active_cucumber.gemspec
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = 'active_cucumber'
|
6
|
-
s.version = '0.0
|
6
|
+
s.version = '0.1.0'
|
7
7
|
s.authors = ['Kevin Goslar']
|
8
8
|
s.email = ['kevin.goslar@gmail.com']
|
9
9
|
s.summary = %s(ActiveRecord tools for Cucumber)
|
@@ -66,7 +66,7 @@ Feature: ActiveCucumber.create_many
|
|
66
66
|
When running "ActiveCucumber.create_many Episode, table" with this table:
|
67
67
|
| SHOW | NAME | YEAR |
|
68
68
|
| Star Trek TNG | Encounter at Farpoint | 1987 |
|
69
|
-
| Star Trek TOS | The Paradise Syndrome |
|
69
|
+
| Star Trek TOS | The Paradise Syndrome | 1968 |
|
70
70
|
Then the database contains the given episodes
|
71
71
|
And the database contains the shows "Star Trek TNG" and "Star Trek TOS"
|
72
72
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: Comparing arrays of ActiveRecord instances
|
2
|
+
|
3
|
+
As a developer having complex database query logic
|
4
|
+
I want to be able to compare against a manually created array of ActiveRecord objects
|
5
|
+
So that I can use ActiveCucumber for a large variety of data sources.
|
6
|
+
|
7
|
+
Rules:
|
8
|
+
- one can give an ActiveRecord class or an array of ActiveRecord instances to ActiveCucumber
|
9
|
+
- ActiveCucumber choses the Cucumperer based on the class of each record
|
10
|
+
|
11
|
+
|
12
|
+
Background:
|
13
|
+
Given the episodes:
|
14
|
+
| NAME | YEAR |
|
15
|
+
| Encounter at Farpoint | 1987 |
|
16
|
+
| All Good Things | 1994 |
|
17
|
+
|
18
|
+
|
19
|
+
Scenario: comparing all instances of an ActiveRecord class
|
20
|
+
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
21
|
+
| NAME | YEAR |
|
22
|
+
| Encounter at Farpoint | 1987 |
|
23
|
+
| All Good Things | 1994 |
|
24
|
+
Then the test passes
|
25
|
+
|
26
|
+
|
27
|
+
Scenario: comparing an array of ActiveRecord instances
|
28
|
+
When running "ActiveCucumber.diff_all! [Episode.first, Episode.last], table" with this table:
|
29
|
+
| NAME | YEAR |
|
30
|
+
| Encounter at Farpoint | 1987 |
|
31
|
+
| All Good Things | 1994 |
|
32
|
+
Then the test passes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Feature: Using contextual data
|
2
|
+
|
3
|
+
As a developer wanting to use non-database data in my database specs
|
4
|
+
I want to be able to provide contextual data to ActiveCucumber
|
5
|
+
So that I can use it in my specs.
|
6
|
+
|
7
|
+
Rules:
|
8
|
+
- contextual data is provided as an additional parameter containing key-value pairs in calls to ActiveCucumber
|
9
|
+
- all contextual data is made available to Cucumberators as instance variables whose name is the key and value is the value
|
10
|
+
|
11
|
+
|
12
|
+
Scenario: using contextual data
|
13
|
+
Given the subscriptions:
|
14
|
+
| SUBSCRIBER | SHOW |
|
15
|
+
| Q | Star Trek TNG |
|
16
|
+
When running "ActiveCucumber.diff_all! Subscription, table, context: { current_user: 'Q' }" with this table:
|
17
|
+
| SUBSCRIBER | SHOW |
|
18
|
+
| me | Star Trek TNG |
|
19
|
+
Then the test passes
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: Comparing different field types
|
2
|
+
|
3
|
+
As a developer testing a relational database
|
4
|
+
I want to verify my database content and associations the same way
|
5
|
+
So that database verifications are intuitive.
|
6
|
+
|
7
|
+
Rules:
|
8
|
+
- content in data columns without a Cucumberator is compared as-is with the table content
|
9
|
+
- content in data columns can be modified through a Cucumberator before verification
|
10
|
+
- associated records can be converted to text via a Cucumberator
|
11
|
+
|
12
|
+
|
13
|
+
Background:
|
14
|
+
Given the episodes:
|
15
|
+
| SHOW | NAME | YEAR |
|
16
|
+
| Star Trek TNG | Encounter at Farpoint | 1987 |
|
17
|
+
| Star Trek TNG | All Good Things | 1994 |
|
18
|
+
|
19
|
+
|
20
|
+
Scenario: verifying string fields
|
21
|
+
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
22
|
+
| NAME |
|
23
|
+
| Encounter at Farpoint |
|
24
|
+
| All Good Things |
|
25
|
+
Then the test passes
|
26
|
+
|
27
|
+
|
28
|
+
Scenario: verifying non-string fields
|
29
|
+
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
30
|
+
| YEAR |
|
31
|
+
| 1987 |
|
32
|
+
| 1994 |
|
33
|
+
Then the test passes
|
34
|
+
|
35
|
+
|
36
|
+
Scenario: verifying associated fields through a Cucumberator
|
37
|
+
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
38
|
+
| SHOW | NAME |
|
39
|
+
| Star Trek TNG | Encounter at Farpoint |
|
40
|
+
| Star Trek TNG | All Good Things |
|
41
|
+
Then the test passes
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: Verifying only certain columns
|
2
|
+
|
3
|
+
As a developer working only on a subset of database columns
|
4
|
+
I want to specify only those columns in my tests
|
5
|
+
So that my specs are concise, noise free, and to the point.
|
6
|
+
|
7
|
+
Rules:
|
8
|
+
- tables given to `diff_all!` can contain only a subset of the existing columns
|
9
|
+
- only the given columns are verified against the database content
|
10
|
+
|
11
|
+
|
12
|
+
Background:
|
13
|
+
Given the episodes:
|
14
|
+
| SHOW | NAME | YEAR |
|
15
|
+
| Star Trek TNG | Encounter at Farpoint | 1987 |
|
16
|
+
| Star Trek TNG | All Good Things | 1994 |
|
17
|
+
|
18
|
+
|
19
|
+
Scenario: verifying all columns
|
20
|
+
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
21
|
+
| SHOW | NAME | YEAR |
|
22
|
+
| Star Trek TNG | Encounter at Farpoint | 1987 |
|
23
|
+
| Star Trek TNG | All Good Things | 1994 |
|
24
|
+
Then the test passes
|
25
|
+
|
26
|
+
|
27
|
+
Scenario: verifying a subset of columns
|
28
|
+
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
29
|
+
| YEAR |
|
30
|
+
| 1987 |
|
31
|
+
| 1994 |
|
32
|
+
Then the test passes
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Feature: Verifying only certain database rows
|
2
|
+
|
3
|
+
As a developer specifying the result of database operations
|
4
|
+
I want to have the choice to verify either the full database content or only a part of it
|
5
|
+
So that my specs aren't polluted by independent side effects and remain focussed on the functionality described.
|
6
|
+
|
7
|
+
Rules:
|
8
|
+
- when providing an ActiveRecord class to `ActiveCucumber.diff_all!`
|
9
|
+
it verifies the whole database table
|
10
|
+
- when providing an AREL query to `ActiveCucumber.diff_all!`
|
11
|
+
it verifies only the specified records in the respective table
|
12
|
+
|
13
|
+
|
14
|
+
Background:
|
15
|
+
Given the episodes:
|
16
|
+
| SHOW | NAME | YEAR |
|
17
|
+
| Star Trek TOS | The Paradise Syndrome | 1968 |
|
18
|
+
| Star Trek TNG | Encounter at Farpoint | 1987 |
|
19
|
+
| Star Trek TNG | All Good Things | 1994 |
|
20
|
+
|
21
|
+
|
22
|
+
Scenario: comparing against the whole table by providing an ActiveRecord class
|
23
|
+
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
24
|
+
| SHOW | NAME | YEAR |
|
25
|
+
| Star Trek TOS | The Paradise Syndrome | 1968 |
|
26
|
+
| Star Trek TNG | Encounter at Farpoint | 1987 |
|
27
|
+
| Star Trek TNG | All Good Things | 1994 |
|
28
|
+
Then the test passes
|
29
|
+
|
30
|
+
|
31
|
+
Scenario: comparing against a subset of a table by providing an AREL query
|
32
|
+
When running "ActiveCucumber.diff_all! Show.first.episodes, table" with this table:
|
33
|
+
| SHOW | NAME | YEAR |
|
34
|
+
| Star Trek TOS | The Paradise Syndrome | 1968 |
|
35
|
+
Then the test passes
|
@@ -1,8 +1,13 @@
|
|
1
|
-
Feature:
|
1
|
+
Feature: comparing against all existing records
|
2
2
|
|
3
|
-
As a
|
4
|
-
I want
|
5
|
-
So that I can
|
3
|
+
As a developer verifying my database content
|
4
|
+
I want that my specs verify the exact database content
|
5
|
+
So that I can be sure that my application behaves exactly as I think it does.
|
6
|
+
|
7
|
+
Rules:
|
8
|
+
- missing rows cause test failure
|
9
|
+
- extra rows cause test failure
|
10
|
+
- mismatching fields cause test failure
|
6
11
|
|
7
12
|
|
8
13
|
Background:
|
@@ -12,30 +17,6 @@ Feature: ActiveCucumber.diff_all!
|
|
12
17
|
| Star Trek TNG | All Good Things | 1994 |
|
13
18
|
|
14
19
|
|
15
|
-
Scenario: verifying string fields
|
16
|
-
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
17
|
-
| NAME |
|
18
|
-
| Encounter at Farpoint |
|
19
|
-
| All Good Things |
|
20
|
-
Then the test passes
|
21
|
-
|
22
|
-
|
23
|
-
Scenario: verifying non-string fields
|
24
|
-
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
25
|
-
| YEAR |
|
26
|
-
| 1987 |
|
27
|
-
| 1994 |
|
28
|
-
Then the test passes
|
29
|
-
|
30
|
-
|
31
|
-
Scenario: verifying associated fields through a Cucumberator
|
32
|
-
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
33
|
-
| SHOW | NAME |
|
34
|
-
| Star Trek TNG | Encounter at Farpoint |
|
35
|
-
| Star Trek TNG | All Good Things |
|
36
|
-
Then the test passes
|
37
|
-
|
38
|
-
|
39
20
|
Scenario: complete table match
|
40
21
|
When running "ActiveCucumber.diff_all! Episode, table" with this table:
|
41
22
|
| SHOW | NAME | YEAR |
|
@@ -69,13 +50,3 @@ Feature: ActiveCucumber.diff_all!
|
|
69
50
|
| Star Trek TNG | All Good Things |
|
70
51
|
Then the test fails
|
71
52
|
And Cucumparer prints the error message "Tables were not identical"
|
72
|
-
|
73
|
-
|
74
|
-
Scenario: using context values
|
75
|
-
Given the subscriptions:
|
76
|
-
| SUBSCRIBER | SHOW |
|
77
|
-
| Q | Star Trek TNG |
|
78
|
-
When running "ActiveCucumber.diff_all! Subscription, table, context: { current_user: 'Q' }" with this table:
|
79
|
-
| SUBSCRIBER | SHOW |
|
80
|
-
| me | Star Trek TNG |
|
81
|
-
Then the test passes
|
@@ -2,8 +2,8 @@ module ActiveCucumber
|
|
2
2
|
|
3
3
|
class Cucumparer
|
4
4
|
|
5
|
-
def initialize
|
6
|
-
@
|
5
|
+
def initialize database_content, cucumber_table, context
|
6
|
+
@database_content = database_content
|
7
7
|
@cucumber_table = cucumber_table
|
8
8
|
@context = context
|
9
9
|
end
|
@@ -11,7 +11,8 @@ module ActiveCucumber
|
|
11
11
|
# Returns all entries in the database as a horizontal Mortadella table
|
12
12
|
def to_horizontal_table
|
13
13
|
mortadella = Mortadella::Horizontal.new headers: @cucumber_table.headers
|
14
|
-
@
|
14
|
+
@database_content = @database_content.all if @database_content.respond_to? :all
|
15
|
+
@database_content.each do |record|
|
15
16
|
cucumberator = cucumberator_for record
|
16
17
|
mortadella << @cucumber_table.headers.map do |header|
|
17
18
|
cucumberator.value_for header
|
@@ -33,20 +34,20 @@ module ActiveCucumber
|
|
33
34
|
private
|
34
35
|
|
35
36
|
# Returns the Cucumberator subclass to be used by this Cucumparer instance
|
36
|
-
def cucumberator_class
|
37
|
-
cucumberator_class_name.constantize
|
37
|
+
def cucumberator_class object
|
38
|
+
cucumberator_class_name(object).constantize
|
38
39
|
rescue NameError
|
39
40
|
Cucumberator
|
40
41
|
end
|
41
42
|
|
42
43
|
# Returns the name of the Cucumberator subclass to be used by this Cucumparer instance.
|
43
|
-
def cucumberator_class_name
|
44
|
-
"#{
|
44
|
+
def cucumberator_class_name object
|
45
|
+
"#{object.class.name}Cucumberator"
|
45
46
|
end
|
46
47
|
|
47
48
|
# Returns the Cucumberator object for the given ActiveRecord instance
|
48
49
|
def cucumberator_for object
|
49
|
-
cucumberator_class.new object, @context
|
50
|
+
cucumberator_class(object).new object, @context
|
50
51
|
end
|
51
52
|
|
52
53
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Goslar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -213,7 +213,12 @@ files:
|
|
213
213
|
- documentation/vertical_diff.png
|
214
214
|
- features/active_cucumber/create_many.feature
|
215
215
|
- features/active_cucumber/create_one.feature
|
216
|
-
- features/active_cucumber/diff_all.feature
|
216
|
+
- features/active_cucumber/diff_all/arrays_of_objects.feature
|
217
|
+
- features/active_cucumber/diff_all/context_values.feature
|
218
|
+
- features/active_cucumber/diff_all/converting_data.feature
|
219
|
+
- features/active_cucumber/diff_all/filtering_columns.feature
|
220
|
+
- features/active_cucumber/diff_all/filtering_rows.feature
|
221
|
+
- features/active_cucumber/diff_all/mismatching_data.feature
|
217
222
|
- features/active_cucumber/diff_one.feature
|
218
223
|
- features/step_definitions/steps.rb
|
219
224
|
- features/support/director.rb
|