tune_spec 0.5.3 → 0.5.4

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: 8b83bf10235e9377d6a6a3cf9c6a30a67b49b124
4
- data.tar.gz: df48ef4b2cb6d703d80735e8300638fdd50b9622
3
+ metadata.gz: 4e58e3419f386d0e0c068bb72cb03c03f31fb77e
4
+ data.tar.gz: 9faee48a6c6360e4f881e514d552cb9390f76e0d
5
5
  SHA512:
6
- metadata.gz: c1236ea27bc5238c533c86cd0e6d3164b786798cf7f37bfefcc1fc097af35e108cbe604977414346d679b6450f141fb22305e5362e5522d5aeb038a7d204f0f8
7
- data.tar.gz: 4f7f0a5f9ce4ff5b7771d8b0ab734274e2a9502a69730895852c087d5df452cd1e76d03303e7da33b16235a984d27553a2d5011506067a9884f08a1b4130903d
6
+ metadata.gz: 29f5f6af0352a71fd419d0bd2aa7242c9d211f7654dc92054bbdf01e99e93a6d98f3653aafe000eac87f670212ef90dee74d7905e42ff8b42c082e5de9e51a69
7
+ data.tar.gz: f5ecdaa9a857697c5674ab5a25409c52559fadcd5eb33ed8f38ff3dbfeed48903a1b859df35c79ad5994a5f70805ba9739072120c19e754852ef4c5a22aa5b26
data/.gitignore CHANGED
@@ -1,8 +1,11 @@
1
1
  .DS_Store
2
2
  *.gem
3
3
  .yardoc/
4
+ coverage/
4
5
  doc/
5
6
 
7
+ test_tmp/
8
+
6
9
  /tags
7
10
  *.swp
8
11
  *.vim
@@ -0,0 +1,8 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.4.1
3
+ Exclude:
4
+ - 'test_tmp/**/*.rb'
5
+
6
+ Metrics/BlockLength:
7
+ Exclude:
8
+ - 'test/**/*_test.rb'
@@ -1,8 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.4.1
4
- before_script:
5
- - bundle exec yard config load_plugins true
4
+ install:
5
+ - gem uninstall bundler
6
+ - gem install bundler --version '2.0.1'
7
+ - bundle install
6
8
  script:
7
9
  - bundle exec rubocop
8
10
  - bundle exec yard doctest
11
+ - bundle exec rake test TESTOPTS='-v -p'
@@ -0,0 +1 @@
1
+ --plugin yard-doctest
@@ -1,31 +1,32 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tune_spec (0.5.3)
4
+ tune_spec (0.5.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- ast (2.3.0)
10
- minitest (5.11.1)
11
- parallel (1.12.1)
12
- parser (2.4.0.2)
13
- ast (~> 2.3)
14
- powerpack (0.1.1)
15
- rainbow (2.2.2)
16
- rake
17
- rake (12.3.0)
18
- rubocop (0.50.0)
9
+ ast (2.4.0)
10
+ jaro_winkler (1.5.2)
11
+ minitest (5.11.3)
12
+ parallel (1.13.0)
13
+ parser (2.6.0.0)
14
+ ast (~> 2.4.0)
15
+ powerpack (0.1.2)
16
+ rainbow (3.0.0)
17
+ rake (12.3.2)
18
+ rubocop (0.63.1)
19
+ jaro_winkler (~> 1.5.1)
19
20
  parallel (~> 1.10)
20
- parser (>= 2.3.3.1, < 3.0)
21
+ parser (>= 2.5, != 2.5.1.1)
21
22
  powerpack (~> 0.1)
22
- rainbow (>= 2.2.2, < 3.0)
23
+ rainbow (>= 2.2.2, < 4.0)
23
24
  ruby-progressbar (~> 1.7)
24
- unicode-display_width (~> 1.0, >= 1.0.1)
25
- ruby-progressbar (1.9.0)
26
- unicode-display_width (1.3.0)
27
- yard (0.9.12)
28
- yard-doctest (0.1.10)
25
+ unicode-display_width (~> 1.4.0)
26
+ ruby-progressbar (1.10.0)
27
+ unicode-display_width (1.4.1)
28
+ yard (0.9.18)
29
+ yard-doctest (0.1.13)
29
30
  minitest
30
31
  yard
31
32
 
@@ -33,11 +34,11 @@ PLATFORMS
33
34
  ruby
34
35
 
35
36
  DEPENDENCIES
36
- bundler (~> 1.16, >= 1.16.2)
37
- rubocop (~> 0.50.0)
37
+ rake (~> 12.3.2)
38
+ rubocop (~> 0.63.1)
38
39
  tune_spec!
39
- yard (~> 0.9.12)
40
- yard-doctest (~> 0.1.10)
40
+ yard (~> 0.9.18)
41
+ yard-doctest (~> 0.1.13)
41
42
 
42
43
  BUNDLED WITH
43
- 1.16.2
44
+ 2.0.1
data/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # TuneSpec
2
2
 
3
- Organizes large scale integration tests following Convention over Configuration paradigm.
3
+ [![Gem Version](https://badge.fury.io/rb/tune_spec.svg)](https://badge.fury.io/rb/tune_spec)
4
+ [![Build Status](https://travis-ci.com/igor-starostenko/tune_spec.svg?branch=master)](https://travis-ci.com/igor-starostenko/tune_spec)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/6d924fbd83bf675facf3/maintainability)](https://codeclimate.com/github/igor-starostenko/tune_spec/maintainability)
6
+
7
+ Provides an easy to use DSL for Page Object model. Helps to organize large scale integration tests by following Convention over Configuration paradigm.
4
8
 
5
9
  ## Installation
6
10
 
@@ -33,10 +37,10 @@ lib
33
37
  └── steps
34
38
  ```
35
39
 
36
- In your framework include the module:
40
+ Include the module in your framework:
37
41
 
38
42
  ```ruby
39
- include TuneSpec::Instances
43
+ include TuneSpec
40
44
  ```
41
45
 
42
46
  Then you can use TuneSpec DSL to store instances of your Groups, Steps and Page objects.
@@ -94,6 +98,10 @@ After checking out the repo, run `bin/setup` to install dependencies. You can al
94
98
 
95
99
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
96
100
 
101
+ ## Testing
102
+
103
+ To test documentation with [yard-doctest](https://github.com/p0deje/yard-doctest), run `bundle exec yard doctest`. For unit tests run `bundle exec rake test`.
104
+
97
105
  ## Contributing
98
106
 
99
107
  Bug reports and pull requests are welcome on GitHub at https://github.com/igor-starostenko/tune_spec. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
+ require 'yard-doctest'
6
+ require_relative 'test/test_helper'
7
+
8
+ namespace :test do
9
+ task :setup do
10
+ TestHelper.setup_directory
11
+ end
12
+
13
+ task :cleanup do
14
+ TestHelper.remove_directory
15
+ end
16
+ end
17
+
18
+ Rake::TestTask.new do |task|
19
+ task.pattern = 'test/**/*_test.rb'
20
+ end
21
+
22
+ YARD::Doctest::RakeTask.new do |task|
23
+ task.doctest_opts = %w[-v]
24
+ task.pattern = 'lib/**/*.rb'
25
+ end
@@ -1,58 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'tune_spec'
4
- require 'fileutils'
4
+ require_relative 'test/test_helper'
5
5
 
6
- include TuneSpec::Instances
7
- TEST_ENV = 'STG'
6
+ include TuneSpec # rubocop:disable Style/MixinUsage
8
7
 
9
8
  TuneSpec.configure do |conf|
10
- conf.directory = 'test'
9
+ conf.directory = DIRECTORY
11
10
  conf.steps_page_arg = :page_object
12
11
  conf.groups_opts = { env: TEST_ENV, aut: 'WEB' }
13
12
  conf.steps_opts = { env: TEST_ENV }
14
13
  conf.page_opts = { env: TEST_ENV }
15
14
  end
16
15
 
17
- def create_file(name, type)
18
- folder_name = type == :page ? 'pages' : type.to_s
19
- file_name = "test/#{folder_name}/#{name}_#{type}.rb"
20
- FileUtils.mkdir_p("test/#{folder_name}")
21
- File.open(file_name, 'w+') { |f| f << file_content(name, type) }
22
- end
23
-
24
- def file_content(name, type)
25
- <<~FILE
26
- class_name = "#{name.capitalize}#{type.capitalize}"
27
- klass = Object.const_set(class_name, Class.new)
28
-
29
- klass.class_eval do
30
- case "#{type}"
31
- when 'groups'
32
- define_method('initialize') do |test, env:, aut:|; end
33
- define_method('complete') do; end
34
- when 'steps'
35
- define_method('initialize') do |env:, page_object:|
36
- @env = env
37
- @page_object = page_object
38
- end
39
- define_method('verify_result') do
40
- @page_object.click_element
41
- end
42
- when 'page'
43
- define_method('initialize') do |env:|; end
44
- define_method('click_element') do; end
45
- end
46
- end
47
- FILE
48
- end
49
-
50
- create_file(:login, :groups)
51
- create_file(:calculator, :steps)
52
- create_file(:home, :page)
16
+ TestHelper.setup_directory
53
17
 
54
18
  YARD::Doctest.configure do |doctest|
55
19
  doctest.after_run do
56
- FileUtils.rm_rf('test')
20
+ TestHelper.remove_directory
57
21
  end
58
22
  end
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'tune_spec/configuration'
4
+ require 'tune_spec/instances'
4
5
  require 'tune_spec/version'
5
6
 
6
- # Namespace for all TuneSpec objects
7
+ # Main namespace
7
8
  module TuneSpec
8
9
  extend Configuration
10
+ include Instances
11
+
9
12
  # TODO: Add method missing
10
13
  end
11
-
12
- require 'tune_spec/instances'
@@ -29,7 +29,7 @@ module TuneSpec
29
29
  # @param block [Block] that yields to self
30
30
  # @return [StepObject]
31
31
  # @example
32
- # steps(:calculator, page: :home).verify_result
32
+ # steps(:calculator, page: :demo).verify_result
33
33
  def steps(name, opts = {}, *args, &block)
34
34
  opts[:page] && opts[:page] = pages(opts.fetch(:page))
35
35
  instance_handler(name, Steps, opts, *args, block)
@@ -63,9 +63,13 @@ module TuneSpec
63
63
  # @private
64
64
  def create_instance_method(method_name, klass, instance_klass)
65
65
  return if respond_to?(method_name)
66
+
66
67
  define_singleton_method(method_name) do |*args|
67
- instance_var = instance_variable_get("@#{method_name}")
68
- return instance_var if klass.rules_passed?(instance_var, args.first)
68
+ if instance_variable_defined?("@#{method_name}")
69
+ instance_var = instance_variable_get("@#{method_name}")
70
+ return instance_var if klass.rules_passed?(instance_var, args.first)
71
+ end
72
+
69
73
  new_instance = create_instance(klass, instance_klass, *args)
70
74
  instance_variable_set("@#{method_name}", new_instance)
71
75
  end
@@ -74,6 +78,7 @@ module TuneSpec
74
78
  # @private
75
79
  def create_instance(klass, instance_klass, *args)
76
80
  return instance_klass.new(*args) if klass.object_type == :common
81
+
77
82
  wait_opts = TuneSpec.calabash_wait_opts
78
83
  page(instance_klass, *args).await(wait_opts)
79
84
  end
@@ -81,6 +86,7 @@ module TuneSpec
81
86
  # @private
82
87
  def call_instance_method(method_name, *args, block)
83
88
  return __send__(method_name, *args) unless block
89
+
84
90
  __send__(method_name, *args).instance_eval(&block)
85
91
  end
86
92
  end
@@ -14,6 +14,7 @@ module TuneSpec
14
14
 
15
15
  def object_type
16
16
  return super unless TuneSpec.calabash_enabled
17
+
17
18
  :calabash_page
18
19
  end
19
20
 
@@ -10,6 +10,7 @@ module TuneSpec
10
10
  # Steps specific rules
11
11
  def rules_passed?(instance, opts = {})
12
12
  return false if opts.nil?
13
+
13
14
  same_page?(instance, opts[page_arg]) unless opts.empty?
14
15
  end
15
16
 
@@ -21,6 +22,7 @@ module TuneSpec
21
22
  return true unless instance.respond_to?(page_arg)
22
23
  return true unless general_steps?(instance)
23
24
  return true if page.nil?
25
+
24
26
  page.instance_of?(instance.__send__(page_arg).class)
25
27
  end
26
28
 
@@ -38,6 +40,7 @@ module TuneSpec
38
40
 
39
41
  def pre_format_opts(opts)
40
42
  return opts unless opts.key?(:page)
43
+
41
44
  opts.tap { |hash| hash[page_arg] = hash.delete(:page) }
42
45
  end
43
46
  end
@@ -49,7 +49,9 @@ module TuneSpec
49
49
 
50
50
  def ensure_required(name)
51
51
  path = project_files.detect { |f| f.include?("/#{name}.rb") }
52
- path ? require("./#{path}") : raise("Unable to find #{name}.rb")
52
+ return require("./#{path}") if path
53
+
54
+ raise("Unable to find #{name}.rb in /#{TuneSpec.directory} directory")
53
55
  end
54
56
 
55
57
  def project_files
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TuneSpec
4
- VERSION = '0.5.3'
4
+ VERSION = '0.5.4'
5
5
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'test_helper'
4
+
5
+ TestHelper.create_file(:login, :groups) do
6
+ <<-FILE
7
+ class LoginGroups
8
+ def initialize(test, env:, aut:); end
9
+ def complete; end
10
+ end
11
+ FILE
12
+ end
13
+
14
+ TestHelper.create_file(:calculator, :steps) do
15
+ <<-FILE
16
+ class CalculatorSteps
17
+ attr_reader :page_object
18
+ def initialize(env:, page_object:)
19
+ @env = env
20
+ @page_object = page_object
21
+ end
22
+ def verify_result
23
+ raise unless page_object.title === 'ok'
24
+ end
25
+ end
26
+ FILE
27
+ end
28
+
29
+ TestHelper.create_file(:demo, :page) do
30
+ <<-FILE
31
+ class DemoPage
32
+ def initialize; end
33
+ def title
34
+ 'ok'
35
+ end
36
+ end
37
+ FILE
38
+ end
39
+
40
+ TestHelper.create_file(:home, :page) do
41
+ <<-FILE
42
+ class HomePage
43
+ def initialize(env:); end
44
+ def click_element; end
45
+ end
46
+ FILE
47
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+
5
+ TEST_ENV = 'STG'
6
+ DIRECTORY = 'test_tmp'
7
+
8
+ # Dynamically generates test files
9
+ module TestHelper
10
+ def self.create_file(name, type, &block)
11
+ folder_name = type == :page ? 'pages' : type.to_s
12
+ file_name = "#{DIRECTORY}/#{folder_name}/#{name}_#{type}.rb"
13
+ FileUtils.mkdir_p("#{DIRECTORY}/#{folder_name}")
14
+ File.open(file_name, 'w+') { |f| f << block.call }
15
+ end
16
+
17
+ def self.setup_directory
18
+ require_relative 'test_files'
19
+ end
20
+
21
+ def self.remove_directory
22
+ FileUtils.rm_rf(DIRECTORY)
23
+ end
24
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitest/autorun'
4
+ require 'tune_spec'
5
+ require_relative '../test_helper'
6
+
7
+ TuneSpec.configure do |conf|
8
+ conf.directory = DIRECTORY
9
+ conf.steps_page_arg = :page_object
10
+ conf.groups_opts = { env: TEST_ENV, aut: 'WEB' }
11
+ conf.steps_opts = { env: TEST_ENV }
12
+ conf.page_opts = { env: TEST_ENV }
13
+ end
14
+
15
+ include TuneSpec::Instances # rubocop:disable Style/MixinUsage
16
+
17
+ TestHelper.setup_directory
18
+
19
+ describe TuneSpec::Instances do
20
+ describe Groups do
21
+ it 'generates an instance' do
22
+ instance = groups(:login, {}, 'Main')
23
+ instance.complete
24
+ instance.class.must_equal LoginGroups
25
+ end
26
+ end
27
+
28
+ describe Steps do
29
+ it 'generates an instance' do
30
+ instance = steps(:calculator, page: :demo)
31
+ instance.verify_result
32
+ instance.class.must_equal CalculatorSteps
33
+ end
34
+
35
+ it 'has page object' do
36
+ steps(:calculator, page: :demo) do
37
+ page_object.class.must_equal DemoPage
38
+ end
39
+ end
40
+ end
41
+
42
+ describe Page do
43
+ it 'generates an instance' do
44
+ instance = pages(:home)
45
+ instance.click_element
46
+ instance.class.must_equal HomePage
47
+ end
48
+ end
49
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('../lib', __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'tune_spec/version'
6
6
 
@@ -19,9 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.bindir = 'exe'
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ['lib']
22
+ spec.metadata['yard.run'] = 'yri' # use "yard" to build full HTML docs.
22
23
 
23
- spec.add_development_dependency 'bundler', '~> 1.16', '>= 1.16.2'
24
- spec.add_development_dependency 'rubocop', '~> 0.50.0'
25
- spec.add_development_dependency 'yard', '~> 0.9.12'
26
- spec.add_development_dependency 'yard-doctest', '~> 0.1.10'
24
+ spec.add_development_dependency 'rake', '~> 12.3.2'
25
+ spec.add_development_dependency 'rubocop', '~> 0.63.1'
26
+ spec.add_development_dependency 'yard', '~> 0.9.18'
27
+ spec.add_development_dependency 'yard-doctest', '~> 0.1.13'
27
28
  end
metadata CHANGED
@@ -1,77 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tune_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Starostenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-06-12 00:00:00.000000000 Z
11
+ date: 2019-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 1.16.2
19
+ version: 12.3.2
23
20
  type: :development
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '1.16'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 1.16.2
26
+ version: 12.3.2
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: rubocop
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: 0.50.0
33
+ version: 0.63.1
40
34
  type: :development
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
38
  - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: 0.50.0
40
+ version: 0.63.1
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: yard
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
45
  - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: 0.9.12
47
+ version: 0.9.18
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
51
  requirements:
58
52
  - - "~>"
59
53
  - !ruby/object:Gem::Version
60
- version: 0.9.12
54
+ version: 0.9.18
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: yard-doctest
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
59
  - - "~>"
66
60
  - !ruby/object:Gem::Version
67
- version: 0.1.10
61
+ version: 0.1.13
68
62
  type: :development
69
63
  prerelease: false
70
64
  version_requirements: !ruby/object:Gem::Requirement
71
65
  requirements:
72
66
  - - "~>"
73
67
  - !ruby/object:Gem::Version
74
- version: 0.1.10
68
+ version: 0.1.13
75
69
  description: e2e Ruby tests in Page Objects
76
70
  email:
77
71
  - contactigorstar@gmail.com
@@ -81,14 +75,17 @@ extensions: []
81
75
  extra_rdoc_files: []
82
76
  files:
83
77
  - ".gitignore"
78
+ - ".rubocop.yml"
84
79
  - ".ruby-gemset"
85
80
  - ".ruby-version"
86
81
  - ".travis.yml"
82
+ - ".yardopts"
87
83
  - CODE_OF_CONDUCT.md
88
84
  - Gemfile
89
85
  - Gemfile.lock
90
86
  - LICENSE
91
87
  - README.md
88
+ - Rakefile
92
89
  - bin/console
93
90
  - bin/setup
94
91
  - doctest_helper.rb
@@ -102,11 +99,15 @@ files:
102
99
  - lib/tune_spec/instances/tuner.rb
103
100
  - lib/tune_spec/parser.rb
104
101
  - lib/tune_spec/version.rb
102
+ - test/test_files.rb
103
+ - test/test_helper.rb
104
+ - test/tune_spec/instances_test.rb
105
105
  - tune_spec.gemspec
106
106
  homepage: https://github.com/igor-starostenko/tune_spec
107
107
  licenses:
108
108
  - MIT
109
- metadata: {}
109
+ metadata:
110
+ yard.run: yri
110
111
  post_install_message:
111
112
  rdoc_options: []
112
113
  require_paths:
@@ -126,5 +127,5 @@ rubyforge_project:
126
127
  rubygems_version: 2.6.12
127
128
  signing_key:
128
129
  specification_version: 4
129
- summary: tune_spec_0.5.3
130
+ summary: tune_spec_0.5.4
130
131
  test_files: []