learn-test 2.5.6 → 3.1.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 (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
-