sequel-fixture 0.0.3 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +9 -5
- data/.travis.yml +1 -1
- data/Gemfile +1 -6
- data/README.md +53 -22
- data/lib/sequel-fixture/exceptions.rb +17 -0
- data/lib/sequel-fixture/table.rb +40 -0
- data/lib/sequel-fixture/util.rb +22 -0
- data/lib/sequel-fixture/version.rb +1 -1
- data/lib/sequel-fixture.rb +169 -117
- data/spec/sequel/fixture_spec.rb +42 -90
- data/spec/sequel/fixtures/another/users.yaml +2 -0
- data/spec/sequel/fixtures/invalid/users.yaml +4 -0
- data/spec/sequel/fixtures/processed/users.yaml +4 -0
- data/spec/sequel/fixtures/test/actions.yaml +4 -0
- data/spec/sequel/fixtures/test/users.yaml +3 -0
- data/spec/sequel/util_spec.rb +54 -0
- metadata +24 -17
- data/features/configurable_fixtures_folder.feature +0 -24
- data/features/play_around_with_fixtures.feature +0 -70
- data/features/stepdefs/play_around_with_fixtures/background.rb +0 -5
- data/features/stepdefs/play_around_with_fixtures/create_a_simple_fixture_push_it_and_rollback.rb +0 -66
- data/features/stepdefs/play_around_with_fixtures/misconfigured_password_field.rb +0 -40
- data/features/support/env.rb +0 -6
- data/features/support/hooks.rb +0 -6
data/.gitignore
CHANGED
@@ -1,17 +1,21 @@
|
|
1
1
|
*.gem
|
2
2
|
*.rbc
|
3
|
+
Gemfile.lock
|
3
4
|
.bundle
|
4
5
|
.config
|
5
|
-
.yardoc
|
6
|
-
Gemfile.lock
|
7
|
-
InstalledFiles
|
8
|
-
_yardoc
|
9
6
|
coverage
|
10
|
-
|
7
|
+
vendor/
|
8
|
+
InstalledFiles
|
11
9
|
lib/bundler/man
|
12
10
|
pkg
|
13
11
|
rdoc
|
14
12
|
spec/reports
|
15
13
|
test/tmp
|
16
14
|
test/version_tmp
|
15
|
+
.bin/
|
17
16
|
tmp
|
17
|
+
|
18
|
+
# YARD artifacts
|
19
|
+
.yardoc
|
20
|
+
_yardoc
|
21
|
+
doc/
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,35 +2,57 @@ Sequel::Fixture
|
|
2
2
|
===============
|
3
3
|
[![Build Status](https://secure.travis-ci.org/Fetcher/sequel-fixture.png)](http://travis-ci.org/Fetcher/sequel-fixture) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/Fetcher/sequel-fixture)
|
4
4
|
|
5
|
-
Just like Rails
|
5
|
+
Just like Rails fixtures, but for Sequel.
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
This version includes support for defining the fixture schemas
|
8
|
+
and uses sqlite3 adapter to inject data into memory.
|
9
|
+
|
10
|
+
Usage
|
11
|
+
=====
|
12
|
+
Each fixture file defines the schema and data for a single table which
|
13
|
+
is named after the file name.
|
14
|
+
|
15
|
+
Schema definition is optional, but note that db inserts will fail if the tables do
|
16
|
+
not exist.
|
9
17
|
|
10
18
|
Assuming you have a fixture for the table users with:
|
11
19
|
```yaml
|
12
|
-
#
|
13
|
-
|
14
|
-
name:
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
# fixtures/simple/users.yaml
|
21
|
+
schema:
|
22
|
+
- name: name
|
23
|
+
type: string
|
24
|
+
primary_key: true
|
25
|
+
- name: last_name
|
26
|
+
type: string
|
27
|
+
- name: empty
|
28
|
+
type: string
|
29
|
+
data:
|
30
|
+
- name: John
|
31
|
+
last_name: Doe
|
32
|
+
email: john@doe.com
|
33
|
+
- name: Jane
|
34
|
+
last_name: Doe
|
35
|
+
email: jane@doe.com
|
21
36
|
```
|
22
37
|
|
23
38
|
and for messages:
|
24
39
|
```yaml
|
25
|
-
#
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
40
|
+
# fixtures/simple/messages.yaml
|
41
|
+
schema:
|
42
|
+
- name: sender_id
|
43
|
+
type: integer
|
44
|
+
primary_key: true
|
45
|
+
- name: receiver_id
|
46
|
+
type: integer
|
47
|
+
- name: text
|
48
|
+
type: string
|
49
|
+
data:
|
50
|
+
- sender_id: 1
|
51
|
+
receiver_id: 2
|
52
|
+
text: Hi Jane! Long time no see.
|
53
|
+
- sender_id: 2
|
54
|
+
receiver_id: 1
|
55
|
+
text: John! Long time indeed. How are you doing?
|
34
56
|
```
|
35
57
|
|
36
58
|
and the ruby script
|
@@ -41,6 +63,9 @@ require "sequel-fixture"
|
|
41
63
|
|
42
64
|
DB = Sequel.sqlite # Just a simple example, needs sqlite3 gem
|
43
65
|
|
66
|
+
## Set the path of the fixture yaml files to be [script.rb]/fixtures/
|
67
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
68
|
+
|
44
69
|
fixture = Sequel::Fixture.new :simple, DB # Will load all the data in the fixture into the database
|
45
70
|
|
46
71
|
fixture.users # == fixture[:users]
|
@@ -65,7 +90,13 @@ fixture.rollback # Don't forget to rollback
|
|
65
90
|
|
66
91
|
...naturally, `sequel-fixture` makes a lot more sense within some testing framework.
|
67
92
|
|
68
|
-
|
93
|
+
|
94
|
+
Contributing
|
95
|
+
------------
|
96
|
+
|
97
|
+
```
|
98
|
+
bundle install --binstubs .bin --path vendor/bundle
|
99
|
+
```
|
69
100
|
|
70
101
|
Installation
|
71
102
|
------------
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Sequel::Fixture
|
2
|
+
class IllegalFixtureFormat < StandardError; end
|
3
|
+
class TablesNotEmptyError < StandardError; end
|
4
|
+
class RollbackIllegalError < StandardError; end
|
5
|
+
class MissingFixtureError < StandardError; end
|
6
|
+
class MissingConnectionError < StandardError; end
|
7
|
+
class LoadingFixtureIllegal < StandardError; end
|
8
|
+
class ChangingConnectionIllegal < StandardError; end
|
9
|
+
|
10
|
+
class MissingProcessedValueError < StandardError
|
11
|
+
attr_accessor :field
|
12
|
+
def initialize message, field = nil
|
13
|
+
@field = field
|
14
|
+
super message
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Sequel; end
|
2
|
+
|
3
|
+
class Sequel::Fixture
|
4
|
+
|
5
|
+
# === Description
|
6
|
+
# Class which represents the actual fixture data in a table
|
7
|
+
#
|
8
|
+
class Table
|
9
|
+
def initialize(data)
|
10
|
+
@data = data
|
11
|
+
end
|
12
|
+
|
13
|
+
def [](row)
|
14
|
+
Sequel::Fixture::Row.new(@data[row])
|
15
|
+
end
|
16
|
+
|
17
|
+
def rows
|
18
|
+
@data
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
# === Description
|
24
|
+
# Class which represents a single row in a fixture table.
|
25
|
+
#
|
26
|
+
class Row
|
27
|
+
def initialize(row)
|
28
|
+
@data = row
|
29
|
+
end
|
30
|
+
|
31
|
+
# === Description
|
32
|
+
# Method missing, for enabling discovery of columns within a row
|
33
|
+
#
|
34
|
+
def method_missing(s, *args)
|
35
|
+
key = s.to_s
|
36
|
+
return @data[key] if @data && @data.has_key?(key)
|
37
|
+
return super
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Sequel::Fixture
|
2
|
+
|
3
|
+
# === Description
|
4
|
+
# Simplifies the hash in order to insert it into the database
|
5
|
+
# (Note: I'm well aware that this functionality belongs in a dependency)
|
6
|
+
#
|
7
|
+
def simplify(the_hash)
|
8
|
+
the_returned_hash = {}
|
9
|
+
|
10
|
+
the_hash.each do |key, value|
|
11
|
+
if value.is_a? Hash
|
12
|
+
unless value.has_key?("processed") || value.has_key?(:processed)
|
13
|
+
raise MissingProcessedValueError.new "The processed value to insert into the db is missing from the field '#{key}', aborting", key
|
14
|
+
end
|
15
|
+
the_returned_hash[key] = value["processed"] || value[:processed]
|
16
|
+
else
|
17
|
+
the_returned_hash[key] = value
|
18
|
+
end
|
19
|
+
end
|
20
|
+
return the_returned_hash
|
21
|
+
end
|
22
|
+
end
|
data/lib/sequel-fixture.rb
CHANGED
@@ -3,143 +3,195 @@ require "symbolmatrix"
|
|
3
3
|
require "fast"
|
4
4
|
|
5
5
|
require "sequel-fixture/version"
|
6
|
+
require "sequel-fixture/exceptions"
|
7
|
+
require "sequel-fixture/util"
|
8
|
+
require "sequel-fixture/table"
|
6
9
|
|
7
|
-
module Sequel
|
10
|
+
module Sequel; end
|
8
11
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
12
|
+
class Sequel::Fixture
|
13
|
+
|
14
|
+
# === Description
|
15
|
+
# Returns the current path to the fixtures folder
|
16
|
+
#
|
17
|
+
def self.path
|
18
|
+
@@path ||= "test/fixtures"
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
# === Description
|
23
|
+
# Set the current path of the fixtures folder
|
24
|
+
#
|
25
|
+
def self.path=(path)
|
26
|
+
@@path = path
|
27
|
+
end
|
28
|
+
|
29
|
+
# === Description
|
30
|
+
# Initializes the fixture handler
|
31
|
+
# Accepts optionally a symbol as a reference to the fixture
|
32
|
+
# and a Sequel::Database connection
|
33
|
+
def initialize(fixture = nil, connection = nil, option_push = true)
|
34
|
+
@schema = {}
|
35
|
+
@data = {}
|
36
|
+
|
37
|
+
load(fixture) if fixture
|
38
|
+
|
39
|
+
@connection = connection if connection
|
40
|
+
push if fixture && connection && option_push
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
# === Description
|
45
|
+
# Loads the fixture files into this instance
|
46
|
+
#
|
47
|
+
def load(fixture)
|
48
|
+
raise LoadingFixtureIllegal, "A check has already been made, loading a different fixture is illegal" if @checked
|
49
|
+
|
50
|
+
Fast.dir("#{fixtures_path}/#{fixture}").files.to.symbols.each do |file|
|
51
|
+
@data ||= {}
|
52
|
+
@schema ||= {}
|
53
|
+
|
54
|
+
file_data = SymbolMatrix.new "#{fixtures_path}/#{fixture}/#{file}.yaml"
|
55
|
+
|
56
|
+
if file_data
|
57
|
+
@data[file] = Table.new(file_data[:data]) if file_data.key?(:data)
|
58
|
+
@schema[file] = file_data[:schema] if file_data.key?(:schema)
|
59
|
+
end
|
29
60
|
end
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
# === Description
|
65
|
+
# Returns the current fixtures path where Sequel::Fixture looks for fixture folders
|
66
|
+
#
|
67
|
+
def fixtures_path
|
68
|
+
Sequel::Fixture.path
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
# === Description
|
73
|
+
# For enabling discovery of tables
|
74
|
+
#
|
75
|
+
def method_missing(key, *args)
|
76
|
+
return @data[key] if @data && @data.has_key?(key)
|
77
|
+
return super
|
78
|
+
end
|
79
|
+
|
80
|
+
# === Description
|
81
|
+
# Returns the SymbolMatrix with the data referring to that table
|
82
|
+
#
|
83
|
+
def [](reference)
|
84
|
+
@data[reference]
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
# === Description
|
89
|
+
# Forces the check to pass. Dangerous!
|
90
|
+
#
|
91
|
+
def force_checked!
|
92
|
+
@checked = true
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
# === Description
|
97
|
+
# Assures that the tables are empty before proceeding
|
98
|
+
#
|
99
|
+
def check
|
100
|
+
return @checked if @checked # If already checked, it's alright
|
101
|
+
|
102
|
+
raise MissingFixtureError, "No fixture has been loaded, nothing to check" unless @data.length > 0
|
103
|
+
raise MissingConnectionError, "No connection has been provided, impossible to check" unless @connection
|
30
104
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
Fast.dir("#{fixtures_path}/#{fixture}").files.to.symbols.each do |file|
|
36
|
-
@data ||= {}
|
37
|
-
@data[file] = SymbolMatrix.new "#{fixtures_path}/#{fixture}/#{file}.yaml"
|
105
|
+
@data.each_key do |table|
|
106
|
+
if @connection[table].count != 0
|
107
|
+
raise TablesNotEmptyError, "Table '#{table}' is not empty, tables must be empty prior to testing"
|
38
108
|
end
|
39
109
|
end
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
110
|
+
return @checked = true
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
# === Description
|
115
|
+
# Initializes fixture schema and Inserts the fixture data into the corresponding
|
116
|
+
# tables
|
117
|
+
#
|
118
|
+
def push
|
119
|
+
check
|
120
|
+
|
121
|
+
@schema.each do |table, matrix|
|
122
|
+
push_schema(table, matrix)
|
44
123
|
end
|
45
124
|
|
46
|
-
|
47
|
-
|
48
|
-
|
125
|
+
@data.each do |table_name, table_data|
|
126
|
+
table_data.rows.each do |values|
|
127
|
+
begin
|
128
|
+
@connection[table_name].insert(simplify(values.to_h))
|
129
|
+
rescue MissingProcessedValueError => m
|
130
|
+
rollback
|
131
|
+
raise MissingProcessedValueError, "In record '#{values.to_h}' to be inserted into '#{table_name}', the processed value of field '#{m.field}' is missing, aborting."
|
132
|
+
rescue NoMethodError => e
|
133
|
+
raise IllegalFixtureFormat, "In record '#{values}', data must be formatted as arrays of hashes. Check 'data' section in '#{table_name}.yaml'"
|
134
|
+
end
|
135
|
+
end
|
49
136
|
end
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
# === Description
|
141
|
+
# Create the schema in our DB connection based on the schema values
|
142
|
+
#
|
143
|
+
def push_schema(table, values)
|
144
|
+
## Lets passively ignore the schema if the table already exists
|
145
|
+
return if @connection.table_exists?(table.to_sym)
|
146
|
+
|
147
|
+
## Find the primary key
|
148
|
+
pkey_data = nil
|
149
|
+
values.each do |column_def|
|
150
|
+
pkey_data = column_def if column_def["primary_key"]
|
55
151
|
end
|
56
152
|
|
57
|
-
|
58
|
-
|
59
|
-
|
153
|
+
## Create the table with the primary key
|
154
|
+
@connection.create_table(table) do
|
155
|
+
column(pkey_data["name"].to_sym, pkey_data["type"].to_sym)
|
60
156
|
end
|
61
|
-
|
62
|
-
# Assures that the tables are empty before proceeding
|
63
|
-
def check
|
64
|
-
return @checked if @checked # If already checked, it's alright
|
65
157
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
raise TablesNotEmptyError, "The table '#{table}' is not empty, all tables should be empty prior to testing" if @connection[table].count != 0
|
158
|
+
## Add the rest of the columns
|
159
|
+
values.each do |column_def|
|
160
|
+
unless column_def["primary_key"]
|
161
|
+
@connection.alter_table(table) { add_column(column_def["name"].to_sym, column_def["type"].to_sym) }
|
71
162
|
end
|
72
|
-
return @checked = true
|
73
163
|
end
|
74
|
-
|
75
|
-
|
76
|
-
|
164
|
+
end
|
165
|
+
|
166
|
+
|
167
|
+
# === Description
|
168
|
+
# Empties the tables, only if they were empty to begin with
|
169
|
+
#
|
170
|
+
def rollback
|
171
|
+
begin
|
77
172
|
check
|
78
173
|
|
79
|
-
@data.
|
80
|
-
|
81
|
-
begin
|
82
|
-
@connection[table].insert simplify values.to_hash
|
83
|
-
rescue MissingProcessedValueError => m
|
84
|
-
rollback
|
85
|
-
raise MissingProcessedValueError, "In record '#{element}' to be inserted into '#{table}', the processed value of field '#{m.field}' is missing, aborting"
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
# Empties the tables, only if they were empty to begin with
|
92
|
-
def rollback
|
93
|
-
begin
|
94
|
-
check
|
95
|
-
|
96
|
-
@data.each_key do |table|
|
97
|
-
@connection[table].truncate
|
98
|
-
end
|
99
|
-
rescue TablesNotEmptyError => e
|
100
|
-
raise RollbackIllegalError, "The tables weren't empty to begin with, rollback aborted."
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
attr_reader :connection
|
105
|
-
|
106
|
-
# Sets the connection. Raises an ChangingConnectionIllegal exception if this fixture has already been checked
|
107
|
-
def connection= the_connection
|
108
|
-
raise ChangingConnectionIllegal, "A check has already been performed, changing the connection now is illegal" if @checked
|
109
|
-
@connection = the_connection
|
110
|
-
end
|
111
|
-
|
112
|
-
attr_reader :data
|
113
|
-
|
114
|
-
# Simplifies the hash in order to insert it into the database
|
115
|
-
# (Note: I'm well aware that this functionality belongs in a dependency)
|
116
|
-
def simplify the_hash
|
117
|
-
the_returned_hash = {}
|
118
|
-
the_hash.each do |key, value|
|
119
|
-
if value.is_a? Hash
|
120
|
-
unless value.has_key? :processed
|
121
|
-
raise MissingProcessedValueError.new "The processed value to insert into the db is missing from the field '#{key}', aborting", key
|
122
|
-
end
|
123
|
-
the_returned_hash[key] = value[:processed]
|
124
|
-
else
|
125
|
-
the_returned_hash[key] = value
|
126
|
-
end
|
174
|
+
@data.each_key do |table|
|
175
|
+
@connection[table].truncate
|
127
176
|
end
|
128
|
-
|
177
|
+
rescue TablesNotEmptyError => e
|
178
|
+
raise RollbackIllegalError, "The tables weren't empty to begin with, rollback aborted."
|
129
179
|
end
|
180
|
+
end
|
130
181
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
def initialize message, field = nil
|
140
|
-
@field = field
|
141
|
-
super message
|
142
|
-
end
|
182
|
+
|
183
|
+
# === Description
|
184
|
+
# Sets the connection. Raises an ChangingConnectionIllegal exception if this fixture has
|
185
|
+
# already been checked
|
186
|
+
#
|
187
|
+
def connection=(the_connection)
|
188
|
+
if @checked
|
189
|
+
raise ChangingConnectionIllegal, "Illegal to change connection after check has already been performed"
|
143
190
|
end
|
191
|
+
@connection = the_connection
|
144
192
|
end
|
193
|
+
|
194
|
+
attr_reader :connection
|
195
|
+
attr_reader :data
|
196
|
+
attr_reader :schema
|
145
197
|
end
|
data/spec/sequel/fixture_spec.rb
CHANGED
@@ -2,10 +2,15 @@ require "sequel-fixture"
|
|
2
2
|
require "fast"
|
3
3
|
|
4
4
|
describe Sequel::Fixture do
|
5
|
-
describe ".path" do
|
5
|
+
describe ".path" do
|
6
6
|
it "should return 'test/fixtures'" do
|
7
7
|
Sequel::Fixture.path.should == "test/fixtures"
|
8
8
|
end
|
9
|
+
|
10
|
+
it "should be configurable" do
|
11
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
12
|
+
Sequel::Fixture.path.should == File.join(File.dirname(__FILE__), "fixtures")
|
13
|
+
end
|
9
14
|
end
|
10
15
|
|
11
16
|
describe ".new" do
|
@@ -46,6 +51,7 @@ describe Sequel::Fixture do
|
|
46
51
|
describe "#load" do
|
47
52
|
context "there is a valid fixture folder setup" do
|
48
53
|
before do
|
54
|
+
Sequel::Fixture.path = "test/fixtures"
|
49
55
|
Fast.file! "test/fixtures/test/users.yaml"
|
50
56
|
Fast.file! "test/fixtures/test/actions.yaml"
|
51
57
|
end
|
@@ -65,8 +71,7 @@ describe Sequel::Fixture do
|
|
65
71
|
|
66
72
|
context "the check has been performed and I attempt to load another fixture" do
|
67
73
|
before do
|
68
|
-
|
69
|
-
Fast.file.write "test/fixtures/another/users.yaml", "john: { name: John Doe }"
|
74
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
70
75
|
end
|
71
76
|
|
72
77
|
it "should fail" do
|
@@ -101,20 +106,19 @@ describe Sequel::Fixture do
|
|
101
106
|
describe "#[]" do
|
102
107
|
context "a valid fixture has been loaded" do
|
103
108
|
before do
|
104
|
-
|
105
|
-
|
109
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
110
|
+
|
106
111
|
@fix = Sequel::Fixture.new
|
107
112
|
@fix.stub :check
|
108
113
|
@fix.load :test
|
109
114
|
end
|
110
115
|
|
111
116
|
context "a table key is passed" do
|
112
|
-
it "should return the
|
113
|
-
@fix[:users].should be_a
|
114
|
-
@fix[:users].
|
115
|
-
@fix[:users].
|
116
|
-
|
117
|
-
@fix[:actions].walk.action.should == "Walks"
|
117
|
+
it "should return the Fixture::Table containing the same info as in the matching YAML file" do
|
118
|
+
@fix[:users].should be_a Sequel::Fixture::Table
|
119
|
+
@fix[:users][0].name.should == "John Doe"
|
120
|
+
@fix[:users][0].last_name.should == "Wayne"
|
121
|
+
@fix[:actions][0].action.should == "Walks"
|
118
122
|
end
|
119
123
|
end
|
120
124
|
|
@@ -128,19 +132,17 @@ describe Sequel::Fixture do
|
|
128
132
|
context "a valid fixture has been loaded" do
|
129
133
|
context "a table key is passed" do
|
130
134
|
before do
|
131
|
-
|
132
|
-
Fast.file.write "test/fixtures/test/actions.yaml", "walk: { user_id: 1, action: Walks }"
|
135
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
133
136
|
@fix = Sequel::Fixture.new
|
134
137
|
@fix.stub :check
|
135
138
|
@fix.load :test
|
136
139
|
end
|
137
140
|
|
138
141
|
it "should return the SymbolMatrix containing the same info as in the matching YAML file" do
|
139
|
-
@fix.users.should be_a
|
140
|
-
@fix.users.
|
141
|
-
@fix.users.
|
142
|
-
|
143
|
-
@fix.actions.walk.action.should == "Walks"
|
142
|
+
@fix.users.should be_a Sequel::Fixture::Table
|
143
|
+
@fix.users[0].name.should == "John Doe"
|
144
|
+
@fix.users[0].last_name.should == "Wayne"
|
145
|
+
@fix.actions[0].action.should == "Walks"
|
144
146
|
end
|
145
147
|
|
146
148
|
after do
|
@@ -197,9 +199,8 @@ describe Sequel::Fixture do
|
|
197
199
|
end
|
198
200
|
fix.stub_data
|
199
201
|
|
200
|
-
expect { fix.check
|
201
|
-
|
202
|
-
"The table 'users' is not empty, all tables should be empty prior to testing"
|
202
|
+
expect { fix.check }.to raise_error Sequel::Fixture::TablesNotEmptyError,
|
203
|
+
"Table 'users' is not empty, tables must be empty prior to testing"
|
203
204
|
end
|
204
205
|
|
205
206
|
it "should return true if all tables count equals 0" do
|
@@ -312,7 +313,7 @@ describe Sequel::Fixture do
|
|
312
313
|
fix.check
|
313
314
|
expect { fix.connection = double 'database'
|
314
315
|
}.to raise_error Sequel::Fixture::ChangingConnectionIllegal,
|
315
|
-
"
|
316
|
+
"Illegal to change connection after check has already been performed"
|
316
317
|
end
|
317
318
|
|
318
319
|
after do
|
@@ -323,14 +324,14 @@ describe Sequel::Fixture do
|
|
323
324
|
|
324
325
|
describe "#data" do
|
325
326
|
context "a fixture has been loaded" do
|
326
|
-
before do
|
327
|
-
|
327
|
+
before do
|
328
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
328
329
|
end
|
329
330
|
|
330
331
|
it "should return the fixture data" do
|
331
332
|
fix = Sequel::Fixture.new :test
|
332
333
|
fix.data.should have_key :users
|
333
|
-
fix.data[:users].should be_a
|
334
|
+
fix.data[:users].should be_a Sequel::Fixture::Table
|
334
335
|
end
|
335
336
|
|
336
337
|
after do
|
@@ -341,7 +342,7 @@ describe Sequel::Fixture do
|
|
341
342
|
context "no fixture has been loaded" do
|
342
343
|
it "should return nil" do
|
343
344
|
fix = Sequel::Fixture.new
|
344
|
-
fix.data.should
|
345
|
+
fix.data.should be {}
|
345
346
|
end
|
346
347
|
end
|
347
348
|
end
|
@@ -359,8 +360,8 @@ describe Sequel::Fixture do
|
|
359
360
|
|
360
361
|
context "a valid fixture and a database connection are provided" do
|
361
362
|
before do
|
362
|
-
|
363
|
-
|
363
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
364
|
+
|
364
365
|
@table = stub
|
365
366
|
@database = stub :[] => @table
|
366
367
|
@fix = Sequel::Fixture.new
|
@@ -370,8 +371,8 @@ describe Sequel::Fixture do
|
|
370
371
|
|
371
372
|
it "should attempt to insert the data into the database" do
|
372
373
|
@table.stub :count => 0
|
373
|
-
@table.should_receive(:insert).with
|
374
|
-
@table.should_receive(:insert).with
|
374
|
+
@table.should_receive(:insert).with "name" => "John Doe", "last_name" => "Wayne"
|
375
|
+
@table.should_receive(:insert).with "user_id" => 1, "action" => "Walks"
|
375
376
|
@fix.push
|
376
377
|
end
|
377
378
|
|
@@ -382,16 +383,18 @@ describe Sequel::Fixture do
|
|
382
383
|
|
383
384
|
context "a fixture with a field with a <raw> and a <processed> alternative" do
|
384
385
|
before do
|
385
|
-
|
386
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
386
387
|
end
|
387
388
|
|
388
389
|
it "should insert the <processed> alternative" do
|
389
390
|
database = double 'database'
|
390
391
|
insertable = double 'table'
|
391
392
|
insertable.stub :count => 0
|
392
|
-
insertable.should_receive(:insert).with
|
393
|
+
insertable.should_receive(:insert).with "password" => '35ferwt352'
|
393
394
|
database.stub(:[]).and_return insertable
|
394
|
-
|
395
|
+
|
396
|
+
fix = Sequel::Fixture.new :processed, database, false
|
397
|
+
|
395
398
|
fix.push
|
396
399
|
end
|
397
400
|
|
@@ -402,24 +405,22 @@ describe Sequel::Fixture do
|
|
402
405
|
|
403
406
|
context "a fixture with a field with alternatives yet missing the <processed> one" do
|
404
407
|
before do
|
405
|
-
|
408
|
+
Sequel::Fixture.path = File.join(File.dirname(__FILE__), "fixtures")
|
406
409
|
end
|
407
410
|
|
408
411
|
it "should fail" do
|
409
412
|
database = double 'database', :[] => stub( 'table', :count => 0, :truncate => nil )
|
410
|
-
fix = Sequel::Fixture.new :
|
411
|
-
|
412
|
-
}.to raise_error Sequel::Fixture::MissingProcessedValueError
|
413
|
-
"In record 'hey' to be inserted into 'users', the processed value of field 'pass' is missing, aborting"
|
413
|
+
fix = Sequel::Fixture.new :invalid, database, false
|
414
|
+
|
415
|
+
expect { fix.push }.to raise_error Sequel::Fixture::MissingProcessedValueError
|
414
416
|
end
|
415
417
|
|
416
418
|
|
417
419
|
it "should call the rollback" do
|
418
420
|
database = double 'database', :[] => stub( 'table', :count => 0, :truncate => nil )
|
419
|
-
fix = Sequel::Fixture.new :
|
421
|
+
fix = Sequel::Fixture.new :invalid, database, false
|
420
422
|
fix.should_receive :rollback
|
421
|
-
expect { fix.push
|
422
|
-
}.to raise_error Sequel::Fixture::MissingProcessedValueError
|
423
|
+
expect { fix.push }.to raise_error Sequel::Fixture::MissingProcessedValueError
|
423
424
|
end
|
424
425
|
|
425
426
|
after do
|
@@ -428,55 +429,6 @@ describe Sequel::Fixture do
|
|
428
429
|
end
|
429
430
|
end
|
430
431
|
|
431
|
-
# This should go in a dependency, pending refactoring TODO
|
432
|
-
describe "#simplify" do
|
433
|
-
context "when receiving a multidimensional hash containing a field with raw and processed" do
|
434
|
-
it "should convert it in a simple hash using the processed value as replacement" do
|
435
|
-
base_hash = {
|
436
|
-
:name => "Jane",
|
437
|
-
:band => "Witherspoons",
|
438
|
-
:pass => {
|
439
|
-
:raw => "secret",
|
440
|
-
:processed => "53oih7fhjdgj3f8="
|
441
|
-
},
|
442
|
-
:email => {
|
443
|
-
:raw => "Jane@gmail.com ",
|
444
|
-
:processed => "jane@gmail.com"
|
445
|
-
}
|
446
|
-
}
|
447
|
-
|
448
|
-
fix = Sequel::Fixture.new
|
449
|
-
simplified = fix.simplify base_hash
|
450
|
-
simplified.should == {
|
451
|
-
:name => "Jane",
|
452
|
-
:band => "Witherspoons",
|
453
|
-
:pass => "53oih7fhjdgj3f8=",
|
454
|
-
:email => "jane@gmail.com"
|
455
|
-
}
|
456
|
-
end
|
457
|
-
end
|
458
|
-
|
459
|
-
context "the multidimensional array is missing the processed part of the field" do
|
460
|
-
it "should raise an exception" do
|
461
|
-
base_hash = {
|
462
|
-
:name => "Jane",
|
463
|
-
:pass => {
|
464
|
-
:raw => "secret",
|
465
|
-
:not_processed => "53oih7fhjdgj3f8="
|
466
|
-
},
|
467
|
-
:email => {
|
468
|
-
:raw => "Jane@gmail.com ",
|
469
|
-
:processed => "jane@gmail.com"
|
470
|
-
}
|
471
|
-
}
|
472
|
-
|
473
|
-
fix = Sequel::Fixture.new
|
474
|
-
expect { fix.simplify base_hash
|
475
|
-
}.to raise_error Sequel::Fixture::MissingProcessedValueError,
|
476
|
-
"The processed value to insert into the db is missing from the field 'pass', aborting"
|
477
|
-
end
|
478
|
-
end
|
479
|
-
end
|
480
432
|
|
481
433
|
describe "#rollback" do
|
482
434
|
it "should check" do
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "sequel-fixture"
|
2
|
+
require "fast"
|
3
|
+
|
4
|
+
describe Sequel::Fixture do
|
5
|
+
# This should go in a dependency, pending refactoring TODO
|
6
|
+
describe "#simplify" do
|
7
|
+
context "when receiving a multidimensional hash containing a field with raw and processed" do
|
8
|
+
it "should convert it in a simple hash using the processed value as replacement" do
|
9
|
+
base_hash = {
|
10
|
+
:name => "Jane",
|
11
|
+
:band => "Witherspoons",
|
12
|
+
:pass => {
|
13
|
+
:raw => "secret",
|
14
|
+
:processed => "53oih7fhjdgj3f8="
|
15
|
+
},
|
16
|
+
:email => {
|
17
|
+
:raw => "Jane@gmail.com ",
|
18
|
+
:processed => "jane@gmail.com"
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
fix = Sequel::Fixture.new
|
23
|
+
simplified = fix.simplify(base_hash)
|
24
|
+
simplified.should == {
|
25
|
+
:name => "Jane",
|
26
|
+
:band => "Witherspoons",
|
27
|
+
:pass => "53oih7fhjdgj3f8=",
|
28
|
+
:email => "jane@gmail.com"
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "the multidimensional array is missing the processed part of the field" do
|
34
|
+
it "should raise an exception" do
|
35
|
+
base_hash = {
|
36
|
+
:name => "Jane",
|
37
|
+
:pass => {
|
38
|
+
:raw => "secret",
|
39
|
+
:not_processed => "53oih7fhjdgj3f8="
|
40
|
+
},
|
41
|
+
:email => {
|
42
|
+
:raw => "Jane@gmail.com ",
|
43
|
+
:processed => "jane@gmail.com"
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
fix = Sequel::Fixture.new
|
48
|
+
expect { fix.simplify(base_hash)
|
49
|
+
}.to raise_error Sequel::Fixture::MissingProcessedValueError,
|
50
|
+
"The processed value to insert into the db is missing from the field 'pass', aborting"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequel-fixture
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 2.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-06-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sequel
|
@@ -88,17 +88,19 @@ files:
|
|
88
88
|
- LICENSE
|
89
89
|
- README.md
|
90
90
|
- Rakefile
|
91
|
-
- features/configurable_fixtures_folder.feature
|
92
|
-
- features/play_around_with_fixtures.feature
|
93
|
-
- features/stepdefs/play_around_with_fixtures/background.rb
|
94
|
-
- features/stepdefs/play_around_with_fixtures/create_a_simple_fixture_push_it_and_rollback.rb
|
95
|
-
- features/stepdefs/play_around_with_fixtures/misconfigured_password_field.rb
|
96
|
-
- features/support/env.rb
|
97
|
-
- features/support/hooks.rb
|
98
91
|
- lib/sequel-fixture.rb
|
92
|
+
- lib/sequel-fixture/exceptions.rb
|
93
|
+
- lib/sequel-fixture/table.rb
|
94
|
+
- lib/sequel-fixture/util.rb
|
99
95
|
- lib/sequel-fixture/version.rb
|
100
96
|
- sequel-fixture.gemspec
|
101
97
|
- spec/sequel/fixture_spec.rb
|
98
|
+
- spec/sequel/fixtures/another/users.yaml
|
99
|
+
- spec/sequel/fixtures/invalid/users.yaml
|
100
|
+
- spec/sequel/fixtures/processed/users.yaml
|
101
|
+
- spec/sequel/fixtures/test/actions.yaml
|
102
|
+
- spec/sequel/fixtures/test/users.yaml
|
103
|
+
- spec/sequel/util_spec.rb
|
102
104
|
homepage: http://github.com/Fetcher/sequel-fixture
|
103
105
|
licenses: []
|
104
106
|
post_install_message:
|
@@ -111,24 +113,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
111
113
|
- - ! '>='
|
112
114
|
- !ruby/object:Gem::Version
|
113
115
|
version: '0'
|
116
|
+
segments:
|
117
|
+
- 0
|
118
|
+
hash: -2872414278293677799
|
114
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
120
|
none: false
|
116
121
|
requirements:
|
117
122
|
- - ! '>='
|
118
123
|
- !ruby/object:Gem::Version
|
119
124
|
version: '0'
|
125
|
+
segments:
|
126
|
+
- 0
|
127
|
+
hash: -2872414278293677799
|
120
128
|
requirements: []
|
121
129
|
rubyforge_project:
|
122
|
-
rubygems_version: 1.8.
|
130
|
+
rubygems_version: 1.8.25
|
123
131
|
signing_key:
|
124
132
|
specification_version: 3
|
125
133
|
summary: Flexible fixtures for the Sequel Gem inspired in Rails 2 fixtures
|
126
134
|
test_files:
|
127
|
-
- features/configurable_fixtures_folder.feature
|
128
|
-
- features/play_around_with_fixtures.feature
|
129
|
-
- features/stepdefs/play_around_with_fixtures/background.rb
|
130
|
-
- features/stepdefs/play_around_with_fixtures/create_a_simple_fixture_push_it_and_rollback.rb
|
131
|
-
- features/stepdefs/play_around_with_fixtures/misconfigured_password_field.rb
|
132
|
-
- features/support/env.rb
|
133
|
-
- features/support/hooks.rb
|
134
135
|
- spec/sequel/fixture_spec.rb
|
136
|
+
- spec/sequel/fixtures/another/users.yaml
|
137
|
+
- spec/sequel/fixtures/invalid/users.yaml
|
138
|
+
- spec/sequel/fixtures/processed/users.yaml
|
139
|
+
- spec/sequel/fixtures/test/actions.yaml
|
140
|
+
- spec/sequel/fixtures/test/users.yaml
|
141
|
+
- spec/sequel/util_spec.rb
|
@@ -1,24 +0,0 @@
|
|
1
|
-
Feature: Configurable fixtures folder
|
2
|
-
In order to load fixtures from arbitrary folders
|
3
|
-
I want to be able to configure the source of the fixtures
|
4
|
-
|
5
|
-
Background: We have a database connection working
|
6
|
-
Given a sqlite database connection
|
7
|
-
|
8
|
-
Scenario: The folder is now just "fixtures"
|
9
|
-
Given a table users with String:name, String:email
|
10
|
-
And a file "fixtures/configurable/users.yaml" with:
|
11
|
-
"""
|
12
|
-
xavi:
|
13
|
-
name: Xavier
|
14
|
-
email: xavier@via.com
|
15
|
-
john:
|
16
|
-
name: Johnny
|
17
|
-
email: john@doe.com
|
18
|
-
"""
|
19
|
-
When I set the fixtures path as "fixtures"
|
20
|
-
And I load the configurable fixture
|
21
|
-
Then I should see 1 record in users with name "Xavier" and email "xavier@via.com"
|
22
|
-
And I should see 1 record in users with name "Johnny" and email "john@doe.com"
|
23
|
-
When I rollback
|
24
|
-
Then I should see 0 records in users
|
@@ -1,70 +0,0 @@
|
|
1
|
-
Feature: Play around with Fixtures
|
2
|
-
In order to test if Sequel::Fixture is really practical
|
3
|
-
As the gem developer
|
4
|
-
I want to play around with it a little bit
|
5
|
-
|
6
|
-
Background: We have a database connection working
|
7
|
-
Given a sqlite database connection
|
8
|
-
|
9
|
-
Scenario: Create a simple fixture, push it into a sqlite and rollback
|
10
|
-
Given a table visitors with String:name, String:email
|
11
|
-
And a table aliens with String:race
|
12
|
-
And a table visits with Integer:alien_id, Integer:visitor_id
|
13
|
-
And a file "test/fixtures/simple/visitors.yaml" with:
|
14
|
-
"""
|
15
|
-
anonymous:
|
16
|
-
name: V
|
17
|
-
email: v@for.vendetta
|
18
|
-
"""
|
19
|
-
And a file "test/fixtures/simple/aliens.yaml" with:
|
20
|
-
"""
|
21
|
-
yourfavouritemartian:
|
22
|
-
race: Zerg
|
23
|
-
"""
|
24
|
-
And a file "test/fixtures/simple/visits.yaml" with:
|
25
|
-
"""
|
26
|
-
v2yfm:
|
27
|
-
alien_id: 1
|
28
|
-
visitor_id: 1
|
29
|
-
"""
|
30
|
-
When I load the simple fixture
|
31
|
-
Then I should see 1 record in visitors with name "V" and email "v@for.vendetta"
|
32
|
-
And I should see 1 record in aliens with race "Zerg"
|
33
|
-
And I should see 1 record in visits with alien_id 1 and visitor_id 1
|
34
|
-
When I rollback
|
35
|
-
Then I should see 0 records in visitors
|
36
|
-
And I should see 0 records in aliens
|
37
|
-
And I should see 0 records in visits
|
38
|
-
|
39
|
-
Scenario: The users table has a password field
|
40
|
-
Given a table users with String:name, String:password
|
41
|
-
And a file "test/fixtures/password/users.yaml" with:
|
42
|
-
"""
|
43
|
-
john:
|
44
|
-
name: John Wayne
|
45
|
-
password:
|
46
|
-
raw: secret
|
47
|
-
processed: 5bfb52c459cdb07218c176b5ddec9b6215bd5b76
|
48
|
-
"""
|
49
|
-
When I load the password fixture
|
50
|
-
Then I should see 1 record in users with name "John Wayne" and password "5bfb52c459cdb07218c176b5ddec9b6215bd5b76"
|
51
|
-
When I rollback
|
52
|
-
Then I should see 0 records in users
|
53
|
-
|
54
|
-
Scenario: Misconfigured password field
|
55
|
-
Given a table users with String:password
|
56
|
-
And a file "test/fixtures/misconfigured/users.yaml" with:
|
57
|
-
"""
|
58
|
-
good_entry:
|
59
|
-
password:
|
60
|
-
raw: secret
|
61
|
-
processed: 96bdg756n5sgf9gfs==
|
62
|
-
wrong_entry:
|
63
|
-
password:
|
64
|
-
missing: The field
|
65
|
-
"""
|
66
|
-
Then the loading of misconfigured fixture should fail
|
67
|
-
And I should see that the table was "users"
|
68
|
-
And I should see that the field was "password"
|
69
|
-
And I should see that the entry was "wrong_entry"
|
70
|
-
And I should see 0 records in users
|
data/features/stepdefs/play_around_with_fixtures/create_a_simple_fixture_push_it_and_rollback.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
#Scenario: Create a simple fixture, push it into a sqlite and rollback
|
2
|
-
# Given a table visitors with String:name, String:email
|
3
|
-
# And a table aliens with String:race
|
4
|
-
# And a table visits with Integer:alien_id, Integer:visitor_id
|
5
|
-
# And a file "test/fixtures/simple/visitors.yaml" with:
|
6
|
-
# """
|
7
|
-
# anonymous:
|
8
|
-
# name: V
|
9
|
-
# email: v@for.vendetta
|
10
|
-
# """
|
11
|
-
# And a file "test/fixtures/simple/aliens.yaml" with:
|
12
|
-
# """
|
13
|
-
# yourfavouritemartian:
|
14
|
-
# race: Zerg
|
15
|
-
# """
|
16
|
-
# And a file "test/fixtures/simple/visits.yaml" with:
|
17
|
-
# """
|
18
|
-
# v2yfm:
|
19
|
-
# alien_id: 1
|
20
|
-
# visitor_id: 1
|
21
|
-
# """
|
22
|
-
# When I load the simple fixture
|
23
|
-
# Then I should see 1 record in visitors with name "V" and email "v@for.vendetta"
|
24
|
-
# And I should see 1 record in aliens with race "Zerg"
|
25
|
-
# And I should see 1 record in visits with alien_id 1 and visitor_id 1
|
26
|
-
|
27
|
-
Given /^a table (\w+) with (\w+):(\w+), (\w+):(\w+)$/ do |table, type1, field1, type2, field2|
|
28
|
-
@DB.create_table table.to_sym do
|
29
|
-
send :"#{type1}", field1
|
30
|
-
send :"#{type2}", field2
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
Given /^a table (\w+) with (\w+):(\w+)$/ do |table, type, field|
|
35
|
-
@DB.create_table table.to_sym do
|
36
|
-
send :"#{type}", field
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
And /^a file "(.+?)" with:$/ do |path, content|
|
41
|
-
Fast.file.write path, content
|
42
|
-
end
|
43
|
-
|
44
|
-
When /^I load the (\w+) fixture$/ do |fixture|
|
45
|
-
@fixture = Sequel::Fixture.new fixture.to_sym, @DB
|
46
|
-
end
|
47
|
-
|
48
|
-
Then /^I should see (\d) record in (\w+) with (\w+) "(.+?)" and (\w+) "(.+?)"$/ do |amount, table, field1, data1, field2, data2|
|
49
|
-
@DB[table.to_sym].where(field1.to_sym => data1, field2.to_sym => data2).count.should == amount.to_i
|
50
|
-
end
|
51
|
-
|
52
|
-
And /^I should see (\d) record in (\w+) with (\w+) "([^"]+)"$/ do |amount, table, field1, data1|
|
53
|
-
@DB[table.to_sym].where(field1.to_sym => data1).count.should == amount.to_i
|
54
|
-
end
|
55
|
-
|
56
|
-
Then /^I should see (\d) record in (\w+) with (\w+) (\d+) and (\w+) (\d+)$/ do |amount, table, field1, data1, field2, data2|
|
57
|
-
@DB[table.to_sym].where(field1.to_sym => data1.to_i, field2.to_sym => data2.to_i).count.should == amount.to_i
|
58
|
-
end
|
59
|
-
|
60
|
-
When /^I rollback$/ do
|
61
|
-
@fixture.rollback
|
62
|
-
end
|
63
|
-
|
64
|
-
Then /^I should see (\d+) records? in (\w+)$/ do |amount, table|
|
65
|
-
@DB[table.to_sym].count.should == amount.to_i
|
66
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
#Scenario: Misconfigured password field
|
2
|
-
# Given a table users with String:password
|
3
|
-
# And a file "test/fixtures/misconfigured/users.yaml" with:
|
4
|
-
# """
|
5
|
-
# good_entry:
|
6
|
-
# password:
|
7
|
-
# raw: secret
|
8
|
-
# processed: 96bdg756n5sgf9gfs==
|
9
|
-
# wrong_entry:
|
10
|
-
# password:
|
11
|
-
# missing: The field
|
12
|
-
# """
|
13
|
-
# Then the loading of misconfigured fixture should fail
|
14
|
-
# And I should see that the table was "users"
|
15
|
-
# And I should see that the field was "password"
|
16
|
-
# And I should see that the entry was "wrong_entry"
|
17
|
-
# And I should see 0 records in users
|
18
|
-
|
19
|
-
# NOTE: most steps have been defined in
|
20
|
-
# `create_a_simple_fixture_push_it_and_rollback.rb`
|
21
|
-
|
22
|
-
Then /^the loading of (\w+) fixture should fail$/ do |fixture|
|
23
|
-
begin
|
24
|
-
Sequel::Fixture.new fixture.to_sym, @DB
|
25
|
-
rescue Sequel::Fixture::MissingProcessedValueError => e
|
26
|
-
@exception = e
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
And /^I should see that the table was "(\w+)"$/ do |table|
|
31
|
-
@exception.message.should include table
|
32
|
-
end
|
33
|
-
|
34
|
-
And /^I should see that the field was "(\w+)"$/ do |field|
|
35
|
-
@exception.message.should include field
|
36
|
-
end
|
37
|
-
|
38
|
-
And /^I should see that the entry was "(\w+)"$/ do |entry|
|
39
|
-
@exception.message.should include entry
|
40
|
-
end
|
data/features/support/env.rb
DELETED