tune_spec 0.5.3 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
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: []