learn-test 2.5.6 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +59 -0
  3. data/.gitignore +0 -1
  4. data/Gemfile +4 -1
  5. data/Gemfile.lock +57 -0
  6. data/LICENSE.txt +1 -1
  7. data/README.md +2 -3
  8. data/bin/learn-test +4 -0
  9. data/learn-test.gemspec +9 -12
  10. data/lib/learn_test.rb +2 -5
  11. data/lib/learn_test/js_strategy.rb +7 -3
  12. data/lib/learn_test/repo_parser.rb +2 -3
  13. data/lib/learn_test/runner.rb +1 -3
  14. data/lib/learn_test/strategies/pytest.rb +85 -0
  15. data/lib/learn_test/strategies/{python_unittest → pytest}/requirements_checker.rb +21 -19
  16. data/lib/learn_test/strategies/rspec.rb +8 -0
  17. data/lib/learn_test/username_parser.rb +1 -1
  18. data/lib/learn_test/version.rb +1 -1
  19. data/spec/features/rspec_unit_spec.rb +26 -1
  20. data/spec/fixtures/.netrc +3 -0
  21. data/spec/fixtures/rspec-unit-spec/spec/dog_spec.rb +8 -0
  22. data/spec/learn_test/username_parser_spec.rb +61 -0
  23. data/spec/lib/learn_test/strategies/mocha_spec.rb +20 -17
  24. metadata +38 -139
  25. data/lib/learn_test/dependencies/firefox.rb +0 -26
  26. data/lib/learn_test/dependencies/green_onion.rb +0 -14
  27. data/lib/learn_test/strategies/green_onion.rb +0 -57
  28. data/lib/learn_test/strategies/jasmine.rb +0 -181
  29. data/lib/learn_test/strategies/jasmine/boot.js +0 -184
  30. data/lib/learn_test/strategies/jasmine/console.js +0 -161
  31. data/lib/learn_test/strategies/jasmine/formatters/jasmine2-junit.js +0 -199
  32. data/lib/learn_test/strategies/jasmine/helpers/ConsoleHelper.js +0 -12
  33. data/lib/learn_test/strategies/jasmine/helpers/ConsoleHelperNoColor.js +0 -12
  34. data/lib/learn_test/strategies/jasmine/initializer.rb +0 -27
  35. data/lib/learn_test/strategies/jasmine/jasmine-html.js +0 -360
  36. data/lib/learn_test/strategies/jasmine/jasmine-jquery.js +0 -813
  37. data/lib/learn_test/strategies/jasmine/jasmine.css +0 -56
  38. data/lib/learn_test/strategies/jasmine/jasmine.js +0 -2403
  39. data/lib/learn_test/strategies/jasmine/jasmine_favicon.png +0 -0
  40. data/lib/learn_test/strategies/jasmine/jquery-1.8.0.min.js +0 -2
  41. data/lib/learn_test/strategies/jasmine/jquery-ui-1.8.23.custom.min.js +0 -125
  42. data/lib/learn_test/strategies/jasmine/runners/SpecRunner.html +0 -35
  43. data/lib/learn_test/strategies/jasmine/runners/run-jasmine.js +0 -229
  44. data/lib/learn_test/strategies/jasmine/templates/SpecRunnerTemplate.html.erb +0 -35
  45. data/lib/learn_test/strategies/jasmine/templates/SpecRunnerTemplateNoColor.html.erb +0 -35
  46. data/lib/learn_test/strategies/jasmine/templates/requires.yml.example +0 -7
  47. data/lib/learn_test/strategies/jasmine/vendor/require.js +0 -2077
  48. data/lib/learn_test/strategies/python_unittest.rb +0 -72
  49. data/lib/learn_test/strategies/python_unittest/nose_installer.rb +0 -35
  50. data/spec/features/jasmine_jquery_fixtures_spec.rb +0 -10
  51. data/spec/fixtures/jasmine-jquery-fixtures/index.html +0 -10
  52. data/spec/fixtures/jasmine-jquery-fixtures/requires.yml +0 -4
  53. data/spec/fixtures/jasmine-jquery-fixtures/spec/jasmine-jquery-fixtures-spec.js +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 53ebce05a6ed7c4c7cb3e41c7b613450854be494
4
- data.tar.gz: c6f35a2b5ffd314d8e3b5815c349fe384518a403
2
+ SHA256:
3
+ metadata.gz: 149b042a01fdbed0de7a09185b1213a849d5da475facf62626d53ae1a06fdfc2
4
+ data.tar.gz: 1c11380986cf728ad16c13797e8474a7ecba61b7ff46158476b4abd25e07ee22
5
5
  SHA512:
6
- metadata.gz: 7fa014a21fcc8f4acc418eae9612014a1266250c796e54076f5e971da98859f782cdde4009e365648b76a941e03f2f8c8e2e3bacbd19ef8d49c98d9f449d4c50
7
- data.tar.gz: eaf80dd6b238fa32525d413070907b5bf35b9c3b17013f18b596bf7cfa22a3f52115c7b0436ed2aaedc1751341800c2fabafd70553e00e8f4229c953ce7225bd
6
+ metadata.gz: e428a2dda9b27abfd7dd1ba9b1013d16fdf2e6fdeff1e042cfa0297f8c52092b52113ae033c809c04ef3120e9117b645bcec7029e4a265f8ba3997a8b1d1a4e1
7
+ data.tar.gz: fb2f086ea961c5da13cc6eb4709adec06d4ba6cd9da02fce7065707e6ccde2f1953220c724c8a9fda085a58681f8ff33c2313b5ccf40a9c90c80d8936d70315a
@@ -0,0 +1,59 @@
1
+ version: 2.1
2
+
3
+ jobs:
4
+ build:
5
+ docker:
6
+ - image: circleci/ruby:2.5.8
7
+
8
+ working_directory: ~/repo
9
+
10
+ steps:
11
+ - checkout
12
+
13
+ - restore_cache:
14
+ keys:
15
+ - gems-v3-{{ checksum "Gemfile.lock" }}
16
+ - gems-v3-
17
+
18
+ - run:
19
+ name: Force Bundler Version
20
+ command: |
21
+ sudo gem update --system
22
+ echo 'export BUNDLER_VERSION=$(cat Gemfile.lock | tail -1 | tr -d " ")' >> $BASH_ENV
23
+ source $BASH_ENV
24
+
25
+ - run:
26
+ name: Install Dependencies
27
+ command: |
28
+ bundle config --local set vendor/bundle
29
+ bundle install
30
+
31
+ - save_cache:
32
+ key: gems-v3-{{ checksum "Gemfile.lock" }}
33
+ paths:
34
+ - vendor/bundle
35
+
36
+ - run:
37
+ name: Create ~/.netrc
38
+ command: |
39
+ cp spec/fixtures/.netrc ~/
40
+ chmod 0600 ~/.netrc
41
+
42
+ - run:
43
+ name: Run tests
44
+ command: |
45
+ mkdir /tmp/test-results
46
+ TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
47
+
48
+ bundle exec rspec --format progress \
49
+ --format RspecJunitFormatter \
50
+ --out /tmp/test-results/rspec.xml \
51
+ --format progress \
52
+ $TEST_FILES
53
+
54
+ - store_test_results:
55
+ path: /tmp/test-results
56
+
57
+ - store_artifacts:
58
+ path: /tmp/test-results
59
+ destination: test-results
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
4
3
  /_yardoc/
5
4
  /coverage/
6
5
  /doc/
data/Gemfile CHANGED
@@ -1,4 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in learn.gemspec
4
3
  gemspec
4
+
5
+ group :test do
6
+ gem 'rspec_junit_formatter', '~> 0.4.1'
7
+ end
@@ -0,0 +1,57 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ learn-test (3.0.0)
5
+ colorize (~> 0.8.1)
6
+ crack (~> 0.4.3)
7
+ faraday (~> 1.0)
8
+ git (~> 1.7)
9
+ netrc (~> 0.11.0)
10
+ oj (~> 3.10)
11
+ rspec (~> 3.0)
12
+
13
+ GEM
14
+ remote: https://rubygems.org/
15
+ specs:
16
+ colorize (0.8.1)
17
+ crack (0.4.3)
18
+ safe_yaml (~> 1.0.0)
19
+ diff-lcs (1.4.4)
20
+ faraday (1.0.1)
21
+ multipart-post (>= 1.2, < 3)
22
+ git (1.7.0)
23
+ rchardet (~> 1.8)
24
+ multipart-post (2.1.1)
25
+ netrc (0.11.0)
26
+ oj (3.10.8)
27
+ rake (13.0.1)
28
+ rchardet (1.8.0)
29
+ rspec (3.9.0)
30
+ rspec-core (~> 3.9.0)
31
+ rspec-expectations (~> 3.9.0)
32
+ rspec-mocks (~> 3.9.0)
33
+ rspec-core (3.9.2)
34
+ rspec-support (~> 3.9.3)
35
+ rspec-expectations (3.9.2)
36
+ diff-lcs (>= 1.2.0, < 2.0)
37
+ rspec-support (~> 3.9.0)
38
+ rspec-mocks (3.9.1)
39
+ diff-lcs (>= 1.2.0, < 2.0)
40
+ rspec-support (~> 3.9.0)
41
+ rspec-support (3.9.3)
42
+ rspec_junit_formatter (0.4.1)
43
+ rspec-core (>= 2, < 4, != 2.12.0)
44
+ safe_yaml (1.0.5)
45
+
46
+ PLATFORMS
47
+ ruby
48
+
49
+ DEPENDENCIES
50
+ bundler (~> 2.1.4)
51
+ learn-test!
52
+ rake (~> 13.0.1)
53
+ rspec (~> 3.8)
54
+ rspec_junit_formatter (~> 0.4.1)
55
+
56
+ BUNDLED WITH
57
+ 2.1.4
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014-2015 Flatiron School
1
+ Copyright (c) 2014-2018 Flatiron School
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # learn-test
2
2
 
3
- Runs RSpec, Jasmine, and Python Unit Test test suites and uploads the results to Learn.
3
+ Runs RSpec, Mocha, and Python Pytest test suites and uploads the results to Learn.
4
4
 
5
5
  ## Installation
6
6
 
@@ -22,7 +22,7 @@ And then execute:
22
22
 
23
23
  ## Usage
24
24
 
25
- From within a directory with an RSpec, Jasmine, Karma, Mocha, or Python Unit Test test suite, run:
25
+ From within a directory with an RSpec, Karma, Mocha, or Python Pytest test suite, run:
26
26
 
27
27
  ```
28
28
  $ learn-test
@@ -35,4 +35,3 @@ $ learn-test
35
35
  3. Commit your changes (`git commit -am 'Add some feature'`)
36
36
  4. Push to the branch (`git push origin my-new-feature`)
37
37
  5. Create a new Pull Request
38
-
@@ -57,6 +57,10 @@ OptionParser.new do |opts|
57
57
  options[:fail_fast] = f
58
58
  end
59
59
 
60
+ opts.on("-e", "--example STRING", "Run examples whose full nested names include STRING (may be used more than once)") do |s|
61
+ (options[:example] ||= []) << s
62
+ end
63
+
60
64
  if ARGV.any? { |arg| arg == "init" }
61
65
  options[:init] = true
62
66
  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, Karma, Mocha, and Python Unit Test builds and pushes JSON output to Learn.}
11
+ spec.summary = %q{Runs RSpec, Karma, Mocha, and Python Pytest 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
 
@@ -16,20 +16,17 @@ Gem::Specification.new do |spec|
16
16
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ["lib", "bin"]
19
- spec.required_ruby_version = '>= 2.3.0'
19
+ spec.required_ruby_version = '>= 2.5.0'
20
+
21
+ spec.add_development_dependency "bundler", "~> 2.1.4"
22
+ spec.add_development_dependency "rake", "~> 13.0.1"
23
+ spec.add_development_dependency "rspec", "~> 3.8"
20
24
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
22
- spec.add_development_dependency "rake", "~> 10.0"
23
25
  spec.add_runtime_dependency "rspec", "~> 3.0"
24
26
  spec.add_runtime_dependency "netrc", "~> 0.11.0"
25
- spec.add_runtime_dependency "git", "~> 1.2"
26
- spec.add_runtime_dependency "oj", "~> 2.9"
27
- 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"
28
30
  spec.add_runtime_dependency "crack", "~> 0.4.3"
29
- spec.add_runtime_dependency "jasmine", "~> 2.6.0", ">= 2.6.0"
30
- spec.add_runtime_dependency "jasmine-core", "< 2.99.1"
31
31
  spec.add_runtime_dependency "colorize", "~> 0.8.1"
32
- spec.add_runtime_dependency "webrick", "~> 1.3.1", ">= 1.3.1"
33
- spec.add_runtime_dependency "rainbow", "= 1.99.2"
34
- spec.add_runtime_dependency "selenium-webdriver", "~> 2.52.0", '>= 2.52.0'
35
32
  end
@@ -16,15 +16,13 @@ require_relative 'learn_test/dependency'
16
16
 
17
17
  require_relative 'learn_test/strategy'
18
18
  require_relative 'learn_test/js_strategy'
19
- require_relative 'learn_test/strategies/jasmine'
20
- require_relative 'learn_test/strategies/python_unittest'
21
19
  require_relative 'learn_test/strategies/rspec'
22
20
  require_relative 'learn_test/strategies/karma'
23
21
  require_relative 'learn_test/strategies/protractor'
24
22
  require_relative 'learn_test/strategies/java_junit'
25
23
  require_relative 'learn_test/strategies/csharp_nunit'
26
24
  require_relative 'learn_test/strategies/mocha'
27
- require_relative 'learn_test/strategies/green_onion'
25
+ require_relative 'learn_test/strategies/pytest'
28
26
 
29
27
  module LearnTest
30
28
  module Dependencies
@@ -37,7 +35,6 @@ module LearnTest
37
35
  autoload :Ant, 'learn_test/dependencies/ant'
38
36
  autoload :Imagemagick, 'learn_test/dependencies/imagemagick'
39
37
  autoload :SeleniumServer, 'learn_test/dependencies/selenium_server'
40
- autoload :Firefox, 'learn_test/dependencies/firefox'
41
- autoload :GreenOnion, 'learn_test/dependencies/green_onion'
38
+ autoload :Pytest, 'learn_test/dependencies/pytest'
42
39
  end
43
40
  end
@@ -8,11 +8,15 @@ module LearnTest
8
8
  [:dependencies, :devDependencies].any? { |key| js_package[key] && js_package[key][dep] }
9
9
  end
10
10
 
11
+ def modules_missing?(module_names)
12
+ module_names.any? { |name| !File.exist?("node_modules/#{name}") }
13
+ end
14
+
11
15
  def missing_dependencies?
12
16
  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}") }
17
+ [:dependencies, :devDependencies, :peerDependencies].any? do |dep_group|
18
+ modules = js_package[dep_group] || {}
19
+ modules_missing?(modules.keys)
16
20
  end
17
21
  end
18
22
 
@@ -6,14 +6,14 @@ module LearnTest
6
6
  begin
7
7
  repo = Git.open(FileUtils.pwd)
8
8
  rescue
9
- puts "You don't appear to be in a Learn lesson's directory. Please cd to an appropriate directory and try again."
9
+ puts "You don't appear to be in a Learn lesson's directory. Please enter 'learn open' or cd to an appropriate directory and try again."
10
10
  die
11
11
  end
12
12
 
13
13
  if url = repo.remote.url
14
14
  url.match(/(?:https?:\/\/|git@).*\/(.+?)(?:\.git)?$/)[1]
15
15
  else
16
- puts "You don't appear to be in a Learn lesson's directory. Please cd to an appropriate directory and try again."
16
+ puts "You don't appear to be in a Learn lesson's directory. Please enter 'learn open' or cd to an appropriate directory and try again."
17
17
  die
18
18
  end
19
19
  end
@@ -23,4 +23,3 @@ module LearnTest
23
23
  end
24
24
  end
25
25
  end
26
-
@@ -50,14 +50,12 @@ module LearnTest
50
50
  def strategies
51
51
  [
52
52
  LearnTest::Strategies::CSharpNunit,
53
- LearnTest::Strategies::Jasmine,
54
- LearnTest::Strategies::GreenOnion,
55
53
  LearnTest::Strategies::Rspec,
56
54
  LearnTest::Strategies::Karma,
57
55
  LearnTest::Strategies::Protractor,
58
56
  LearnTest::Strategies::JavaJunit,
59
57
  LearnTest::Strategies::Mocha,
60
- LearnTest::Strategies::PythonUnittest,
58
+ LearnTest::Strategies::Pytest,
61
59
  ]
62
60
  end
63
61
 
@@ -0,0 +1,85 @@
1
+ require 'crack'
2
+ require_relative 'pytest/requirements_checker'
3
+
4
+ module LearnTest
5
+ module Strategies
6
+ class Pytest < LearnTest::Strategy
7
+
8
+ def service_endpoint
9
+ '/e/flatiron_pytest'
10
+ end
11
+
12
+ def detect
13
+ test_files.count > 0
14
+ end
15
+
16
+ def check_dependencies
17
+ LearnTest::Pytest::RequirementsChecker.check_installation
18
+ end
19
+
20
+ def run
21
+ system("python -m pytest #{options[:argv].join(' ')} --junitxml='./.results.xml'")
22
+ end
23
+
24
+ def output
25
+ @output ||= Crack::XML.parse(File.read('.results.xml'))["testsuite"]
26
+ end
27
+
28
+ def test_files
29
+ # pytest will run all files of the form test_*.py or *_test.py
30
+ @test_files ||= Dir.glob("**/test_*.py") + Dir.glob("**/*_test.py")
31
+ end
32
+
33
+ def results
34
+ failed_count = output["failures"].to_i + output["errors"].to_i
35
+ skipped_count = output["skips"].to_i
36
+ passed_count = output["tests"].to_i - failed_count - skipped_count
37
+ {
38
+ username: username,
39
+ github_user_id: user_id,
40
+ learn_oauth_token: learn_oauth_token,
41
+ repo_name: runner.repo,
42
+ build: {
43
+ test_suite: [{
44
+ framework: 'pytest',
45
+ formatted_output: output.to_json,
46
+ duration: output["time"]
47
+ }]
48
+ },
49
+ examples: output["tests"].to_i,
50
+ passing_count: passed_count,
51
+ pending_count: skipped_count,
52
+ failure_count: failed_count,
53
+ failure_descriptions: concat_failure_descriptions
54
+ }
55
+ end
56
+
57
+ def cleanup
58
+ FileUtils.rm('.results.xml')
59
+ end
60
+
61
+ private
62
+
63
+ def calculate_duration
64
+ output[:results].map do |example|
65
+ example[:time]
66
+ end.inject(:+)
67
+ end
68
+
69
+ def concat_failure_descriptions
70
+ # if there is a single test the `testcase` xml parse turns out a hash
71
+ # instead of an array with a single hash. this will make sure single
72
+ # tests have the same output structure (Array) as multiple tests
73
+ output["testcase"] = [output["testcase"]].flatten
74
+
75
+ output["testcase"].reduce([]) do |errors, example|
76
+ if example.has_key?("failure")
77
+ errors << example.map{|k, v| "#{k}: #{v}"}
78
+ end
79
+ errors
80
+ end
81
+ end
82
+
83
+ end
84
+ end
85
+ end
@@ -1,35 +1,28 @@
1
1
  require 'open3'
2
2
 
3
3
  module LearnTest
4
- module PythonUnittest
4
+ module Pytest
5
5
  class RequirementsChecker
6
6
  def self.check_installation
7
- new.check_installation
8
- end
9
-
10
- def check_installation
11
7
  PythonChecker.check
12
8
  PipChecker.check
9
+ PytestChecker.check
13
10
  end
14
11
  end
15
12
 
16
13
  class PythonChecker
17
14
  def self.check
18
- new.check
19
- end
20
-
21
- def check
22
- if !python_installed? || !correct_python_version?
15
+ if !self.python_installed? || !self.correct_python_version?
23
16
  puts "Please install python 2.7.x or 3.x.x"
24
17
  exit
25
18
  end
26
19
  end
27
20
 
28
- def python_installed?
21
+ def self.python_installed?
29
22
  !`which python`.empty?
30
23
  end
31
24
 
32
- def correct_python_version?
25
+ def self.correct_python_version?
33
26
  output = Open3.popen2e('python', '--version')
34
27
  version = output[1].read.strip
35
28
  !!version.match(/ 2.7.*| 3.*/)
@@ -38,20 +31,29 @@ module LearnTest
38
31
 
39
32
  class PipChecker
40
33
  def self.check
41
- new.check
42
- end
43
-
44
- def check
45
- if !pip_installed?
34
+ if !self.pip_installed?
46
35
  puts "Please ensure pip is installed"
47
36
  exit
48
37
  end
49
38
  end
50
39
 
51
- def pip_installed?
40
+ def self.pip_installed?
52
41
  !`which pip`.empty?
53
42
  end
54
43
  end
44
+
45
+ class PytestChecker
46
+ def self.check
47
+ if !self.pytest_installed?
48
+ puts "Please ensure pytest is installed"
49
+ exit
50
+ end
51
+ end
52
+
53
+ def self.pytest_installed?
54
+ !`which pytest`.empty?
55
+ end
56
+ end
57
+
55
58
  end
56
59
  end
57
-