learn-test 2.7.0 → 3.2.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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -12
  3. data/.gitignore +1 -0
  4. data/.rspec +1 -0
  5. data/Gemfile +4 -2
  6. data/README.md +2 -2
  7. data/Rakefile +2 -1
  8. data/bin/learn-test +15 -14
  9. data/bin/learn-test-wip +359 -0
  10. data/learn-test.gemspec +15 -19
  11. data/lib/learn_test.rb +3 -4
  12. data/lib/learn_test/client.rb +2 -0
  13. data/lib/learn_test/dependencies/ant.rb +2 -0
  14. data/lib/learn_test/dependencies/csharp.rb +3 -1
  15. data/lib/learn_test/dependencies/imagemagick.rb +2 -0
  16. data/lib/learn_test/dependencies/java.rb +2 -0
  17. data/lib/learn_test/dependencies/karma.rb +2 -0
  18. data/lib/learn_test/dependencies/nodejs.rb +2 -0
  19. data/lib/learn_test/dependencies/phantomjs.rb +6 -4
  20. data/lib/learn_test/dependencies/protractor.rb +2 -0
  21. data/lib/learn_test/dependencies/selenium_server.rb +2 -0
  22. data/lib/learn_test/dependency.rb +4 -4
  23. data/lib/learn_test/file_finder.rb +2 -1
  24. data/lib/learn_test/git_wip.rb +23 -0
  25. data/lib/learn_test/github_interactor.rb +2 -1
  26. data/lib/learn_test/js_strategy.rb +3 -1
  27. data/lib/learn_test/learn_oauth_token_parser.rb +2 -0
  28. data/lib/learn_test/netrc_interactor.rb +2 -1
  29. data/lib/learn_test/repo_parser.rb +2 -0
  30. data/lib/learn_test/reporter.rb +14 -7
  31. data/lib/learn_test/runner.rb +5 -5
  32. data/lib/learn_test/strategies/csharp_nunit.rb +5 -3
  33. data/lib/learn_test/strategies/java_junit.rb +9 -8
  34. data/lib/learn_test/strategies/karma.rb +9 -5
  35. data/lib/learn_test/strategies/mocha.rb +10 -8
  36. data/lib/learn_test/strategies/protractor.rb +7 -6
  37. data/lib/learn_test/strategies/pytest.rb +13 -13
  38. data/lib/learn_test/strategies/pytest/requirements_checker.rb +14 -12
  39. data/lib/learn_test/strategies/rspec.rb +11 -10
  40. data/lib/learn_test/strategy.rb +5 -6
  41. data/lib/learn_test/user_id_parser.rb +2 -1
  42. data/lib/learn_test/username_parser.rb +3 -2
  43. data/lib/learn_test/version.rb +3 -1
  44. data/spec/features/rspec_unit_spec.rb +4 -2
  45. data/spec/fixtures/rspec-unit-spec/lib/dog.rb +3 -1
  46. data/spec/fixtures/rspec-unit-spec/spec/dog_spec.rb +4 -2
  47. data/spec/fixtures/rspec-unit-spec/spec/spec_helper.rb +2 -0
  48. data/spec/learn_test/git_spec.rb +40 -0
  49. data/spec/learn_test/reporter_spec.rb +69 -31
  50. data/spec/learn_test/username_parser_spec.rb +2 -0
  51. data/spec/lib/learn_test/strategies/mocha_spec.rb +21 -20
  52. data/spec/repo_parser_spec.rb +14 -12
  53. data/spec/spec_helper.rb +2 -0
  54. metadata +18 -147
  55. data/Gemfile.lock +0 -83
  56. data/lib/learn_test/dependencies/firefox.rb +0 -26
  57. data/lib/learn_test/dependencies/green_onion.rb +0 -14
  58. data/lib/learn_test/strategies/green_onion.rb +0 -57
  59. data/lib/learn_test/strategies/jasmine.rb +0 -181
  60. data/lib/learn_test/strategies/jasmine/boot.js +0 -184
  61. data/lib/learn_test/strategies/jasmine/console.js +0 -161
  62. data/lib/learn_test/strategies/jasmine/formatters/jasmine2-junit.js +0 -199
  63. data/lib/learn_test/strategies/jasmine/helpers/ConsoleHelper.js +0 -12
  64. data/lib/learn_test/strategies/jasmine/helpers/ConsoleHelperNoColor.js +0 -12
  65. data/lib/learn_test/strategies/jasmine/initializer.rb +0 -27
  66. data/lib/learn_test/strategies/jasmine/jasmine-html.js +0 -360
  67. data/lib/learn_test/strategies/jasmine/jasmine-jquery.js +0 -813
  68. data/lib/learn_test/strategies/jasmine/jasmine.css +0 -56
  69. data/lib/learn_test/strategies/jasmine/jasmine.js +0 -2403
  70. data/lib/learn_test/strategies/jasmine/jasmine_favicon.png +0 -0
  71. data/lib/learn_test/strategies/jasmine/jquery-1.8.0.min.js +0 -2
  72. data/lib/learn_test/strategies/jasmine/jquery-ui-1.8.23.custom.min.js +0 -125
  73. data/lib/learn_test/strategies/jasmine/runners/SpecRunner.html +0 -35
  74. data/lib/learn_test/strategies/jasmine/runners/run-jasmine.js +0 -229
  75. data/lib/learn_test/strategies/jasmine/templates/SpecRunnerTemplate.html.erb +0 -35
  76. data/lib/learn_test/strategies/jasmine/templates/SpecRunnerTemplateNoColor.html.erb +0 -35
  77. data/lib/learn_test/strategies/jasmine/templates/requires.yml.example +0 -7
  78. data/lib/learn_test/strategies/jasmine/vendor/require.js +0 -2077
  79. data/spec/features/jasmine_jquery_fixtures_spec.rb +0 -10
  80. data/spec/fixtures/jasmine-jquery-fixtures/index.html +0 -10
  81. data/spec/fixtures/jasmine-jquery-fixtures/requires.yml +0 -4
  82. data/spec/fixtures/jasmine-jquery-fixtures/spec/jasmine-jquery-fixtures-spec.js +0 -11
@@ -1,36 +1,32 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'learn_test/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "learn-test"
8
+ spec.name = 'learn-test'
8
9
  spec.version = LearnTest::VERSION
9
- spec.authors = ["Flatiron School"]
10
- spec.email = ["learn@flatironschool.com"]
11
- spec.summary = %q{Runs RSpec, Jasmine, Karma, Mocha, and Python Pytest Test builds and pushes JSON output to Learn.}
12
- spec.homepage = "https://github.com/learn-co/learn-test"
13
- spec.license = "MIT"
10
+ spec.authors = ['Flatiron School']
11
+ spec.email = ['learn@flatironschool.com']
12
+ spec.summary = 'Runs RSpec, Karma, Mocha, and Python Pytest Test builds and pushes JSON output to Learn.'
13
+ spec.homepage = 'https://github.com/learn-co/learn-test'
14
+ spec.license = 'MIT'
14
15
 
15
16
  spec.files = `git ls-files -z`.split("\x0")
16
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
- spec.require_paths = ["lib", "bin"]
19
- spec.required_ruby_version = '>= 2.3.0'
19
+ spec.require_paths = ['lib', 'bin']
20
+ spec.required_ruby_version = '>= 2.5.0'
20
21
 
21
- spec.add_development_dependency "bundler", "~> 2.1.4"
22
22
  spec.add_development_dependency "rake", "~> 13.0.1"
23
- spec.add_development_dependency "rspec", "~> 3.8"
23
+ spec.add_development_dependency "rspec", "~> 3.7"
24
+
24
25
  spec.add_runtime_dependency "rspec", "~> 3.0"
25
26
  spec.add_runtime_dependency "netrc", "~> 0.11.0"
26
- spec.add_runtime_dependency "git", "~> 1.2"
27
- spec.add_runtime_dependency "oj", "~> 2.9"
28
- spec.add_runtime_dependency "faraday", "~> 0.9"
27
+ spec.add_runtime_dependency "git", "~> 1.7"
28
+ spec.add_runtime_dependency "oj", "~> 3.10"
29
+ spec.add_runtime_dependency "faraday", "~> 1.0"
29
30
  spec.add_runtime_dependency "crack", "~> 0.4.3"
30
- spec.add_runtime_dependency "jasmine", "~> 2.6.0", ">= 2.6.0"
31
- spec.add_runtime_dependency "jasmine-core", "< 2.99.1"
32
31
  spec.add_runtime_dependency "colorize", "~> 0.8.1"
33
- spec.add_runtime_dependency "webrick", "~> 1.3.1", ">= 1.3.1"
34
- spec.add_runtime_dependency "rainbow", "= 1.99.2"
35
- spec.add_runtime_dependency "selenium-webdriver", "~> 2.52.0", '>= 2.52.0'
36
32
  end
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
  require 'oj'
3
5
  require 'colorize'
4
6
 
5
7
  require_relative 'learn_test/version'
6
8
  require_relative 'learn_test/netrc_interactor'
9
+ require_relative 'learn_test/git_wip'
7
10
  require_relative 'learn_test/github_interactor'
8
11
  require_relative 'learn_test/user_id_parser'
9
12
  require_relative 'learn_test/username_parser'
@@ -16,14 +19,12 @@ require_relative 'learn_test/dependency'
16
19
 
17
20
  require_relative 'learn_test/strategy'
18
21
  require_relative 'learn_test/js_strategy'
19
- require_relative 'learn_test/strategies/jasmine'
20
22
  require_relative 'learn_test/strategies/rspec'
21
23
  require_relative 'learn_test/strategies/karma'
22
24
  require_relative 'learn_test/strategies/protractor'
23
25
  require_relative 'learn_test/strategies/java_junit'
24
26
  require_relative 'learn_test/strategies/csharp_nunit'
25
27
  require_relative 'learn_test/strategies/mocha'
26
- require_relative 'learn_test/strategies/green_onion'
27
28
  require_relative 'learn_test/strategies/pytest'
28
29
 
29
30
  module LearnTest
@@ -37,8 +38,6 @@ module LearnTest
37
38
  autoload :Ant, 'learn_test/dependencies/ant'
38
39
  autoload :Imagemagick, 'learn_test/dependencies/imagemagick'
39
40
  autoload :SeleniumServer, 'learn_test/dependencies/selenium_server'
40
- autoload :Firefox, 'learn_test/dependencies/firefox'
41
- autoload :GreenOnion, 'learn_test/dependencies/green_onion'
42
41
  autoload :Pytest, 'learn_test/dependencies/pytest'
43
42
  end
44
43
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'faraday'
2
4
  require 'json'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Dependencies
3
5
  class Ant < LearnTest::Dependency
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Dependencies
3
5
  class CSharp < LearnTest::Dependency
@@ -10,7 +12,7 @@ module LearnTest
10
12
  end
11
13
 
12
14
  def install
13
- die("Please install the .NET core from https://www.microsoft.com/net/core")
15
+ die('Please install the .NET core from https://www.microsoft.com/net/core')
14
16
  end
15
17
 
16
18
  def die(message)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Dependencies
3
5
  class Imagemagick < LearnTest::Dependency
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Dependencies
3
5
  class Java < LearnTest::Dependency
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Dependencies
3
5
  class Karma < LearnTest::Dependency
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Dependencies
3
5
  class NodeJS < LearnTest::Dependency
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Dependencies
3
5
  class PhantomJS < LearnTest::Dependency
@@ -7,8 +9,8 @@ module LearnTest
7
9
  return !phantom_installed_on_mac?
8
10
  end
9
11
 
10
- if !phantom_installed_on_linux?
11
- die("You must have PhantomJS installed: http://phantomjs.org/download.html")
12
+ unless phantom_installed_on_linux?
13
+ die('You must have PhantomJS installed: http://phantomjs.org/download.html')
12
14
  end
13
15
 
14
16
  super
@@ -31,12 +33,12 @@ module LearnTest
31
33
  def phantom_installed_on_linux?
32
34
  phantom_installed?
33
35
  end
36
+
34
37
  def self.check_installation
35
38
  new.check_installation
36
39
  end
37
40
 
38
- def check_installation
39
- end
41
+ def check_installation; end
40
42
 
41
43
  def phantom_installed_by_brew?
42
44
  !`brew ls --versions phantomjs`.empty?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Dependencies
3
5
  class Protractor < LearnTest::Dependency
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Dependencies
3
5
  class SeleniumServer < LearnTest::Dependency
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  class Dependency
3
5
  attr_reader :options
@@ -14,11 +16,9 @@ module LearnTest
14
16
  false
15
17
  end
16
18
 
17
- def install
18
- end
19
+ def install; end
19
20
 
20
- def die(message)
21
- end
21
+ def die(message); end
22
22
 
23
23
  def mac?
24
24
  !!RUBY_PLATFORM.match(/darwin/)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  class FileFinder
3
5
  def self.location_to_dir(dir_name)
@@ -9,4 +11,3 @@ module LearnTest
9
11
  end
10
12
  end
11
13
  end
12
-
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git'
4
+
5
+ module LearnTest
6
+ module GitWip
7
+ class << self
8
+ def run!(log: false)
9
+ git = Git.open('./', log: log)
10
+ working_branch = git.current_branch
11
+
12
+ `learn-test-wip save "Automatic test submission" -u &> /dev/null`
13
+
14
+ return false unless $?.success? # rubocop:disable Style/SpecialGlobalVars
15
+
16
+ git.push('origin', "wip/#{working_branch}:refs/heads/wip")
17
+ git.config['remote.origin.url'].gsub('.git', '/tree/wip')
18
+ rescue StandardError
19
+ false
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'open-uri'
2
4
 
3
5
  module LearnTest
@@ -20,4 +22,3 @@ module LearnTest
20
22
  end
21
23
  end
22
24
  end
23
-
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module JsStrategy
3
5
  def js_package
@@ -13,7 +15,7 @@ module LearnTest
13
15
  end
14
16
 
15
17
  def missing_dependencies?
16
- return true if !File.exist?("node_modules")
18
+ return true unless File.exist?('node_modules')
17
19
  [:dependencies, :devDependencies, :peerDependencies].any? do |dep_group|
18
20
  modules = js_package[dep_group] || {}
19
21
  modules_missing?(modules.keys)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  class LearnOauthTokenParser
3
5
  def self.get_learn_oauth_token
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'netrc'
2
4
 
3
5
  module LearnTest
@@ -16,4 +18,3 @@ module LearnTest
16
18
  end
17
19
  end
18
20
  end
19
-
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'git'
2
4
 
3
5
  module LearnTest
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
  require 'json'
3
5
 
4
6
  require_relative 'client'
7
+ require_relative 'git_wip'
5
8
 
6
9
  module LearnTest
7
10
  class Reporter
8
-
9
11
  attr_accessor :output_path, :debug
10
12
 
11
13
  def self.report(strategy, options = {})
@@ -37,21 +39,26 @@ module LearnTest
37
39
  if previous_reports.empty?
38
40
  FileUtils.rm_f(output_path)
39
41
  else
40
- File.open(output_path, "w") do |file|
42
+ File.open(output_path, 'w') do |file|
41
43
  file.write("#{JSON.dump(previous_reports)}\n")
42
44
  end
43
45
  end
44
46
  end
45
47
 
46
- def report(out: STDOUT)
48
+ def report
47
49
  results = strategy.results
48
50
  endpoint = strategy.service_endpoint
49
51
  augment_results!(results)
50
52
 
51
- unless client.post_results(endpoint, results)
53
+ if client.post_results(endpoint, results)
54
+ if !LearnTest::GitWip.run! && @debug
55
+ puts 'There was a problem connecting to Github. Not pushing current branch state.'.red
56
+ end
57
+ else
52
58
  if @debug
53
- out.puts 'There was a problem connecting to Learn. Not pushing test results.'.red
59
+ puts 'There was a problem connecting to Learn. Not pushing test results.'.red
54
60
  end
61
+
55
62
  save_failed_attempt(endpoint, results)
56
63
  end
57
64
  end
@@ -61,7 +68,7 @@ module LearnTest
61
68
  attr_reader :strategy, :client
62
69
 
63
70
  def save_failed_attempt(endpoint, results)
64
- File.open(output_path, File::RDWR|File::CREAT, 0644) do |f|
71
+ File.open(output_path, File::RDWR | File::CREAT, 0644) do |f|
65
72
  if f.flock(File::LOCK_EX)
66
73
  begin
67
74
  reports = JSON.load(f)
@@ -84,7 +91,7 @@ module LearnTest
84
91
  if File.exist?("#{FileUtils.pwd}/.learn")
85
92
  dot_learn = YAML.load(File.read("#{FileUtils.pwd}/.learn"))
86
93
 
87
- if !dot_learn['github'].nil?
94
+ unless dot_learn['github'].nil?
88
95
  results[:github] = dot_learn['github']
89
96
  end
90
97
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  module LearnTest
@@ -7,7 +9,7 @@ module LearnTest
7
9
  def initialize(repo, options = {})
8
10
  @repo = repo
9
11
  @options = options
10
- die if !strategy
12
+ die unless strategy
11
13
  end
12
14
 
13
15
  def run
@@ -32,7 +34,7 @@ module LearnTest
32
34
  end
33
35
 
34
36
  def strategy
35
- @strategy ||= strategies.map{ |s| s.new(self) }.detect(&:detect)
37
+ @strategy ||= strategies.map { |s| s.new(self) }.detect(&:detect)
36
38
  end
37
39
 
38
40
  private
@@ -50,14 +52,12 @@ module LearnTest
50
52
  def strategies
51
53
  [
52
54
  LearnTest::Strategies::CSharpNunit,
53
- LearnTest::Strategies::Jasmine,
54
- LearnTest::Strategies::GreenOnion,
55
55
  LearnTest::Strategies::Rspec,
56
56
  LearnTest::Strategies::Karma,
57
57
  LearnTest::Strategies::Protractor,
58
58
  LearnTest::Strategies::JavaJunit,
59
59
  LearnTest::Strategies::Mocha,
60
- LearnTest::Strategies::Pytest,
60
+ LearnTest::Strategies::Pytest
61
61
  ]
62
62
  end
63
63
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Strategies
3
5
  class CSharpNunit < LearnTest::Strategy
@@ -6,7 +8,7 @@ module LearnTest
6
8
  end
7
9
 
8
10
  def detect
9
- runner.files.any? {|f| f.match(/project.json/)}
11
+ runner.files.any? { |f| f.match(/project.json/) }
10
12
  end
11
13
 
12
14
  def check_dependencies
@@ -17,7 +19,7 @@ module LearnTest
17
19
  require 'crack'
18
20
  require 'json'
19
21
 
20
- system("dotnet test")
22
+ system('dotnet test')
21
23
  output
22
24
  cleanup
23
25
  end
@@ -46,7 +48,7 @@ module LearnTest
46
48
  end
47
49
 
48
50
  def cleanup
49
- FileUtils.rm("TestResult.xml") if File.exist?("TestResult.xml")
51
+ FileUtils.rm('TestResult.xml') if File.exist?('TestResult.xml')
50
52
  end
51
53
  end
52
54
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LearnTest
2
4
  module Strategies
3
5
  class JavaJunit < LearnTest::Strategy
@@ -49,9 +51,8 @@ module LearnTest
49
51
  private
50
52
 
51
53
  def clean_old_results
52
- if Dir.entries(lab_dir).any? { |f| f == 'junit' }
53
- system("rm -rf #{lab_dir}/junit")
54
- end
54
+ return unless Dir.entries(lab_dir).any? { |f| f == 'junit' }
55
+ system("rm -rf #{lab_dir}/junit")
55
56
  end
56
57
 
57
58
  def run_ant
@@ -72,7 +73,7 @@ module LearnTest
72
73
  if File.exists?(test_path)
73
74
  test_xml_files.each do |f|
74
75
  parsed = JSON.parse(Crack::XML.parse(File.read(f)).to_json)['testsuite']
75
- next if !parsed
76
+ next unless parsed
76
77
 
77
78
  if parsed['testcase']
78
79
  parsed['testcase'].each do |test_case|
@@ -97,10 +98,10 @@ module LearnTest
97
98
  results[:passing_count] = 0
98
99
  end
99
100
 
100
- if runner.keep_results?
101
- output_file = '.results.json'
102
- write_json_output(output_file: output_file)
103
- end
101
+ return unless runner.keep_results?
102
+
103
+ output_file = '.results.json'
104
+ write_json_output(output_file: output_file)
104
105
  end
105
106
 
106
107
  def write_json_output(output_file:)