learn-test 2.4.2 → 2.5.0.rc1

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: 58e4ce332d7b8943700399e57609a10345621389
4
- data.tar.gz: bec80fbc68df7b1837f6756feda1e4d7b3be49d3
3
+ metadata.gz: 2deca35ab21ca4c10c2b5a887c1f416ee152ac7a
4
+ data.tar.gz: b10ba9993ef849bbcfff49633d78de098a8f5883
5
5
  SHA512:
6
- metadata.gz: 70d69fc826bd2a592f19f7325439517e9041a056a8e8de2aa0ac42b4c5966beac724dc241d8c8eb061bcf7ca24de4cb69096de0e197fdc2a9d41baf5a99c8bdb
7
- data.tar.gz: e94d6af9645fdf97084d4f94f8c80f3ec593def9461de8e51a46ad86c1c0f31e6c91e7cb6d2db9c88ff5895ee0d9904fc19e99a068169984c3c1bb7143dac619
6
+ metadata.gz: 1b2752ed0ce36623f3546debebdca14ba91aa8b6ccfb40df648580e29f174087fe5483dd95c9344a7176cb9e0d4ee13d77d83719ddbf10fbd8d73fe637018884
7
+ data.tar.gz: bd4491c47abb520b0c8fda5ecd40de94014acc2be42034471612561898c1df9f612e5386cd87d29a7373a71dce40c61921a0d9693345b8166079f7d709cd1569
data/.gitignore CHANGED
@@ -14,3 +14,4 @@
14
14
  .ruby-version
15
15
  mkmf.log
16
16
  learn-test-*.gem
17
+ *.swp
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in learn.gemspec
4
- gemspec
4
+ gemspec
data/README.md CHANGED
@@ -22,7 +22,7 @@ And then execute:
22
22
 
23
23
  ## Usage
24
24
 
25
- From within a directory with an RSpec, Jasmine, or Python Unit Test test suite, run:
25
+ From within a directory with an RSpec, Jasmine, Karma, Mocha, or Python Unit Test test suite, run:
26
26
 
27
27
  ```
28
28
  $ learn-test
@@ -8,6 +8,10 @@ options = {}
8
8
  OptionParser.new do |opts|
9
9
  opts.banner = "Usage: learn [options]"
10
10
 
11
+ opts.on("-d", "--debug", "Output errors during results synchronization") do |d|
12
+ options[:debug] = d
13
+ end
14
+
11
15
  opts.on("-n", "--[no-]color", "Turn off color output") do |c|
12
16
  options[:color] = c
13
17
  end
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = LearnTest::VERSION
9
9
  spec.authors = ["Flatiron School"]
10
10
  spec.email = ["learn@flatironschool.com"]
11
- spec.summary = %q{Runs RSpec, Jasmine, and Python Unit Test builds and pushes JSON output to Learn.}
11
+ spec.summary = %q{Runs RSpec, Jasmine, Karma, Mocha, and Python Unit Test builds and pushes JSON output to Learn.}
12
12
  spec.homepage = "https://github.com/learn-co/learn-test"
13
13
  spec.license = "MIT"
14
14
 
@@ -20,15 +20,14 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency "bundler", "~> 1.7"
21
21
  spec.add_development_dependency "rake", "~> 10.0"
22
22
  spec.add_runtime_dependency "rspec", "~> 3.0"
23
- spec.add_runtime_dependency "netrc"
23
+ spec.add_runtime_dependency "netrc", "~> 0.11.0"
24
24
  spec.add_runtime_dependency "git", "~> 1.2"
25
25
  spec.add_runtime_dependency "oj", "~> 2.9"
26
26
  spec.add_runtime_dependency "faraday", "~> 0.9"
27
- spec.add_runtime_dependency "crack"
28
- spec.add_runtime_dependency "jasmine"
29
- spec.add_runtime_dependency "colorize"
30
- spec.add_runtime_dependency "webrick", "~> 1.3.1"
27
+ spec.add_runtime_dependency "crack", "~> 0.4.3"
28
+ spec.add_runtime_dependency "jasmine", "~> 2.6.0", '>= 2.6.0'
29
+ spec.add_runtime_dependency "colorize", "~> 0.8.1"
30
+ spec.add_runtime_dependency "webrick", "~> 1.3.1", '>= 1.3.1'
31
31
  spec.add_runtime_dependency "rainbow", "= 1.99.2"
32
- spec.add_runtime_dependency "selenium-webdriver", "~> 2.52.0"
32
+ spec.add_runtime_dependency "selenium-webdriver", "~> 2.52.0", '>= 2.52.0'
33
33
  end
34
-
@@ -1,5 +1,4 @@
1
1
  require 'fileutils'
2
- require 'faraday'
3
2
  require 'oj'
4
3
  require 'colorize'
5
4
 
@@ -14,19 +13,9 @@ require_relative 'learn_test/file_finder'
14
13
  require_relative 'learn_test/runner'
15
14
 
16
15
  require_relative 'learn_test/dependency'
17
- require_relative 'learn_test/dependencies/nodejs'
18
- require_relative 'learn_test/dependencies/phantomjs'
19
- require_relative 'learn_test/dependencies/karma'
20
- require_relative 'learn_test/dependencies/protractor'
21
- require_relative 'learn_test/dependencies/java'
22
- require_relative 'learn_test/dependencies/csharp'
23
- require_relative 'learn_test/dependencies/ant'
24
- require_relative 'learn_test/dependencies/imagemagick'
25
- require_relative 'learn_test/dependencies/selenium_server'
26
- require_relative 'learn_test/dependencies/firefox'
27
- require_relative 'learn_test/dependencies/green_onion'
28
16
 
29
17
  require_relative 'learn_test/strategy'
18
+ require_relative 'learn_test/js_strategy'
30
19
  require_relative 'learn_test/strategies/jasmine'
31
20
  require_relative 'learn_test/strategies/python_unittest'
32
21
  require_relative 'learn_test/strategies/rspec'
@@ -38,4 +27,17 @@ require_relative 'learn_test/strategies/mocha'
38
27
  require_relative 'learn_test/strategies/green_onion'
39
28
 
40
29
  module LearnTest
30
+ module Dependencies
31
+ autoload :NodeJS, 'learn_test/dependencies/nodejs'
32
+ autoload :PhantomJS, 'learn_test/dependencies/phantomjs'
33
+ autoload :Karma, 'learn_test/dependencies/karma'
34
+ autoload :Protractor, 'learn_test/dependencies/protractor'
35
+ autoload :Java, 'learn_test/dependencies/java'
36
+ autoload :CSharp, 'learn_test/dependencies/csharp'
37
+ autoload :Ant, 'learn_test/dependencies/ant'
38
+ autoload :Imagemagick, 'learn_test/dependencies/imagemagick'
39
+ autoload :SeleniumDriver, 'learn_test/dependencies/selenium_server'
40
+ autoload :Firefox, 'learn_test/dependencies/firefox'
41
+ autoload :GreenOnion, 'learn_test/dependencies/green_onion'
42
+ end
41
43
  end
@@ -0,0 +1,26 @@
1
+ require 'faraday'
2
+ require 'json'
3
+
4
+ module LearnTest
5
+ class Client
6
+ SERVICE_URL = 'http://ironbroker-v2.flatironschool.com'.freeze
7
+
8
+ def initialize(service_url = SERVICE_URL)
9
+ @conn = Faraday.new(url: service_url) do |faraday|
10
+ faraday.adapter Faraday.default_adapter
11
+ end
12
+ end
13
+
14
+ def post_results(endpoint, result)
15
+ @conn.post do |req|
16
+ req.url(endpoint)
17
+ req.headers['Content-Type'] = 'application/json'
18
+ req.body = JSON.dump(result)
19
+ end
20
+
21
+ true
22
+ rescue Faraday::Error
23
+ false
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ module LearnTest
2
+ module JsStrategy
3
+ def js_package
4
+ @js_package ||= File.exist?('package.json') ? Oj.load(File.read('package.json'), symbol_keys: true) : nil
5
+ end
6
+
7
+ def has_js_dependency?(dep)
8
+ [:dependencies, :devDependencies].any? { |key| js_package[key] && js_package[key][dep] }
9
+ end
10
+
11
+ def missing_dependencies?
12
+ return true if !File.exist?("node_modules")
13
+
14
+ [:dependencies, :devDependencies, :peerDependencies].any? do |d|
15
+ (js_package[d] || {}).any? { |p, v| !File.exist?("node_modules/#{p}") }
16
+ end
17
+ end
18
+
19
+ def npm_install
20
+ run_install('npm install', npm_install: true) if missing_dependencies?
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,97 @@
1
+ require 'fileutils'
2
+ require 'json'
3
+
4
+ require_relative 'client'
5
+
6
+ module LearnTest
7
+ class Reporter
8
+
9
+ attr_accessor :output_path, :debug
10
+
11
+ def self.report(strategy, options = {})
12
+ reporter = new(strategy, options)
13
+ reporter.report
14
+ reporter.retry_failed_reports
15
+ end
16
+
17
+ def initialize(strategy, options = {})
18
+ @strategy = strategy
19
+ @output_path = options[:output_path] || File.join(Dir.home, '.learn.debug')
20
+ @client = options[:client] || LearnTest::Client.new
21
+ @debug = options[:debug]
22
+ end
23
+
24
+ def failed_reports
25
+ return {} unless File.exists?(output_path)
26
+ JSON.load(File.read(output_path)) || {}
27
+ end
28
+
29
+ def retry_failed_reports
30
+ previous_reports = failed_reports
31
+ previous_reports.delete_if do |endpoint, results|
32
+ results.delete_if do |result|
33
+ !!client.post_results(endpoint, result)
34
+ end.empty?
35
+ end
36
+
37
+ if previous_reports.empty?
38
+ FileUtils.rm_f(output_path)
39
+ else
40
+ File.open(output_path, "w") do |file|
41
+ file.write("#{JSON.dump(previous_reports)}\n")
42
+ end
43
+ end
44
+ end
45
+
46
+ def report(out: STDOUT)
47
+ results = strategy.results
48
+ endpoint = strategy.service_endpoint
49
+ augment_results!(results)
50
+
51
+ unless client.post_results(endpoint, results)
52
+ if @debug
53
+ out.puts 'There was a problem connecting to Learn. Not pushing test results.'.red
54
+ end
55
+ save_failed_attempt(endpoint, results)
56
+ end
57
+ end
58
+
59
+ private
60
+
61
+ attr_reader :strategy, :client
62
+
63
+ def save_failed_attempt(endpoint, results)
64
+ File.open(output_path, File::RDWR|File::CREAT, 0644) do |f|
65
+ if f.flock(File::LOCK_EX)
66
+ begin
67
+ reports = JSON.load(f)
68
+ reports ||= {}
69
+ reports[endpoint] ||= []
70
+ reports[endpoint] << results
71
+
72
+ f.rewind
73
+ f.write("#{JSON.dump(reports)}\n")
74
+ f.flush
75
+ f.truncate(f.pos)
76
+ ensure
77
+ f.flock(File::LOCK_UN)
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ def augment_results!(results)
84
+ if File.exist?("#{FileUtils.pwd}/.learn")
85
+ dot_learn = YAML.load(File.read("#{FileUtils.pwd}/.learn"))
86
+
87
+ if !dot_learn['github'].nil?
88
+ results[:github] = dot_learn['github']
89
+ end
90
+ end
91
+
92
+ results[:created_at] = Time.now
93
+ results[:ruby_platform] = RUBY_PLATFORM
94
+ results[:ide_container] = (ENV['IDE_CONTAINER'] == 'true')
95
+ end
96
+ end
97
+ end
@@ -3,7 +3,6 @@ require 'yaml'
3
3
  module LearnTest
4
4
  class Runner
5
5
  attr_reader :repo, :options
6
- SERVICE_URL = 'http://ironbroker-v2.flatironschool.com'
7
6
 
8
7
  def initialize(repo, options = {})
9
8
  @repo = repo
@@ -15,10 +14,13 @@ module LearnTest
15
14
  strategy.check_dependencies
16
15
  strategy.configure
17
16
  strategy.run
18
- if !help_option_present? && strategy.push_results? && !local_test_run?
19
- push_results(strategy)
17
+ if options[:debug]
18
+ report_and_clean
19
+ else
20
+ Process.detach(Process.fork do
21
+ report_and_clean
22
+ end)
20
23
  end
21
- strategy.cleanup unless keep_results?
22
24
  end
23
25
 
24
26
  def files
@@ -35,23 +37,14 @@ module LearnTest
35
37
 
36
38
  private
37
39
 
38
- def augment_results!(results)
39
- if File.exist?("#{FileUtils.pwd}/.learn")
40
- dot_learn = YAML.load(File.read("#{FileUtils.pwd}/.learn"))
40
+ def report_and_clean
41
+ require_relative 'reporter'
41
42
 
42
- if !dot_learn['github'].nil?
43
- results[:github] = dot_learn['github']
44
- end
43
+ if !help_option_present? && strategy.push_results? && !local_test_run?
44
+ LearnTest::Reporter.report(strategy, options)
45
45
  end
46
46
 
47
- results[:ruby_platform] = RUBY_PLATFORM
48
- results[:ide_container] = (ENV['IDE_CONTAINER'] == 'true')
49
- end
50
-
51
- def connection
52
- @connection ||= Faraday.new(url: SERVICE_URL) do |faraday|
53
- faraday.adapter Faraday.default_adapter
54
- end
47
+ strategy.cleanup unless keep_results?
55
48
  end
56
49
 
57
50
  def strategies
@@ -64,25 +57,10 @@ module LearnTest
64
57
  LearnTest::Strategies::Protractor,
65
58
  LearnTest::Strategies::JavaJunit,
66
59
  LearnTest::Strategies::Mocha,
67
- LearnTest::Strategies::PythonUnittest
60
+ LearnTest::Strategies::PythonUnittest,
68
61
  ]
69
62
  end
70
63
 
71
- def push_results(strategy)
72
- results = strategy.results
73
- augment_results!(results)
74
-
75
- begin
76
- connection.post do |req|
77
- req.url(strategy.service_endpoint)
78
- req.headers['Content-Type'] = 'application/json'
79
- req.body = Oj.dump(results, mode: :compat)
80
- end
81
- rescue Faraday::ConnectionFailed
82
- puts 'There was a problem connecting to Learn. Not pushing test results.'.red
83
- end
84
- end
85
-
86
64
  def help_option_present?
87
65
  options.include?('-h') || options.include?('--help')
88
66
  end
@@ -1,6 +1,3 @@
1
- require 'crack'
2
- require 'json'
3
-
4
1
  module LearnTest
5
2
  module Strategies
6
3
  class CSharpNunit < LearnTest::Strategy
@@ -17,6 +14,9 @@ module LearnTest
17
14
  end
18
15
 
19
16
  def run
17
+ require 'crack'
18
+ require 'json'
19
+
20
20
  system("dotnet test")
21
21
  output
22
22
  cleanup
@@ -44,7 +44,7 @@ module LearnTest
44
44
  failure_count: output['test_run']['failed'],
45
45
  }
46
46
  end
47
-
47
+
48
48
  def cleanup
49
49
  FileUtils.rm("TestResult.xml") if File.exist?("TestResult.xml")
50
50
  end
@@ -1,8 +1,3 @@
1
- require 'crack'
2
- require 'erb'
3
- require 'yaml'
4
- require 'json'
5
-
6
1
  require_relative 'jasmine/initializer'
7
2
 
8
3
  module LearnTest
@@ -21,6 +16,11 @@ module LearnTest
21
16
  end
22
17
 
23
18
  def run
19
+ require 'crack'
20
+ require 'erb'
21
+ require 'yaml'
22
+ require 'json'
23
+
24
24
  if options[:init]
25
25
  LearnTest::Jasmine::Initializer.run
26
26
  else
@@ -1,6 +1,3 @@
1
- require 'crack'
2
- require 'json'
3
-
4
1
  module LearnTest
5
2
  module Strategies
6
3
  class JavaJunit < LearnTest::Strategy
@@ -18,6 +15,9 @@ module LearnTest
18
15
  end
19
16
 
20
17
  def run
18
+ require 'crack'
19
+ require 'json'
20
+
21
21
  clean_old_results
22
22
  run_ant
23
23
  make_json
@@ -1,27 +1,16 @@
1
1
  module LearnTest
2
2
  module Strategies
3
3
  class Mocha < LearnTest::Strategy
4
+ include LearnTest::JsStrategy
5
+
4
6
  def service_endpoint
5
7
  '/e/flatiron_mocha'
6
8
  end
7
9
 
8
10
  def detect
9
- package = File.exists?('package.json') ? Oj.load(File.read('package.json'), symbol_keys: true) : nil
10
- return false if !package
11
-
12
- if package[:scripts] && package[:scripts][:test]
13
- return true if package[:scripts][:test].include?('mocha')
14
- end
15
-
16
- if package[:devDependencies] && package[:devDependencies][:mocha]
17
- return true if (package[:devDependencies][:mocha].length > 0)
18
- end
19
-
20
- if package[:dependencies] && package[:dependencies][:mocha]
21
- return true if (package[:dependencies][:mocha].length > 0)
22
- end
11
+ return false if !js_package
23
12
 
24
- return false
13
+ (has_js_dependency?(:mocha) || in_browser?) ? true : false
25
14
  end
26
15
 
27
16
  def check_dependencies
@@ -32,8 +21,12 @@ module LearnTest
32
21
  run_mocha
33
22
  end
34
23
 
35
- def output
36
- @output ||= File.exists?('.results.json') ? Oj.load(File.read('.results.json'), symbol_keys: true) : nil
24
+ def cleanup
25
+ FileUtils.rm('.results.json') if File.exist?('.results.json')
26
+ end
27
+
28
+ def push_results?
29
+ !in_browser?
37
30
  end
38
31
 
39
32
  def results
@@ -55,26 +48,24 @@ module LearnTest
55
48
  }
56
49
  end
57
50
 
58
- def cleanup
59
- FileUtils.rm('.results.json') if File.exist?('.results.json')
60
- end
61
-
62
- def missing_dependencies?(package)
63
- return true if !File.exists?("node_modules")
64
-
65
- [:dependencies, :devDependencies, :peerDependencies].any? do |d|
66
- (package[d] || {}).any? { |p, v| !File.exists?("node_modules/#{p}") }
67
- end
51
+ def output
52
+ @output ||= File.exist?('.results.json') ? Oj.load(File.read('.results.json'), symbol_keys: true) : nil
68
53
  end
69
54
 
70
55
  private
71
56
 
72
57
  def run_mocha
73
- package = Oj.load(File.read('package.json'), symbol_keys: true)
58
+ npm_install
74
59
 
75
- npm_install(package)
60
+ if in_browser?
61
+ exec("npm test")
62
+ else
63
+ run_node_based_mocha
64
+ end
65
+ end
76
66
 
77
- command = if (package[:scripts] && package[:scripts][:test] || "").include?(".results.json")
67
+ def run_node_based_mocha
68
+ command = if (js_package[:scripts] && js_package[:scripts][:test] || "").include?(".results.json")
78
69
  "npm test"
79
70
  else
80
71
  install_mocha_multi
@@ -84,15 +75,19 @@ module LearnTest
84
75
  system(command)
85
76
  end
86
77
 
78
+ def in_IDE?
79
+ ENV['IDE_CONTAINER'] == 'true'
80
+ end
81
+
82
+ def in_browser?
83
+ @in_browser ||= has_js_dependency?(:'learn-browser')
84
+ end
85
+
87
86
  def install_mocha_multi
88
- if !File.exists?('node_modules/mocha-multi')
87
+ if !File.exist?('node_modules/mocha-multi')
89
88
  run_install('npm install mocha-multi', npm_install: true)
90
89
  end
91
90
  end
92
-
93
- def npm_install(package)
94
- run_install('npm install', npm_install: true) if missing_dependencies?(package)
95
- end
96
91
  end
97
92
  end
98
93
  end
@@ -1,3 +1,3 @@
1
1
  module LearnTest
2
- VERSION = '2.4.2'
2
+ VERSION = '2.5.0.rc1'
3
3
  end
@@ -0,0 +1,147 @@
1
+ require 'spec_helper'
2
+
3
+ require_relative '../../lib/learn_test/reporter'
4
+
5
+ require 'tempfile'
6
+ require 'json'
7
+
8
+ describe LearnTest::Reporter do
9
+ let(:strategy) {
10
+ instance_spy(
11
+ LearnTest::Strategy,
12
+ service_endpoint: "test_endpoint",
13
+ results: { test: 'result' }
14
+ )
15
+ }
16
+ let(:client) { instance_spy(LearnTest::Client) }
17
+
18
+ def with_file(name, content = nil, &block)
19
+ file = Tempfile.new(name)
20
+ if content
21
+ file.write("#{JSON.dump(content)}\n")
22
+ file.flush
23
+ end
24
+
25
+ block.call(file)
26
+ ensure
27
+ file.close!
28
+ end
29
+
30
+ describe '#report' do
31
+ let(:reporter) { described_class.new(strategy, client: client) }
32
+
33
+ context "with debug flag and failed attempt posting results" do
34
+ it "outputs an error message" do
35
+ allow(client).to receive(:post_results).and_return(false)
36
+ reporter.debug = true
37
+ io = StringIO.new
38
+
39
+ reporter.report(out: io)
40
+
41
+ expect(io.string).to_not be_empty
42
+ end
43
+ end
44
+
45
+ it 'posts results to the service endpoint' do
46
+ reporter.report
47
+
48
+ expect(client).to have_received(:post_results)
49
+ .with(strategy.service_endpoint, strategy.results)
50
+ end
51
+
52
+ it 'does not output an error message without debug' do
53
+ allow(client).to receive(:post_results).and_return(false)
54
+ io = StringIO.new
55
+
56
+ with_file('test_debug') do |tmp_file|
57
+ reporter.output_path = tmp_file.path
58
+
59
+ reporter.report(out: io)
60
+
61
+ expect(io.string).to be_empty
62
+ end
63
+ end
64
+
65
+ it 'saves the failed attempt when the post results call fails' do
66
+ allow(client).to receive(:post_results).and_return(false)
67
+
68
+ with_file('test') do |tmp_file|
69
+ reporter.output_path = tmp_file.path
70
+ reporter.report
71
+
72
+ report = JSON.dump(strategy.results)
73
+ expect(File.exists?(tmp_file.path)).to be(true)
74
+ expect(reporter.failed_reports).to eq({
75
+ strategy.service_endpoint => [JSON.load(report)]
76
+ })
77
+ end
78
+ end
79
+
80
+ it 'appends multiple failed attempts' do
81
+ allow(client).to receive(:post_results).and_return(false)
82
+
83
+ with_file('test') do |tmp_file|
84
+ reporter.output_path = tmp_file.path
85
+
86
+ reporter.report
87
+ reporter.report
88
+
89
+ report = JSON.dump(strategy.results)
90
+ json_report = JSON.load(report)
91
+ expect(File.exists?(tmp_file.path)).to be(true)
92
+ expect(reporter.failed_reports).to eq({
93
+ strategy.service_endpoint => [json_report, json_report]
94
+ })
95
+ end
96
+ end
97
+ end
98
+
99
+ describe '#retry_failed_reports' do
100
+ let(:reporter) { described_class.new(strategy, client: client) }
101
+
102
+ it 'deletes the output file when all reports are sent successfully' do
103
+ allow(client).to receive(:post_results).and_return(true)
104
+ reports = {hello: ["world"]}
105
+ with_file('retry_failed_reports', reports) do |file|
106
+ reporter.output_path = file.path
107
+ reporter.retry_failed_reports
108
+
109
+ expect(File.exists?(file.path)).to be(false)
110
+ end
111
+ end
112
+
113
+ it 'writes the remaining reports from the output file' do
114
+ allow(client).to receive(:post_results).and_return(true, false)
115
+ reports = {success: ["world"], failure: ["hello"]}
116
+ with_file('retry_failed_reports', reports) do |file|
117
+ reporter.output_path = file.path
118
+ reporter.retry_failed_reports
119
+ expect(File.exists?(file.path)).to be(true)
120
+ expect(reporter.failed_reports).to eq({"failure" => ["hello"]})
121
+ end
122
+ end
123
+ end
124
+
125
+ describe '#failed_reports' do
126
+ let(:path) { 'failed_reports' }
127
+ let(:reporter) { described_class.new(strategy, output_path: path) }
128
+ subject { reporter.failed_reports }
129
+
130
+ context 'with no file at location' do
131
+ it { is_expected.to eq({}) }
132
+ end
133
+
134
+ context 'with no content in the file' do
135
+ it { with_file(path) { is_expected.to eq({}) } }
136
+ end
137
+
138
+ context 'with returns the JSON contents of the file' do
139
+ it {
140
+ with_file(path, {hello: "world"}) do |file|
141
+ reporter.output_path = file.path
142
+ is_expected.to eq({"hello" => "world"})
143
+ end
144
+ }
145
+ end
146
+ end
147
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: learn-test
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.2
4
+ version: 2.5.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Flatiron School
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-07 00:00:00.000000000 Z
11
+ date: 2017-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: netrc
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.11.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 0.11.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: git
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -112,44 +112,50 @@ dependencies:
112
112
  name: crack
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: 0.4.3
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: 0.4.3
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: jasmine
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 2.6.0
129
132
  - - ">="
130
133
  - !ruby/object:Gem::Version
131
- version: '0'
134
+ version: 2.6.0
132
135
  type: :runtime
133
136
  prerelease: false
134
137
  version_requirements: !ruby/object:Gem::Requirement
135
138
  requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: 2.6.0
136
142
  - - ">="
137
143
  - !ruby/object:Gem::Version
138
- version: '0'
144
+ version: 2.6.0
139
145
  - !ruby/object:Gem::Dependency
140
146
  name: colorize
141
147
  requirement: !ruby/object:Gem::Requirement
142
148
  requirements:
143
- - - ">="
149
+ - - "~>"
144
150
  - !ruby/object:Gem::Version
145
- version: '0'
151
+ version: 0.8.1
146
152
  type: :runtime
147
153
  prerelease: false
148
154
  version_requirements: !ruby/object:Gem::Requirement
149
155
  requirements:
150
- - - ">="
156
+ - - "~>"
151
157
  - !ruby/object:Gem::Version
152
- version: '0'
158
+ version: 0.8.1
153
159
  - !ruby/object:Gem::Dependency
154
160
  name: webrick
155
161
  requirement: !ruby/object:Gem::Requirement
@@ -157,6 +163,9 @@ dependencies:
157
163
  - - "~>"
158
164
  - !ruby/object:Gem::Version
159
165
  version: 1.3.1
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: 1.3.1
160
169
  type: :runtime
161
170
  prerelease: false
162
171
  version_requirements: !ruby/object:Gem::Requirement
@@ -164,6 +173,9 @@ dependencies:
164
173
  - - "~>"
165
174
  - !ruby/object:Gem::Version
166
175
  version: 1.3.1
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: 1.3.1
167
179
  - !ruby/object:Gem::Dependency
168
180
  name: rainbow
169
181
  requirement: !ruby/object:Gem::Requirement
@@ -185,6 +197,9 @@ dependencies:
185
197
  - - "~>"
186
198
  - !ruby/object:Gem::Version
187
199
  version: 2.52.0
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: 2.52.0
188
203
  type: :runtime
189
204
  prerelease: false
190
205
  version_requirements: !ruby/object:Gem::Requirement
@@ -192,6 +207,9 @@ dependencies:
192
207
  - - "~>"
193
208
  - !ruby/object:Gem::Version
194
209
  version: 2.52.0
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: 2.52.0
195
213
  description:
196
214
  email:
197
215
  - learn@flatironschool.com
@@ -209,6 +227,7 @@ files:
209
227
  - bin/learn-test
210
228
  - learn-test.gemspec
211
229
  - lib/learn_test.rb
230
+ - lib/learn_test/client.rb
212
231
  - lib/learn_test/dependencies/ant.rb
213
232
  - lib/learn_test/dependencies/csharp.rb
214
233
  - lib/learn_test/dependencies/firefox.rb
@@ -223,9 +242,11 @@ files:
223
242
  - lib/learn_test/dependency.rb
224
243
  - lib/learn_test/file_finder.rb
225
244
  - lib/learn_test/github_interactor.rb
245
+ - lib/learn_test/js_strategy.rb
226
246
  - lib/learn_test/learn_oauth_token_parser.rb
227
247
  - lib/learn_test/netrc_interactor.rb
228
248
  - lib/learn_test/repo_parser.rb
249
+ - lib/learn_test/reporter.rb
229
250
  - lib/learn_test/runner.rb
230
251
  - lib/learn_test/strategies/csharp_nunit.rb
231
252
  - lib/learn_test/strategies/green_onion.rb
@@ -276,6 +297,7 @@ files:
276
297
  - spec/fixtures/rspec-unit-spec/lib/dog.rb
277
298
  - spec/fixtures/rspec-unit-spec/spec/dog_spec.rb
278
299
  - spec/fixtures/rspec-unit-spec/spec/spec_helper.rb
300
+ - spec/learn_test/reporter_spec.rb
279
301
  - spec/lib/learn_test/strategies/mocha_spec.rb
280
302
  - spec/repo_parser_spec.rb
281
303
  - spec/spec_helper.rb
@@ -295,16 +317,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
295
317
  version: '0'
296
318
  required_rubygems_version: !ruby/object:Gem::Requirement
297
319
  requirements:
298
- - - ">="
320
+ - - ">"
299
321
  - !ruby/object:Gem::Version
300
- version: '0'
322
+ version: 1.3.1
301
323
  requirements: []
302
324
  rubyforge_project:
303
- rubygems_version: 2.6.8
325
+ rubygems_version: 2.6.11
304
326
  signing_key:
305
327
  specification_version: 4
306
- summary: Runs RSpec, Jasmine, and Python Unit Test builds and pushes JSON output to
307
- Learn.
328
+ summary: Runs RSpec, Jasmine, Karma, Mocha, and Python Unit Test builds and pushes
329
+ JSON output to Learn.
308
330
  test_files:
309
331
  - spec/features/jasmine_jquery_fixtures_spec.rb
310
332
  - spec/features/rspec_unit_spec.rb
@@ -315,6 +337,7 @@ test_files:
315
337
  - spec/fixtures/rspec-unit-spec/lib/dog.rb
316
338
  - spec/fixtures/rspec-unit-spec/spec/dog_spec.rb
317
339
  - spec/fixtures/rspec-unit-spec/spec/spec_helper.rb
340
+ - spec/learn_test/reporter_spec.rb
318
341
  - spec/lib/learn_test/strategies/mocha_spec.rb
319
342
  - spec/repo_parser_spec.rb
320
343
  - spec/spec_helper.rb