chemistrykit 2.1.0 → 3.0.0

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,5 @@
1
+ LineLength:
2
+ Enabled: false
3
+
4
+ MethodLength:
5
+ Max: 30
@@ -1 +1 @@
1
- ruby-1.9.3-p429
1
+ ruby-1.9.3
@@ -1,9 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- branches:
5
- only:
6
- - master
7
- - develop
8
4
  notifications:
9
5
  hipchat: 2a07784c1aeed1b6efa332242d3fc3@Regulation Station
@@ -1,3 +1,32 @@
1
+ #3.0.0 (2013-07-04)
2
+ Now with concurrent tests
3
+
4
+ - Bumped version to 3.0.0 to prepare for release.
5
+ - included message into changelog update and added a test for specific concurrency feature
6
+ - integrated config driven concurrency, cleaned up some tests
7
+ - abstracted out config loading into brew
8
+ - learning how to spell concurrency correctly
9
+ - fixed a minor typo in a feature and added a todo comment
10
+ - updated feature files to have correct directory, added a test for concurency
11
+ - upgraded the global config into the shared context
12
+ - updated all tests to match new configuration format
13
+ - added back updated configuration object
14
+ - removed local references to selenium server and updated tests accordingly
15
+ - updated to latest build of selenium connect, fixed a small bug in a feature file, and updated the rakefile to handle find tags correctly
16
+ - Code quality fixes
17
+ - Wired up --processes to adjust number of processes when running --parallel, defaulting the number to 5
18
+ - Updated comment
19
+ - Updated sauce brew scenario to use our sauce account
20
+ - Test group execution working
21
+ - Renamed parallel to parallel_tests_mods for better explicitness. Got ckit brew running with parallel_tests (WOOT!). Now just need to figure out how to execute tests within a group for each thread rather than all tests in each thread.
22
+ - removed branch restriction on travis so all feature branches would be tested
23
+ - Fixed all code quality issues, added custom options file to tweek method length and line length cops, updated build system
24
+ - added rubocop to the build process
25
+ - Added a monkey patch for parallel_tests' RSpec runner to override its defaults with ours and wired it up in the parallel execution hook. It runs but gives an argument error from ckit. Also, took a first crack at setting the base_url via config.yaml and the shared_context
26
+ - Added parallel_tests and parallel to repo. Wired up a command argument for ckit brew (--parallel) to execute the wip progess concurrency method.
27
+ - Downgraded the required ruby version to just 1.9.3
28
+ - one small edit because of a bug with git flow #62
29
+
1
30
  #2.1.0 (2013-06-28)
2
31
  - Updated documentation for #62 release process.
3
32
  - Bumped version to 2.1.0 to prepare for release.
data/Rakefile CHANGED
@@ -1,15 +1,17 @@
1
- require "bundler/gem_tasks"
2
- require "cucumber"
3
- require "cucumber/rake/task"
1
+ # Encoding: utf-8
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'cucumber'
5
+ require 'cucumber/rake/task'
4
6
  require 'rspec/core/rake_task'
5
7
 
6
- task :default => [:build_ci]
8
+ task default: :build_ci
7
9
 
8
10
  desc 'Runs standard build activities.'
9
- task :build => [:clean, :prepare, :spec, :cucumber]
11
+ task build: [:clean, :prepare, :rubocop, :spec, :cucumber]
10
12
 
11
13
  desc 'Runs standard build activities for ci server.'
12
- task :build_ci => [:clean, :prepare, :spec]
14
+ task build_ci: [:clean, :prepare, :rubocop, :spec]
13
15
 
14
16
  desc 'Removes the build directory.'
15
17
  task :clean do
@@ -24,44 +26,49 @@ RSpec::Core::RakeTask.new(:spec)
24
26
 
25
27
  Cucumber::Rake::Task.new(:cucumber)
26
28
 
29
+ desc 'Runs code quality check'
30
+ task :rubocop do
31
+ sh 'rubocop'
32
+ end
27
33
 
28
- #TODO This could probablly be more cleanly automated
34
+ # TODO This could probably be more cleanly automated
29
35
  desc 'Start a release (Requires Git Flow)'
30
36
  task :release_start, :version do |t, args|
31
37
  version = args['version']
32
38
 
33
- #make sure we have the latest stuff
34
- system "git fetch --all"
39
+ # make sure we have the latest stuff
40
+ system 'git fetch --all'
35
41
 
36
- #first make sure master is checked out and up to date
37
- system "git checkout master"
38
- system "git pull --no-edit origin master"
42
+ # first make sure master is checked out and up to date
43
+ system 'git checkout master'
44
+ system 'git pull --no-edit origin master'
39
45
 
40
- #then make sure develop is up to date
41
- system "git checkout develop"
42
- system "git pull --no-edit origin develop"
46
+ # then make sure develop is up to date
47
+ system 'git checkout develop'
48
+ system 'git pull --no-edit origin develop'
43
49
 
44
- #next assure all the tests run
50
+ # next assure all the tests run
45
51
  task(:build).invoke
46
52
 
47
- #start the release process
53
+ # start the release process
48
54
  system "git flow release start #{version}"
49
55
 
50
- #update the version number in the .gemspec file
56
+ # update the version number in the .gemspec file
51
57
  gemspec = File.join(Dir.getwd, 'chemistrykit.gemspec')
52
- updated = File.read(gemspec).gsub(/s.version(\s+)=(\s?["|']).+(["|'])/){
53
- "s.version#{$1}=#{$2}#{version}#{$3}"
54
- }
55
- File.open(gemspec, 'w'){ |f| f.write(updated) }
56
-
57
- #commit the version bump
58
- system "git add chemistrykit.gemspec"
58
+ updated = File.read(gemspec).gsub(
59
+ /s.version(\s+)=(\s?["|']).+(["|'])/,
60
+ "s.version\\1=\\2#{version}\\3"
61
+ )
62
+ File.open(gemspec, 'w') { |f| f.write(updated) }
63
+
64
+ # commit the version bump
65
+ system 'git add chemistrykit.gemspec'
59
66
  system "git commit -m 'Bumped version to #{version} to prepare for release.'"
60
67
 
61
68
  puts "You've started release #{version}, make any last minute updates now.\n"
62
69
  end
63
70
 
64
- #TODO This could probablly be more cleanly automated
71
+ # TODO This could probablly be more cleanly automated
65
72
  desc 'Finish a release (Requires Git Flow and Gem Deploy Permissions'
66
73
  task :release_finish, :update_message do |t, args|
67
74
  message = args['update_message']
@@ -69,51 +76,57 @@ task :release_finish, :update_message do |t, args|
69
76
  changelog = File.join(Dir.getwd, 'CHANGELOG.md')
70
77
  version = File.read(gemspec).match(/s.version\s+=\s?["|'](.+)["|']/)[1]
71
78
 
72
- ###Changelog
73
- #get the latest tag
79
+ ### Changelog
80
+ # get the latest tag
81
+ system 'git checkout master'
74
82
  last_tag = `git describe --abbrev=0`
75
- #get the commit hash since the last that version was merged to develop
83
+ system "git checkout release/#{version}"
84
+
85
+ # get the commit hash since the last that version was merged to develop
76
86
  hash = `git log --grep="Merge branch 'release/#{last_tag.chomp}' into develop" --format="%H"`
77
- #get all the commits since them less merges
87
+ # get all the commits since them less merges
78
88
  log = `git log --format="- %s" --no-merges #{hash.chomp}..HEAD`
79
89
 
80
90
  changelog_contents = File.read(changelog)
81
- date = Time.new.strftime("%Y-%m-%d")
82
- #create the new heading
83
- updated_changelog = "##{version} (#{date})\n" + log + "\n" + changelog_contents
84
- #update the contents
85
- File.open(changelog, 'w'){ |f| f.write(updated_changelog) }
91
+ date = Time.new.strftime('%Y-%m-%d')
92
+ # create the new heading
93
+ updated_changelog = "##{version} (#{date})\n" + message + "\n\n" + log + "\n" + changelog_contents
94
+ # update the contents
95
+ File.open(changelog, 'w') { |f| f.write(updated_changelog) }
86
96
  puts "Updated change log for version #{version}\n"
87
97
 
88
- ###Update the gemspec with the message
89
- updated_gemspec = File.read(gemspec).gsub(/s.description(\s+)=(\s?["|']).+(["|'])/){
90
- "s.description#{$1}=#{$2}#{message}#{$3}"
91
- }
92
- File.open(gemspec, 'w'){ |f| f.write(updated_gemspec) }
98
+ ### Update the gemspec with the message
99
+ updated_gemspec = File.read(gemspec).gsub(
100
+ /s.description(\s+)=(\s?["|']).+(["|'])/,
101
+ "s.description\\1=\\2#{message}\\3"
102
+ )
103
+ File.open(gemspec, 'w') { |f| f.write(updated_gemspec) }
93
104
 
94
- #Commit the updated change log and gemspec
105
+ # Commit the updated change log and gemspec
95
106
  system "git commit -am 'Updated CHANGELOG.md and gemspec for #{version} release.'"
96
107
 
97
- #build the gem
98
- system "gem build chemistrykit.gemspec"
108
+ # build the gem
109
+ system 'gem build chemistrykit.gemspec'
99
110
 
100
- #push the gem
111
+ # push the gem
101
112
  system "gem push chemistrykit-#{version}.gem"
102
113
 
103
- #remove the gem file
114
+ # remove the gem file
104
115
  system "rm chemistrykit-#{version}.gem"
105
116
 
106
- #finish the release
107
- system "git flow release finish -m '#{message}' #{version}"
117
+ # finish the release
118
+ # TODO there is a bug with git flow, and you still need to deal with merge
119
+ # messages, might just do this with git directly
120
+ system "git flow release finish -m'#{version}' #{version}"
108
121
 
109
- #push develop
110
- system "git push origin develop"
122
+ # push develop
123
+ system 'git push origin develop'
111
124
 
112
- #push master
113
- system "git push origin master"
125
+ # push master
126
+ system 'git push origin master'
114
127
 
115
- #push tags
116
- system "git push --tags"
128
+ # push tags
129
+ system 'git push --tags'
117
130
 
118
131
  puts "Rock and roll, you just released ChemistryKit #{version}!\n"
119
132
  end
data/bin/ckit CHANGED
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+
2
4
  require 'chemistrykit'
3
5
 
4
6
  # Had difficulties getting Thor to return a proper exit status on failure
5
7
  # Will need to revisit
6
8
  ckit_result = ChemistryKit::CLI::CKitCLI.start
7
- ckit_result.kind_of?(Integer)? exit(ckit_result): exit(0)
9
+ ckit_result.kind_of?(Integer) ? exit(ckit_result) : exit(0)
@@ -1,12 +1,14 @@
1
+ # Encoding: utf-8
2
+
1
3
  Gem::Specification.new do |s|
2
4
  s.name = "chemistrykit"
3
- s.version = "2.1.0"
5
+ s.version = "3.0.0"
4
6
  s.platform = Gem::Platform::RUBY
5
7
  s.authors = ["Dave Haeffner", "Jason Fox"]
6
8
  s.email = ["dave@arrgyle.com", "jason@arrgyle.com"]
7
9
  s.homepage = "https://github.com/arrgyle/chemistrykit"
8
10
  s.summary = "A simple and opinionated web testing framework for Selenium that follows convention over configuration."
9
- s.description = "Automated build process"
11
+ s.description = "Now with concurrent tests"
10
12
  s.license = 'MIT'
11
13
 
12
14
  s.files = `git ls-files`.split($/)
@@ -22,10 +24,13 @@ Gem::Specification.new do |s|
22
24
  s.add_dependency "selenium-webdriver", "~> 2.29.0"
23
25
  s.add_dependency "ci_reporter", "~> 1.8.3"
24
26
  s.add_dependency "rest-client", "~> 1.6.7"
25
- s.add_dependency "selenium-connect", "~> 2.0.0"
27
+ s.add_dependency "selenium-connect", "~> 2.1.1"
28
+ s.add_dependency "parallel_tests", "~> 0.15.0"
29
+ s.add_dependency "parallel", "~> 0.7.0"
26
30
 
27
31
  s.add_development_dependency "rspec", "~> 2.12.0"
28
32
  s.add_development_dependency "aruba", "~> 0.5.1"
29
33
  s.add_development_dependency "cucumber", "~> 1.2.1"
30
34
  s.add_development_dependency "rake", "~> 10.0.3"
35
+ s.add_development_dependency "rubocop", "~> 0.9.0"
31
36
  end
@@ -19,7 +19,7 @@ Feature: Brewing a ChemistryKit project
19
19
  end
20
20
  end
21
21
  """
22
- And a file named "beaker/bookie_beaker.rb" with:
22
+ And a file named "beakers/bookie_beaker.rb" with:
23
23
  """
24
24
  describe "Bookie", :depth => 'shallow' do
25
25
  let(:book) { Formulas::Bookie.new(@driver) }
@@ -33,9 +33,9 @@ Feature: Brewing a ChemistryKit project
33
33
  Scenario: Localhost
34
34
  Given a file named "config.yaml" with:
35
35
  """
36
- jar: '../../../vendor/selenium-server-standalone-2.33.0.jar'
37
- log: 'evidence'
38
- host: 'localhost'
36
+ selenium_connect:
37
+ log: 'evidence'
38
+ host: 'localhost'
39
39
  """
40
40
  When I run `ckit brew`
41
41
  Then the stdout should contain "1 example, 0 failures"
@@ -47,14 +47,15 @@ Feature: Brewing a ChemistryKit project
47
47
  Scenario: Saucelabs
48
48
  Given a file named "config.yaml" with:
49
49
  """
50
- log: 'evidence'
51
- host: 'saucelabs'
52
- brower: 'iexplore'
53
- os: 'windows 2003'
54
- sauce_username: 'dave_arrgyle'
55
- sauce_api_key: '58092e14-4e9c-4911-bfc4-a09ecc02db63'
56
- browser_version: '8'
57
- description: 'ckit feature check'
50
+ selenium_connect:
51
+ log: 'evidence'
52
+ host: 'saucelabs'
53
+ browser: 'iexplore'
54
+ os: 'windows 2003'
55
+ sauce_username: 'testing_arrgyle'
56
+ sauce_api_key: 'ab7a6e17-16df-42d2-9ef6-c8d2539cc38a'
57
+ browser_version: '8'
58
+ description: 'ckit feature check'
58
59
  """
59
60
  When I run `ckit brew`
60
61
  Then the stdout should contain "1 example, 0 failures"
@@ -62,11 +63,11 @@ Feature: Brewing a ChemistryKit project
62
63
  Scenario: Brew a single beaker
63
64
  Given a file named "config.yaml" with:
64
65
  """
65
- jar: '../../../vendor/selenium-server-standalone-2.33.0.jar'
66
- log: 'evidence'
67
- host: 'localhost'
66
+ selenium_connect:
67
+ log: 'evidence'
68
+ host: 'localhost'
68
69
  """
69
- And a file named "beaker/other_beaker.rb" with:
70
+ And a file named "beakers/other_beaker.rb" with:
70
71
  """
71
72
  describe "Other", :depth => 'shallow' do
72
73
  let(:book) { Formulas::Bookie.new(@driver) }
@@ -76,6 +77,6 @@ Feature: Brewing a ChemistryKit project
76
77
  end
77
78
  end
78
79
  """
79
- When I run `ckit brew --beaker=beaker/other_beaker.rb`
80
+ When I run `ckit brew --beakers=beakers/other_beaker.rb`
80
81
  Then the stdout should contain "1 example, 0 failures"
81
82
 
@@ -64,7 +64,7 @@ Catalyst: n. A pocket of data (consumed from a CSV file) used to drive a test th
64
64
  end
65
65
  """
66
66
 
67
- And a file named "beaker/google_beaker.rb" with:
67
+ And a file named "beakers/google_beaker.rb" with:
68
68
  """
69
69
  describe "Google", :depth => 'shallow' do
70
70
  let(:google) { Formulas::Google.new(@driver) }
@@ -80,9 +80,9 @@ Catalyst: n. A pocket of data (consumed from a CSV file) used to drive a test th
80
80
 
81
81
  And a file named "config.yaml" with:
82
82
  """
83
- jar: '../../../vendor/selenium-server-standalone-2.33.0.jar'
84
- log: 'evidence'
85
- host: 'localhost'
83
+ selenium_connect:
84
+ log: 'evidence'
85
+ host: 'localhost'
86
86
  """
87
87
  When I run `ckit brew`
88
88
  Then the stdout should contain "1 example, 0 failures"
@@ -0,0 +1,61 @@
1
+ Feature: Support for concurency
2
+ In order to run the tests quickly
3
+ As a chemistry kit harness developer
4
+ I want to run them in parallel
5
+
6
+ Background:
7
+ Given I run `ckit new concurrency-test`
8
+ And I cd to "concurrency-test"
9
+ And a file named "beakers/first_beaker.rb" with:
10
+ """
11
+ describe "Cheese", :depth => 'shallow' do
12
+ it "loads an external web page" do
13
+ @driver.get "http://www.google.com"
14
+ @driver.title.should include("Google")
15
+ end
16
+ it "loads an external web page" do
17
+ @driver.get "http://www.google.com"
18
+ @driver.title.should include("Google")
19
+ end
20
+ end
21
+ """
22
+ And a file named "beakers/second_beaker.rb" with:
23
+ """
24
+ describe "Cheese 2", :depth => 'shallow' do
25
+ it "loads an external web page" do
26
+ @driver.get "http://www.google.com"
27
+ @driver.title.should include("Google")
28
+ end
29
+ end
30
+ """
31
+ Scenario: I can run the tests in parallel
32
+ When I overwrite config.yaml with:
33
+ """
34
+ concurrency: 4
35
+ selenium_connect:
36
+ log: 'evidence'
37
+ host: 'saucelabs'
38
+ browser: 'firefox'
39
+ sauce_username: 'testing_arrgyle'
40
+ sauce_api_key: 'ab7a6e17-16df-42d2-9ef6-c8d2539cc38a'
41
+ description: 'concurrency check'
42
+ """
43
+ When I run `ckit brew`
44
+ Then the stdout should contain "4 processes for 2 beakers"
45
+ And the stdout should contain "3 examples, 0 failures"
46
+
47
+ Scenario: I can run a specific beaker in parallel
48
+ When I overwrite config.yaml with:
49
+ """
50
+ concurrency: 4
51
+ selenium_connect:
52
+ log: 'evidence'
53
+ host: 'saucelabs'
54
+ browser: 'firefox'
55
+ sauce_username: 'testing_arrgyle'
56
+ sauce_api_key: 'ab7a6e17-16df-42d2-9ef6-c8d2539cc38a'
57
+ description: 'concurrency check'
58
+ """
59
+ When I run `ckit brew --beakers=beakers/first_beaker.rb`
60
+ Then the stdout should contain "4 processes for 1 beakers"
61
+ And the stdout should contain "2 examples, 0 failures"
@@ -5,13 +5,13 @@ Feature: Exit Status
5
5
  And I cd to "cheese"
6
6
  And a file named "config.yaml" with:
7
7
  """
8
- jar: '../../../vendor/selenium-server-standalone-2.33.0.jar'
9
- log: 'evidence'
10
- host: 'localhost'
8
+ selenium_connect:
9
+ log: 'evidence'
10
+ host: 'localhost'
11
11
  """
12
12
 
13
13
  Scenario: Passing
14
- And a file named "beaker/test_beaker.rb" with:
14
+ And a file named "beakers/test_beaker.rb" with:
15
15
  """
16
16
  describe "Cheese", :depth => 'shallow' do
17
17
  it "loads an external web page" do
@@ -24,7 +24,7 @@ Feature: Exit Status
24
24
  Then the exit code should be 0
25
25
 
26
26
  Scenario: Failing
27
- And a file named "beaker/test_beaker.rb" with:
27
+ And a file named "beakers/test_beaker.rb" with:
28
28
  """
29
29
  describe "Cheese", :depth => 'shallow' do
30
30
  it "loads an external web page" do