git_friendly_dumper 0.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.
@@ -0,0 +1,63 @@
1
+ Feature: populate database with data and stucture in a custom directory
2
+ In order to load data found elsewhere than db/dump
3
+ I want the rake task to use the DUMP_PATH env variable to override the data path used
4
+
5
+
6
+ Background:
7
+ Given I am in an empty app
8
+ Given a Rakefile exists which has an environment task and loads git_friendly_dumper tasks
9
+ And an empty database
10
+ And a file named "db/dump/users/schema.rb" with:
11
+ """
12
+ create_table "users", :force => true do |t|
13
+ t.string "wont_use"
14
+ t.string "this_schema"
15
+ end
16
+
17
+ """
18
+ And a file named "db/dump/users/0000/0001.yml" with:
19
+ """
20
+ ---
21
+ name: shouldnt
22
+ surname: be_loaded
23
+ created_at: 2003-07-26 12:38:10
24
+ updated_at: 2007-07-26 12:48:10
25
+ id: 1
26
+
27
+ """
28
+
29
+
30
+ Scenario: rake db:load with different DUMP_PATH
31
+ Given a file named "db/alt/dump/users/schema.rb" with:
32
+ """
33
+ create_table "users", :force => true do |t|
34
+ t.datetime "created_at"
35
+ t.datetime "updated_at"
36
+ t.string "name"
37
+ t.string "surname"
38
+ end
39
+
40
+ """
41
+ And a file named "db/alt/dump/users/0000/0001.yml" with:
42
+ """
43
+ ---
44
+ name: Fred
45
+ created_at: 2002-07-23 12:28:10
46
+ updated_at: 2004-07-22 12:18:14
47
+ id: 1
48
+ surname: Bloggs
49
+
50
+ """
51
+ When I successfully run `rake db:load FORCE=1 DUMP_PATH=db/alt/dump`
52
+ And I refresh the database tables cache
53
+ Then a "users" table should exist with structure:
54
+ | name | type |
55
+ | id | INTEGER |
56
+ | created_at | datetime |
57
+ | updated_at | datetime |
58
+ | name | varchar(255) |
59
+ | surname | varchar(255) |
60
+ And the "users" table should match exactly:
61
+ | id | name | surname | created_at | updated_at |
62
+ | 1 | Fred | Bloggs | 2002-07-23 12:28:10 | 2004-07-22 12:18:14 |
63
+
@@ -0,0 +1,103 @@
1
+ Feature: Load a database
2
+ In order to populate my database with the dumped structure (schema) and data (fixtures) in db/dump
3
+ I want an easy-to-use rake task to do the heavy lifting
4
+
5
+ Background:
6
+ Given I am in an empty app
7
+ And a Rakefile exists which has an environment task and loads git_friendly_dumper tasks
8
+ And an empty database
9
+
10
+
11
+ Scenario: rake db:load
12
+ Given a file named "db/dump/users/schema.rb" with:
13
+ """
14
+ create_table "users", :force => true do |t|
15
+ t.datetime "created_at"
16
+ t.datetime "updated_at"
17
+ t.string "name"
18
+ t.string "surname"
19
+ end
20
+
21
+ """
22
+ And a file named "db/dump/users/0000/0001.yml" with:
23
+ """
24
+ ---
25
+ name: Jane
26
+ created_at: 2003-07-26 12:38:10
27
+ updated_at: 2007-07-26 12:48:10
28
+ id: 1
29
+ surname: Heidie
30
+
31
+ """
32
+ And a file named "db/dump/users/0001/0008.yml" with:
33
+ """
34
+ ---
35
+ name: Ethel
36
+ created_at: 2008-07-26 19:38:10
37
+ updated_at: 2010-03-22 11:38:10
38
+ id: 10008
39
+ surname: Smith
40
+ """
41
+
42
+ And a file named "db/dump/debts/schema.rb" with:
43
+ """
44
+ create_table "debts", :force => true do |t|
45
+ t.string "name"
46
+ t.integer "amount"
47
+ end
48
+
49
+ """
50
+ And a file named "db/dump/debts/0000/0012.yml" with:
51
+ """
52
+ ---
53
+ name: Jane Heidie
54
+ id: 12
55
+ amount: 3403
56
+
57
+ """
58
+
59
+ And a file named "db/dump/schema_migrations/schema.rb" with:
60
+ """
61
+ create_table "schema_migrations", :force => true do |t|
62
+ t.string "version"
63
+ end
64
+
65
+ """
66
+ And a file named "db/dump/schema_migrations/0000/0001.yml" with:
67
+ """
68
+ ---
69
+ version: "01001010123"
70
+ id: 1
71
+
72
+ """
73
+
74
+ When I successfully run `rake db:load FORCE=1`
75
+ And I refresh the database tables cache
76
+ Then a "users" table should exist with structure:
77
+ | name | type |
78
+ | id | INTEGER |
79
+ | created_at | datetime |
80
+ | updated_at | datetime |
81
+ | name | varchar(255) |
82
+ | surname | varchar(255) |
83
+ And the "users" table should match exactly:
84
+ | id | name | surname | created_at | updated_at |
85
+ | 1 | Jane | Heidie | 2003-07-26 12:38:10 | 2007-07-26 12:48:10 |
86
+ | 10008 | Ethel | Smith | 2008-07-26 19:38:10 | 2010-03-22 11:38:10 |
87
+
88
+ And a "debts" table should exist with structure:
89
+ | name | type |
90
+ | id | INTEGER |
91
+ | name | varchar(255) |
92
+ | amount | integer |
93
+ And the "debts" table should match exactly:
94
+ | id | name | amount |
95
+ | 12 | Jane Heidie | 3403 |
96
+
97
+ And a "schema_migrations" table should exist with structure:
98
+ | name | type |
99
+ | id | INTEGER |
100
+ | version | varchar(255) |
101
+ And the "schema_migrations" table should match exactly:
102
+ | id | version |
103
+ | 1 | 01001010123 |
@@ -0,0 +1,97 @@
1
+ Feature: Toggle halting load when runtime errors occur
2
+ RAISE_ERROR=false|0 toggle halt on runtime errors (default true)
3
+ Useful for loading dev databases - don't use in production!
4
+
5
+ Background:
6
+ Given I am in an empty app
7
+ Given a Rakefile exists which has an environment task and loads git_friendly_dumper tasks
8
+ And an empty database
9
+
10
+
11
+ Scenario Outline: if a schema isn't found it always blows up, ignoring RAISE_ERROR
12
+ When I run `rake db:load FORCE=1 TABLES=doesnotexist RAISE_ERROR=<RAISE_ERROR>`
13
+ Then the exit status should be <EXIT_STATUS>
14
+ And the output should contain "No such file or directory"
15
+
16
+ Scenarios: always raises
17
+ | RAISE_ERROR | EXIT_STATUS |
18
+ | | 1 |
19
+ | false | 1 |
20
+ | 0 | 1 |
21
+ | true | 1 |
22
+ | 1 | 1 |
23
+
24
+
25
+
26
+ Scenario Outline: using RAISE_ERROR to toggle raising ActiveRecord insertion errors
27
+ Given a file named "db/dump/users/schema.rb" with:
28
+ """
29
+ create_table "users", :force => true do |t|
30
+ t.datetime "created_at"
31
+ t.datetime "updated_at"
32
+ # t.string "name"
33
+ t.string "surname"
34
+ end
35
+ """
36
+ And a file named "db/dump/users/0000/0001.yml" with:
37
+ """
38
+ ---
39
+ name: Jane
40
+ created_at: 2003-07-26 12:38:10
41
+ updated_at: 2007-07-26 12:48:10
42
+ id: 1
43
+ surname: Heidie
44
+ """
45
+
46
+ When I run `rake db:load FORCE=1 TABLES=users RAISE_ERROR=<RAISE_ERROR>`
47
+ Then the exit status should be <EXIT_STATUS>
48
+ And the output <SEE_MESSAGE> contain "SQLite3::SQLException: table users has no column named name:"
49
+
50
+ Scenarios: don't raise
51
+ | RAISE_ERROR | EXIT_STATUS | SEE_MESSAGE |
52
+ | false | 0 | should not |
53
+ | 0 | 0 | should not |
54
+
55
+ Scenarios: raise
56
+ | RAISE_ERROR | EXIT_STATUS | SEE_MESSAGE |
57
+ | | 1 | should |
58
+ | true | 1 | should |
59
+ | 1 | 1 | should |
60
+
61
+ Scenario Outline: can also silence errors loading a fixture
62
+ Given a file named "db/dump/users/schema.rb" with:
63
+ """
64
+ create_table "users", :force => true do |t|
65
+ t.datetime "created_at"
66
+ t.datetime "updated_at"
67
+ t.string "name"
68
+ t.string "surname"
69
+ end
70
+ """
71
+ And I successfully run `rake db:load FORCE=1`
72
+
73
+ When I write to "db/dump/users/0000/0001.yml" with:
74
+ """
75
+ ---
76
+ forename: Jane
77
+ created_at: 2003-07-26 12:38:10
78
+ updated_at: 2007-07-26 12:48:10
79
+ id: 1
80
+ surname: Heidie
81
+ """
82
+ And I run `rake db:data:load FORCE=1 FIXTURES='users/0000/0001.yml' RAISE_ERROR=<RAISE_ERROR>`
83
+ Then the exit status should be <EXIT_STATUS>
84
+ And the output <SEE_MESSAGE> contain "SQLite3::SQLException: table users has no column named forename:"
85
+
86
+ Scenarios: don't raise
87
+ | RAISE_ERROR | EXIT_STATUS | SEE_MESSAGE |
88
+ | false | 0 | should not |
89
+ | 0 | 0 | should not |
90
+
91
+ Scenarios: raise
92
+ | RAISE_ERROR | EXIT_STATUS | SEE_MESSAGE |
93
+ | | 1 | should |
94
+ | true | 1 | should |
95
+ | 1 | 1 | should |
96
+
97
+
@@ -0,0 +1,159 @@
1
+ Feature: Load fixtures
2
+ In order to load particular backups into my database
3
+ I want to pass the rake task a list of specific fixtures to be imported
4
+ FIXTURES -- specific fixture files to load, invalid argument for dump tasks
5
+
6
+ Background:
7
+ Given I am in an empty app
8
+ And a Rakefile exists which has an environment task and loads git_friendly_dumper tasks
9
+ And an empty database
10
+ And the database has a "users" table:
11
+ | name (string) | surname (string) |
12
+ | Fred | Bloggs |
13
+ | Ethel | Smith |
14
+ | Jane | Heidie |
15
+ And a file named "db/dump/users/0000/0001.yml" with:
16
+ """
17
+ ---
18
+ name: Frodo
19
+ id: 1
20
+ surname: Bloggo
21
+ """
22
+ And a file named "db/dump/users/0000/0002.yml" with:
23
+ """
24
+ ---
25
+ name: Ethelene
26
+ id: 2
27
+ surname: Smithy
28
+ """
29
+
30
+
31
+ Scenario: can't use rake db:load FIXTURES=…
32
+ When I run `rake db:load FIXTURES=users/0000/0001.yml FORCE=true`
33
+ Then the exit status should be 1
34
+ And the "users" table should match exactly:
35
+ | id | name | surname |
36
+ | 1 | Fred | Bloggs |
37
+ | 2 | Ethel | Smith |
38
+ | 3 | Jane | Heidie |
39
+ And the output should contain "if :fixtures option given, neither :include_schema nor :clobber_fixtures"
40
+
41
+
42
+ Scenario: can't use rake db:data:load FIXTURES=… CLOBBER_FIXTURES=true
43
+ When I run `rake db:load FIXTURES=users/0000/0001.yml CLOBBER_FIXTURES=true FORCE=true`
44
+ Then the exit status should be 1
45
+ And the output should contain "if :fixtures option given, neither :include_schema nor :clobber_fixtures"
46
+
47
+
48
+ Scenario: trying to load with FIXTURES and FIXTURES_FILE should raise an error
49
+ When I run `rake db:data:load FIXTURES_FILE=foo FIXTURES=notes/0000/0001.yml FORCE=true`
50
+ Then the exit status should be 1
51
+ And the output should contain "GitFriendlyDumper cannot specify both :fixtures and :fixtures_file"
52
+
53
+
54
+ Scenario: loading specific fixtures into an existing table with records only replaces the ones I specify
55
+ When I successfully run `rake db:data:load FIXTURES=users/0000/0001.yml FORCE=true`
56
+ And the "users" table should match exactly:
57
+ | id | name | surname |
58
+ | 1 | Frodo | Bloggo |
59
+ | 2 | Ethel | Smith |
60
+ | 3 | Jane | Heidie |
61
+
62
+
63
+
64
+ Scenario: loading a fixture which does not exist deletes its record
65
+ When I successfully run `rake db:data:load FIXTURES=users/0000/0003.yml FORCE=true`
66
+ And the "users" table should match exactly:
67
+ | id | name | surname |
68
+ | 1 | Fred | Bloggs |
69
+ | 2 | Ethel | Smith |
70
+
71
+
72
+
73
+
74
+ Scenario: inserting a non-existant record from fixture
75
+ Given a file named "db/dump/users/0000/0011.yml" with:
76
+ """
77
+ ---
78
+ name: Bob
79
+ id: 11
80
+ surname: Smith
81
+ """
82
+
83
+ When I successfully run `rake db:data:load FIXTURES=users/0000/0011.yml FORCE=true`
84
+ And the "users" table should match exactly:
85
+ | id | name | surname |
86
+ | 1 | Fred | Bloggs |
87
+ | 2 | Ethel | Smith |
88
+ | 3 | Jane | Heidie |
89
+ | 11 | Bob | Smith |
90
+
91
+
92
+
93
+ Scenario: Updating, Creating & Deleting all in one go
94
+ Given a file named "db/dump/users/0000/0011.yml" with:
95
+ """
96
+ ---
97
+ name: Bob
98
+ id: 11
99
+ surname: Smith
100
+ """
101
+
102
+ When I successfully run `rake db:data:load FIXTURES=users/0000/0001.yml,users/0000/0003.yml,users/0000/0011.yml FORCE=true`
103
+ And the "users" table should match exactly:
104
+ | id | name | surname |
105
+ | 1 | Frodo | Bloggo |
106
+ | 2 | Ethel | Smith |
107
+ | 11 | Bob | Smith |
108
+
109
+
110
+ Scenario: specifying fixtures via a fixtures_file
111
+ Given a file named "db/dump/users/0000/0011.yml" with:
112
+ """
113
+ ---
114
+ name: Bob
115
+ id: 11
116
+ surname: Smith
117
+ """
118
+
119
+ And a file named "db/dump/fixtures" with:
120
+ """
121
+ users/0000/0001.yml
122
+ users/0000/0003.yml
123
+ users/0000/0011.yml
124
+ """
125
+
126
+ When I successfully run `rake db:data:load FIXTURES_FILE=db/dump/fixtures FORCE=true`
127
+ Then the "users" table should match exactly:
128
+ | id | name | surname |
129
+ | 1 | Frodo | Bloggo |
130
+ | 2 | Ethel | Smith |
131
+ | 11 | Bob | Smith |
132
+
133
+
134
+ Scenario: TABLES can be used whitelist a subset of the FIXTURES to operate on
135
+ Given the database has a "notes" table:
136
+ | body (string) |
137
+ | Get milk |
138
+ | Buy Meat |
139
+ And a file named "db/dump/notes/0000/0001.yml" with:
140
+ """
141
+ ---
142
+ body: Get cheese
143
+ id: 1
144
+ """
145
+
146
+ When I successfully run `rake db:data:load TABLES=notes FIXTURES=notes/0000/0001.yml,users/0000/0001.yml,users/0000/0003.yml,users/0000/0011.yml FORCE=true`
147
+ Then the "notes" table should match exactly:
148
+ | id | body |
149
+ | 1 | Get cheese |
150
+ | 2 | Buy Meat |
151
+ And the "users" table should match exactly:
152
+ | id | name | surname |
153
+ | 1 | Fred | Bloggs |
154
+ | 2 | Ethel | Smith |
155
+ | 3 | Jane | Heidie |
156
+
157
+
158
+ Scenario: FIXTURES should be able to be specified as a file, instead of an env var
159
+
@@ -0,0 +1,17 @@
1
+ Feature: Figure out git changes since last load
2
+ In order to speed up loading, when using a git based dump
3
+ I want to be able to load fixtures changes since last load
4
+
5
+ Scenario: rake db:data:load SINCE_REF=<git ref> loads fixtures since then
6
+
7
+ Scenario: rake db:data:load SINCE_REF=<git ref> borks if DUMP_PATH aint a git repo
8
+
9
+ Scenario: rake db:data:load SINCE_LAST_LOAD=true loads fixtures since last load
10
+
11
+ Scenario: rake db:data:load SINCE_LAST_LOAD=true borks if no last_load_ref exists in DUMP_PATH
12
+
13
+ Scenario: rake db:data:load creates a last_load_ref in DUMP_PATH
14
+
15
+ Scenario: rake db:data:load WRITE_LAST_LOAD_REF=false doesn't create a last_load_ref
16
+
17
+
@@ -0,0 +1,119 @@
1
+ Feature: Load specific tables
2
+ In order to only restore particular tables from the dump to my database
3
+ I want to specify a list of table names for the rake task to process
4
+ TABLES=comma,sep,list tables to dump/load (default all)
5
+
6
+
7
+ Background:
8
+ Given I am in an empty app
9
+ And a Rakefile exists which has an environment task and loads git_friendly_dumper tasks
10
+ And an empty database
11
+
12
+ Given a file named "db/dump/users/schema.rb" with:
13
+ """
14
+ create_table "users", :force => true do |t|
15
+ t.datetime "created_at"
16
+ t.datetime "updated_at"
17
+ t.string "name"
18
+ t.string "surname"
19
+ end
20
+
21
+ """
22
+ And a file named "db/dump/users/0000/0001.yml" with:
23
+ """
24
+ ---
25
+ name: Jane
26
+ created_at: 2003-07-26 12:38:10
27
+ updated_at: 2007-07-26 12:48:10
28
+ id: 1
29
+ surname: Heidie
30
+
31
+ """
32
+ And a file named "db/dump/users/0001/0008.yml" with:
33
+ """
34
+ ---
35
+ name: Ethel
36
+ created_at: 2008-07-26 19:38:10
37
+ updated_at: 2010-03-22 11:38:10
38
+ id: 10008
39
+ surname: Smith
40
+ """
41
+
42
+ And a file named "db/dump/debts/schema.rb" with:
43
+ """
44
+ create_table "debts", :force => true do |t|
45
+ t.string "name"
46
+ t.integer "amount"
47
+ end
48
+
49
+ """
50
+ And a file named "db/dump/debts/0000/0012.yml" with:
51
+ """
52
+ ---
53
+ name: Jane Heidie
54
+ id: 12
55
+ amount: 3403
56
+
57
+ """
58
+
59
+ And a file named "db/dump/schema_migrations/schema.rb" with:
60
+ """
61
+ create_table "schema_migrations", :force => true do |t|
62
+ t.string "version"
63
+ end
64
+
65
+ """
66
+ And a file named "db/dump/schema_migrations/0000/0001.yml" with:
67
+ """
68
+ ---
69
+ version: "01001010123"
70
+ id: 1
71
+
72
+ """
73
+
74
+
75
+
76
+ Scenario: load the debts table only
77
+ When I successfully run `rake db:load FORCE=1 TABLES=debts`
78
+ Then the database should have tables:
79
+ | debts |
80
+ But the database should not have table "users"
81
+ But the database should not have table "schema_migrations"
82
+ And a "debts" table should exist with structure:
83
+ | name | type |
84
+ | id | INTEGER |
85
+ | name | varchar(255) |
86
+ | amount | integer |
87
+ And the "debts" table should match exactly:
88
+ | id | name | amount |
89
+ | 12 | Jane Heidie | 3403 |
90
+
91
+
92
+
93
+ Scenario: load the users and debts tables
94
+ When I successfully run `rake db:load FORCE=1 TABLES=debts,users`
95
+ Then the database should have tables:
96
+ | debts |
97
+ | users |
98
+ But the database should not have table "schema_migrations"
99
+
100
+ Then a "users" table should exist with structure:
101
+ | name | type |
102
+ | id | INTEGER |
103
+ | created_at | datetime |
104
+ | updated_at | datetime |
105
+ | name | varchar(255) |
106
+ | surname | varchar(255) |
107
+ And the "users" table should match exactly:
108
+ | id | name | surname | created_at | updated_at |
109
+ | 1 | Jane | Heidie | 2003-07-26 12:38:10 | 2007-07-26 12:48:10 |
110
+ | 10008 | Ethel | Smith | 2008-07-26 19:38:10 | 2010-03-22 11:38:10 |
111
+
112
+ And a "debts" table should exist with structure:
113
+ | name | type |
114
+ | id | INTEGER |
115
+ | name | varchar(255) |
116
+ | amount | integer |
117
+ And the "debts" table should match exactly:
118
+ | id | name | amount |
119
+ | 12 | Jane Heidie | 3403 |