lopata 0.1.13 → 0.1.14

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
  SHA256:
3
- metadata.gz: 19371c76dcc39807c50470e95f365a09c1c33a8193a25b9d98d4d5648f5eaa59
4
- data.tar.gz: 25c3b8ea2efe44f5cf31f51cea04aa05f2ea35f364ed2167f9cdd466fa6a5e46
3
+ metadata.gz: 39dff231d5f7bf1b95eced95c1a8ddf0c363ea6c99b391ca62b896550aca4823
4
+ data.tar.gz: cc79dbade31aa4c975cc5cd935bb106b0b16d50ba5cd622a7e92ffd73692547c
5
5
  SHA512:
6
- metadata.gz: 7b7378f73bd4fe3c7ce18bcd7e7a0d5f45b05cafac689d764ad3030f879ad1e0c1843e67ddd886ba68643632c33eea9824efbe0b370dea76fe911e03d95fc355
7
- data.tar.gz: af7ba11d74022ab03a11a62bec31291edba71e6b5c93f1229b765a159e2ce3d14813af5f2967c1d054d7f5e2fc656b593bdce876fbcb9a03cade19a0fbcb3753
6
+ metadata.gz: 9dd29df0812efc5c5298f8579b0385858401fd4c5ae2c0627238401138abbdc2746f9e1035251255236788e64e33a47061ddcfc4bf25425ff5af6054c80bcccd
7
+ data.tar.gz: 7c96430a0a8b573dade74592234781797e508073e6ac3ea3d7e07bd42b001abc29946998fcaed4eb4d924d47ff27b26c017c208338ad4523bf403553d8628273
data/README.md CHANGED
@@ -1,26 +1,26 @@
1
- # Lopata
2
-
3
- Functional acceptance testing using Ruby.
4
-
5
- ## Installation
6
-
7
- gem install lopata
8
-
9
- ## Usage
10
-
11
- Create new lopata project:
12
-
13
- lopata new <project-name>
14
-
15
- Setup environment: edit <project-name>/config/environments/qa.yml for setup project for testing.
16
-
17
- Write tests: puts tests in <project-name>/scenarios folder. Define shared steps in <project-name>/shared_steps folder.
18
-
19
- Run tests:
20
-
21
- cd <project-name>
22
- lopata
23
-
24
- ## Documentation
25
-
1
+ # Lopata
2
+
3
+ Functional acceptance testing using Ruby.
4
+
5
+ ## Installation
6
+
7
+ gem install lopata
8
+
9
+ ## Usage
10
+
11
+ Create new lopata project:
12
+
13
+ lopata new <project-name>
14
+
15
+ Setup environment: edit <project-name>/config/environments/qa.yml for setup project for testing.
16
+
17
+ Write tests: puts tests in <project-name>/scenarios folder. Define shared steps in <project-name>/shared_steps folder.
18
+
19
+ Run tests:
20
+
21
+ cd <project-name>
22
+ lopata
23
+
24
+ ## Documentation
25
+
26
26
  See [features description](https://github.com/avolochnev/lopata/tree/master/features) for documentation.
data/exe/lopata CHANGED
@@ -1,11 +1,11 @@
1
- #!/usr/bin/env ruby
2
- require 'bundler/setup'
3
- require 'lopata/runner'
4
-
5
- # use default command with arguments if given command is unknown.
6
- argv = ARGV.dup
7
- unless Lopata::Runner.all_commands.keys.map(&:to_s).include? argv.first
8
- argv.unshift 'test'
9
- end
10
-
11
- Lopata::Runner.start argv
1
+ #!/usr/bin/env ruby
2
+ require 'bundler/setup'
3
+ require 'lopata/runner'
4
+
5
+ # use default command with arguments if given command is unknown.
6
+ argv = ARGV.dup
7
+ unless Lopata::Runner.all_commands.keys.map(&:to_s).include? argv.first
8
+ argv.unshift 'test'
9
+ end
10
+
11
+ Lopata::Runner.start argv
data/lib/lopata.rb CHANGED
@@ -1,74 +1,74 @@
1
- require 'lopata/id'
2
- require 'lopata/configuration'
3
- require 'lopata/environment'
4
- require 'lopata/scenario_builder'
5
- require 'lopata/scenario'
6
- require 'lopata/step'
7
- require 'lopata/shared_step'
8
-
9
- # Namespace for all Lopata code.
10
- module Lopata
11
- # Define the scenario.
12
- # @see Lopata::ScenarioBuilder.define
13
- def self.define(*args, &block)
14
- Lopata::ScenarioBuilder.define(*args, &block)
15
- end
16
-
17
- # Skip scenario definition. Option to temporary ignore scenario
18
- def self.xdefine(*args, &block)
19
- end
20
-
21
- # Register the shared step
22
- #
23
- # @example
24
- # Lopata.shared_step 'test user' do
25
- # setup { @user = create(:user) }
26
- # end
27
- #
28
- # Shared step may be used in scenarios by name:
29
- # @example
30
- # Lopata.define 'user' do
31
- # setup 'test user'
32
- #
33
- # it 'exists' do
34
- # expect(@user).to_not be_nil
35
- # end
36
- # end
37
- # @param name [String] shared step unique name
38
- # @param block [Block] shared step action sequence definition
39
- def self.shared_step(name, &block)
40
- Lopata::SharedStep.register(name, &block)
41
- end
42
-
43
- # Yields the global configuration to a block.
44
- # @yield [Lopata::Configuration] global configuration
45
- #
46
- # @example
47
- # Lopata.configure do |config|
48
- # config.before_scenario 'setup test user'
49
- # end
50
- # @see Lopata::Configuration
51
- def self.configure(&block)
52
- yield Lopata.configuration
53
- end
54
-
55
- # Returns global configuration object.
56
- # @return [Lopata::Configuration]
57
- # @see Lopata.configure
58
- def self.configuration
59
- @configuration ||= Lopata::Configuration.new
60
- end
61
-
62
- # @private
63
- # Internal container for global non-configuration data.
64
- def self.world
65
- @world ||= Lopata::World.new
66
- end
67
-
68
- # Return global environment object
69
- # @return [Lopata::Environment]
70
- # @see Lopata::Environment
71
- def self.environment
72
- Lopata.configuration.environment
73
- end
74
- end
1
+ require 'lopata/id'
2
+ require 'lopata/configuration'
3
+ require 'lopata/environment'
4
+ require 'lopata/scenario_builder'
5
+ require 'lopata/scenario'
6
+ require 'lopata/step'
7
+ require 'lopata/shared_step'
8
+
9
+ # Namespace for all Lopata code.
10
+ module Lopata
11
+ # Define the scenario.
12
+ # @see Lopata::ScenarioBuilder.define
13
+ def self.define(*args, &block)
14
+ Lopata::ScenarioBuilder.define(*args, &block)
15
+ end
16
+
17
+ # Skip scenario definition. Option to temporary ignore scenario
18
+ def self.xdefine(*args, &block)
19
+ end
20
+
21
+ # Register the shared step
22
+ #
23
+ # @example
24
+ # Lopata.shared_step 'test user' do
25
+ # setup { @user = create(:user) }
26
+ # end
27
+ #
28
+ # Shared step may be used in scenarios by name:
29
+ # @example
30
+ # Lopata.define 'user' do
31
+ # setup 'test user'
32
+ #
33
+ # it 'exists' do
34
+ # expect(@user).to_not be_nil
35
+ # end
36
+ # end
37
+ # @param name [String] shared step unique name
38
+ # @param block [Block] shared step action sequence definition
39
+ def self.shared_step(name, &block)
40
+ Lopata::SharedStep.register(name, &block)
41
+ end
42
+
43
+ # Yields the global configuration to a block.
44
+ # @yield [Lopata::Configuration] global configuration
45
+ #
46
+ # @example
47
+ # Lopata.configure do |config|
48
+ # config.before_scenario 'setup test user'
49
+ # end
50
+ # @see Lopata::Configuration
51
+ def self.configure(&block)
52
+ yield Lopata.configuration
53
+ end
54
+
55
+ # Returns global configuration object.
56
+ # @return [Lopata::Configuration]
57
+ # @see Lopata.configure
58
+ def self.configuration
59
+ @configuration ||= Lopata::Configuration.new
60
+ end
61
+
62
+ # @private
63
+ # Internal container for global non-configuration data.
64
+ def self.world
65
+ @world ||= Lopata::World.new
66
+ end
67
+
68
+ # Return global environment object
69
+ # @return [Lopata::Environment]
70
+ # @see Lopata::Environment
71
+ def self.environment
72
+ Lopata.configuration.environment
73
+ end
74
+ end
@@ -1,136 +1,136 @@
1
- module Lopata
2
- # Helpers for ActiveRecord usage in tests.
3
- #
4
- # Make helpers available in scenarios by
5
- #
6
- # require 'lopata/active_record'
7
- #
8
- # @example
9
- #
10
- # # Configure db connection at config/environments/qa.yml like rails:
11
- # # db:
12
- # # adapter: postgresql
13
- # # host: your.database.host
14
- # # username: username
15
- # # password: password
16
- # # database: database
17
- # require 'active_record'
18
- # require 'lopata/active_record'
19
- #
20
- # class User < ActiveRecord::Base; end
21
- #
22
- # Lopata.define 'User creation' do
23
- # setup do
24
- # @user = User.create!(username: 'testuser')
25
- # end
26
- # # Remove user from database after scenario
27
- # cleanup :user
28
- #
29
- # it 'works' do
30
- # expect(@user).to_not be_nil
31
- # end
32
- # end
33
- #
34
- module ActiveRecord
35
- # To be included in Lopata::Scenario. The methods may be used in runtime.
36
- module Methods
37
- # Destroy ActiveRecord objects.
38
- #
39
- # Does nothing if 'keep' mode is enabled:
40
- #
41
- # Lopata.configure do |c|
42
- # c.keep = true
43
- # end
44
- #
45
- # @param objects [Array<ActiveRecord::Base, Array<ActiveRecord::Base>, nil>] to be destroyed
46
- # @see Lopata::Configuration#keep
47
- def cleanup(*objects)
48
- return if Lopata.configuration.keep
49
- objects.flatten.compact.each do |o|
50
- begin
51
- o.reload.destroy!
52
- rescue ::ActiveRecord::RecordNotFound
53
- # Already destroyed - skip
54
- rescue ::ActiveRecord::InvalidForeignKey
55
- # Possible async job created new relationships (e.g. history records). Try again once.
56
- o.reload.destroy!
57
- end
58
- end
59
- end
60
-
61
- # Reload ActiveRecord objects
62
- #
63
- # @example
64
- #
65
- # # use in steps
66
- # reload @a, @b
67
- # # instead of
68
- # @a.reload; @b.reload
69
- #
70
- # @param objects [Array<ActiveRecord::Base, Array<ActiveRecord::Base>, nil>] to be reloaded
71
- def reload(*objects)
72
- objects.flatten.compact.each(&:reload)
73
- end
74
-
75
- # Marks object to be destroyed at the end of scenario
76
- #
77
- # @param object [ActiveRecord::Base] the object to be destoryed at the end of scenario
78
- # @return the given object, so chains can be build
79
- def cleanup_later(object)
80
- return nil unless object
81
- @created_objects ||= []
82
- @created_objects << object
83
- object
84
- end
85
-
86
- # Find ActiveRecord object of given class by params.
87
- # Marks the returned object to be destroyed at the end of scenario.
88
- #
89
- # @example
90
- # action do
91
- # # UI actions creating the user
92
- # @user = find_created(User, username: 'testuser')
93
- # end
94
- # it 'created' do
95
- # expect(@user).to_not be_nil
96
- # end
97
- # # No cleanup needed
98
- # # cleanup :user
99
- #
100
- # @param cls [Class] active record model class
101
- # @param params [Hash] options for record finding
102
- # @return [ActiveRecord::Base, nil] the object or nil if not found
103
- # @see #cleanup_later called on the hood
104
- def find_created(cls, params)
105
- cleanup_later cls.where(params).take
106
- end
107
- end
108
-
109
- # To be included in Lopata::ScenarioBuilder. The methods may be used in build time.
110
- module DSL
111
- # Mark instance variables to call #destroy at teardown phase of scenario or context running.
112
- #
113
- # Does nothing if 'keep' mode is enabled.
114
- #
115
- # @param vars [Array<Symbol, String>] instance variable names to be destroyed on teardown phase.
116
- def cleanup(*vars, &block)
117
- unless vars.empty?
118
- teardown do
119
- cleanup vars.map { |v| instance_variable_get "@#{v}" }
120
- end
121
- end
122
- teardown &block if block_given?
123
- end
124
- end
125
- end
126
- end
127
-
128
- Lopata.configure do |c|
129
- c.after_scenario { cleanup @created_objects }
130
- end
131
-
132
- params = Lopata.environment['db']
133
- ActiveRecord::Base.establish_connection(params) if params
134
-
135
- Lopata::Scenario.include Lopata::ActiveRecord::Methods
1
+ module Lopata
2
+ # Helpers for ActiveRecord usage in tests.
3
+ #
4
+ # Make helpers available in scenarios by
5
+ #
6
+ # require 'lopata/active_record'
7
+ #
8
+ # @example
9
+ #
10
+ # # Configure db connection at config/environments/qa.yml like rails:
11
+ # # db:
12
+ # # adapter: postgresql
13
+ # # host: your.database.host
14
+ # # username: username
15
+ # # password: password
16
+ # # database: database
17
+ # require 'active_record'
18
+ # require 'lopata/active_record'
19
+ #
20
+ # class User < ActiveRecord::Base; end
21
+ #
22
+ # Lopata.define 'User creation' do
23
+ # setup do
24
+ # @user = User.create!(username: 'testuser')
25
+ # end
26
+ # # Remove user from database after scenario
27
+ # cleanup :user
28
+ #
29
+ # it 'works' do
30
+ # expect(@user).to_not be_nil
31
+ # end
32
+ # end
33
+ #
34
+ module ActiveRecord
35
+ # To be included in Lopata::Scenario. The methods may be used in runtime.
36
+ module Methods
37
+ # Destroy ActiveRecord objects.
38
+ #
39
+ # Does nothing if 'keep' mode is enabled:
40
+ #
41
+ # Lopata.configure do |c|
42
+ # c.keep = true
43
+ # end
44
+ #
45
+ # @param objects [Array<ActiveRecord::Base, Array<ActiveRecord::Base>, nil>] to be destroyed
46
+ # @see Lopata::Configuration#keep
47
+ def cleanup(*objects)
48
+ return if Lopata.configuration.keep
49
+ objects.flatten.compact.each do |o|
50
+ begin
51
+ o.reload.destroy!
52
+ rescue ::ActiveRecord::RecordNotFound
53
+ # Already destroyed - skip
54
+ rescue ::ActiveRecord::InvalidForeignKey
55
+ # Possible async job created new relationships (e.g. history records). Try again once.
56
+ o.reload.destroy!
57
+ end
58
+ end
59
+ end
60
+
61
+ # Reload ActiveRecord objects
62
+ #
63
+ # @example
64
+ #
65
+ # # use in steps
66
+ # reload @a, @b
67
+ # # instead of
68
+ # @a.reload; @b.reload
69
+ #
70
+ # @param objects [Array<ActiveRecord::Base, Array<ActiveRecord::Base>, nil>] to be reloaded
71
+ def reload(*objects)
72
+ objects.flatten.compact.each(&:reload)
73
+ end
74
+
75
+ # Marks object to be destroyed at the end of scenario
76
+ #
77
+ # @param object [ActiveRecord::Base] the object to be destoryed at the end of scenario
78
+ # @return the given object, so chains can be build
79
+ def cleanup_later(object)
80
+ return nil unless object
81
+ @created_objects ||= []
82
+ @created_objects << object
83
+ object
84
+ end
85
+
86
+ # Find ActiveRecord object of given class by params.
87
+ # Marks the returned object to be destroyed at the end of scenario.
88
+ #
89
+ # @example
90
+ # action do
91
+ # # UI actions creating the user
92
+ # @user = find_created(User, username: 'testuser')
93
+ # end
94
+ # it 'created' do
95
+ # expect(@user).to_not be_nil
96
+ # end
97
+ # # No cleanup needed
98
+ # # cleanup :user
99
+ #
100
+ # @param cls [Class] active record model class
101
+ # @param params [Hash] options for record finding
102
+ # @return [ActiveRecord::Base, nil] the object or nil if not found
103
+ # @see #cleanup_later called on the hood
104
+ def find_created(cls, params)
105
+ cleanup_later cls.where(params).take
106
+ end
107
+ end
108
+
109
+ # To be included in Lopata::ScenarioBuilder. The methods may be used in build time.
110
+ module DSL
111
+ # Mark instance variables to call #destroy at teardown phase of scenario or context running.
112
+ #
113
+ # Does nothing if 'keep' mode is enabled.
114
+ #
115
+ # @param vars [Array<Symbol, String>] instance variable names to be destroyed on teardown phase.
116
+ def cleanup(*vars, &block)
117
+ unless vars.empty?
118
+ teardown do
119
+ cleanup vars.map { |v| instance_variable_get "@#{v}" }
120
+ end
121
+ end
122
+ teardown &block if block_given?
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ Lopata.configure do |c|
129
+ c.after_scenario { cleanup @created_objects }
130
+ end
131
+
132
+ params = Lopata.environment['db']
133
+ ActiveRecord::Base.establish_connection(params) if params
134
+
135
+ Lopata::Scenario.include Lopata::ActiveRecord::Methods
136
136
  Lopata::ScenarioBuilder.include Lopata::ActiveRecord::DSL