]> git.immae.eu Git - github/fretlink/pronto-hlint.git/blob - spec/pronto/eslint_spec.rb
update locally used ruby versiob, lint everything
[github/fretlink/pronto-hlint.git] / spec / pronto / eslint_spec.rb
1 # frozen_string_literal: true
2
3 require 'spec_helper'
4
5 module Pronto
6 describe ESLintNpm do
7 let(:eslint) { ESLintNpm.new(patches) }
8 let(:patches) { [] }
9
10 describe '#run' do
11 subject(:run) { eslint.run }
12
13 context 'patches are nil' do
14 let(:patches) { nil }
15
16 it 'returns an empty array' do
17 expect(run).to eql([])
18 end
19 end
20
21 context 'no patches' do
22 let(:patches) { [] }
23
24 it 'returns an empty array' do
25 expect(run).to eql([])
26 end
27 end
28
29 context 'patches with a one and a four warnings' do
30 include_context 'test repo'
31
32 let(:patches) { repo.diff('master') }
33
34 it 'returns correct number of errors' do
35 expect(run.count).to eql(5)
36 end
37
38 it 'has correct first message' do
39 expect(run.first.msg).to eql("'foo' is not defined.")
40 end
41
42 context(
43 'with files to lint config that never matches',
44 config: { 'files_to_lint' => 'will never match' }
45 ) do
46 it 'returns zero errors' do
47 expect(run.count).to eql(0)
48 end
49 end
50
51 context(
52 'with files to lint config that matches only .js',
53 config: { 'files_to_lint' => '\.js$' }
54 ) do
55 it 'returns correct amount of errors' do
56 expect(run.count).to eql(2)
57 end
58 end
59
60 context(
61 'with different eslint executable',
62 config: { 'eslint_executable' => './custom_eslint.sh' }
63 ) do
64 it 'calls the custom eslint eslint_executable' do
65 expect { run }.to raise_error(JSON::ParserError, /custom eslint called/)
66 end
67 end
68 end
69
70 context 'repo with ignored and not ignored file, each with three warnings' do
71 include_context 'eslintignore repo'
72
73 let(:patches) { repo.diff('master') }
74
75 it 'returns correct number of errors' do
76 expect(run.count).to eql(3)
77 end
78
79 it 'has correct first message' do
80 expect(run.first.msg).to eql("'HelloWorld' is defined but never used.")
81 end
82 end
83 end
84
85 describe '#files_to_lint' do
86 subject(:files_to_lint) { eslint.files_to_lint }
87
88 it 'matches .js by default' do
89 expect(files_to_lint).to match('my_js.js')
90 end
91
92 it 'matches .es6 by default' do
93 expect(files_to_lint).to match('my_js.es6')
94 end
95 end
96
97 describe '#eslint_executable' do
98 subject(:eslint_executable) { eslint.eslint_executable }
99
100 it 'is `eslint` by default' do
101 expect(eslint_executable).to eql('eslint')
102 end
103 end
104 end
105 end