judges 0.16.0 → 0.18.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.
- checksums.yaml +4 -4
- data/.github/workflows/copyrights.yml +1 -1
- data/.rubocop.yml +2 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +10 -3
- data/README.md +5 -0
- data/bin/judges +4 -0
- data/features/push.feature +1 -1
- data/features/test.feature +23 -0
- data/judges.gemspec +1 -1
- data/lib/judges/baza.rb +16 -11
- data/lib/judges/commands/pull.rb +7 -5
- data/lib/judges/commands/push.rb +2 -1
- data/lib/judges/commands/test.rb +24 -17
- data/lib/judges/judges.rb +10 -2
- data/lib/judges.rb +1 -1
- data/test/commands/test_test.rb +29 -0
- data/test/test__helper.rb +3 -0
- data/test/test_baza.rb +15 -0
- data/test/test_judges.rb +11 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01de840b5ca098985b5b4cbdc1ea16d96237d3bbed4617971662f5628fad46bf
|
4
|
+
data.tar.gz: e502a04924b0186921fbbc2026e4f7d78eed0ee47ec2f6cdfcfb01c65e092050
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38e602fda2bc3a1cce738e1633094d7dc0bc8a50fb43ff97e1e28d4da36752bbdb56fac51f98a2cec884b7a3245b701566c7500d817f4a242fbfb0c28cd9b62d
|
7
|
+
data.tar.gz: d9d5761f6384e7898da2cbab0b39a659d22f91a1af61a834f52c038f0162b8ebf08f576a8ea846b9a3818fb5f822c6d018552478d979365fa0226955f7cdc5d3
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
@@ -25,13 +25,14 @@ gemspec
|
|
25
25
|
|
26
26
|
gem 'cucumber', '9.2.0', require: false
|
27
27
|
gem 'minitest', '5.24.1', require: false
|
28
|
+
gem 'minitest-reporters', '1.7.1', require: false
|
28
29
|
gem 'net-ping', '2.0.8', require: false
|
29
30
|
gem 'rake', '13.2.1', require: false
|
30
31
|
gem 'random-port', '~>0.0', require: false
|
31
32
|
gem 'rspec-rails', '6.1.3', require: false
|
32
33
|
gem 'rubocop', '1.65.0', require: false
|
33
34
|
gem 'rubocop-performance', '1.21.1', require: false
|
34
|
-
gem 'rubocop-rspec', '3.0.
|
35
|
+
gem 'rubocop-rspec', '3.0.3', require: false
|
35
36
|
gem 'simplecov', '0.22.0', require: false
|
36
37
|
gem 'simplecov-cobertura', '2.1.0', require: false
|
37
38
|
gem 'webmock', '3.23.1', require: false
|
data/Gemfile.lock
CHANGED
@@ -46,6 +46,7 @@ GEM
|
|
46
46
|
tzinfo (~> 2.0)
|
47
47
|
addressable (2.8.7)
|
48
48
|
public_suffix (>= 2.0.2, < 7.0)
|
49
|
+
ansi (1.5.0)
|
49
50
|
ast (2.4.2)
|
50
51
|
backtrace (0.4.0)
|
51
52
|
base64 (0.2.0)
|
@@ -122,6 +123,11 @@ GEM
|
|
122
123
|
loog (0.5.2)
|
123
124
|
mini_mime (1.1.5)
|
124
125
|
minitest (5.24.1)
|
126
|
+
minitest-reporters (1.7.1)
|
127
|
+
ansi
|
128
|
+
builder
|
129
|
+
minitest (>= 5.0)
|
130
|
+
ruby-progressbar
|
125
131
|
moments (0.3.0)
|
126
132
|
multi_test (1.1.0)
|
127
133
|
mutex_m (0.2.0)
|
@@ -174,7 +180,7 @@ GEM
|
|
174
180
|
zeitwerk (~> 2.6)
|
175
181
|
rainbow (3.1.1)
|
176
182
|
rake (13.2.1)
|
177
|
-
random-port (0.7.
|
183
|
+
random-port (0.7.1)
|
178
184
|
rdoc (6.7.0)
|
179
185
|
psych (>= 4.0.0)
|
180
186
|
regexp_parser (2.9.2)
|
@@ -216,7 +222,7 @@ GEM
|
|
216
222
|
rubocop-performance (1.21.1)
|
217
223
|
rubocop (>= 1.48.1, < 2.0)
|
218
224
|
rubocop-ast (>= 1.31.1, < 2.0)
|
219
|
-
rubocop-rspec (3.0.
|
225
|
+
rubocop-rspec (3.0.3)
|
220
226
|
rubocop (~> 1.61)
|
221
227
|
ruby-progressbar (1.13.0)
|
222
228
|
simplecov (0.22.0)
|
@@ -261,13 +267,14 @@ DEPENDENCIES
|
|
261
267
|
cucumber (= 9.2.0)
|
262
268
|
judges!
|
263
269
|
minitest (= 5.24.1)
|
270
|
+
minitest-reporters (= 1.7.1)
|
264
271
|
net-ping (= 2.0.8)
|
265
272
|
rake (= 13.2.1)
|
266
273
|
random-port (~> 0.0)
|
267
274
|
rspec-rails (= 6.1.3)
|
268
275
|
rubocop (= 1.65.0)
|
269
276
|
rubocop-performance (= 1.21.1)
|
270
|
-
rubocop-rspec (= 3.0.
|
277
|
+
rubocop-rspec (= 3.0.3)
|
271
278
|
simplecov (= 0.22.0)
|
272
279
|
simplecov-cobertura (= 2.1.0)
|
273
280
|
webmock (= 3.23.1)
|
data/README.md
CHANGED
@@ -34,6 +34,8 @@ global variables available to it:
|
|
34
34
|
Every `.yml` file must be formatted as such:
|
35
35
|
|
36
36
|
```yaml
|
37
|
+
before:
|
38
|
+
- abc
|
37
39
|
category: slow
|
38
40
|
runs: 1
|
39
41
|
skip: false
|
@@ -60,6 +62,9 @@ which then may be turned on via the `--category` command line flag.
|
|
60
62
|
The `runs` (default: `1`) is the number of times the `.rb` script should
|
61
63
|
be executed. After each execution, all expected XPath expressions are validated.
|
62
64
|
|
65
|
+
The `before` (default: `[]`) is a list of judges that must be executed before
|
66
|
+
the current one.
|
67
|
+
|
63
68
|
## How to contribute
|
64
69
|
|
65
70
|
Read
|
data/bin/judges
CHANGED
@@ -179,6 +179,8 @@ class App
|
|
179
179
|
c.flag([:owner], default_value: 'default', type: String)
|
180
180
|
c.desc 'Supplementary meta information about the upload (key:value)'
|
181
181
|
c.flag([:meta], type: String, multiple: true)
|
182
|
+
c.desc 'How many times to retry'
|
183
|
+
c.flag([:retries], type: Integer, default_value: 3)
|
182
184
|
c.action do |global, options, args|
|
183
185
|
require_relative '../lib/judges/commands/push'
|
184
186
|
Judges::Push.new(loog).run(options, args)
|
@@ -201,6 +203,8 @@ class App
|
|
201
203
|
c.switch([:ssl], default_value: true)
|
202
204
|
c.desc 'A unique name to use for a lock/unlock'
|
203
205
|
c.flag([:owner], default_value: 'default', type: String)
|
206
|
+
c.desc 'How many times to retry'
|
207
|
+
c.flag([:retries], type: Integer, default_value: 3)
|
204
208
|
c.action do |global, options, args|
|
205
209
|
require_relative '../lib/judges/commands/pull'
|
206
210
|
Judges::Pull.new(loog).run(options, args)
|
data/features/push.feature
CHANGED
@@ -6,6 +6,6 @@ Feature: Push
|
|
6
6
|
Given I make a temp directory
|
7
7
|
Then I run bin/judges with "--verbose eval simple.fb '(0..1000).each { $fb.insert.foo = 42 }'"
|
8
8
|
And Exit code is zero
|
9
|
-
Then I run bin/judges with "push --token 00000000-0000-0000-0000-000000000000 --meta a:b --meta foo:bar simple simple.fb"
|
9
|
+
Then I run bin/judges with "push --token 00000000-0000-0000-0000-000000000000 --meta a:b --meta foo:bar --meta=pages_url:https://zerocracy.github.io/zerocracy.html --meta=duration:1055 simple simple.fb"
|
10
10
|
Then Stdout contains "Pushed"
|
11
11
|
And Exit code is zero
|
data/features/test.feature
CHANGED
@@ -118,3 +118,26 @@ Feature: Test
|
|
118
118
|
Then I run bin/judges with "test --enable bad mine"
|
119
119
|
Then Stdout contains "Testing mine/bad/bad.yml"
|
120
120
|
And Exit code is not zero
|
121
|
+
|
122
|
+
Scenario: Test with a pre-condition
|
123
|
+
Given I make a temp directory
|
124
|
+
Then I have a "mine/first/first.rb" file with content:
|
125
|
+
"""
|
126
|
+
n = $fb.insert
|
127
|
+
n.foo = 42
|
128
|
+
"""
|
129
|
+
Then I have a "mine/second/second.rb" file with content:
|
130
|
+
"""
|
131
|
+
n = $fb.insert
|
132
|
+
n.foo = 55
|
133
|
+
"""
|
134
|
+
Then I have a "mine/second/second.yml" file with content:
|
135
|
+
"""
|
136
|
+
---
|
137
|
+
before:
|
138
|
+
- first
|
139
|
+
expected:
|
140
|
+
- /fb[count(f)=2]
|
141
|
+
"""
|
142
|
+
Then I run bin/judges with "test mine"
|
143
|
+
And Exit code is zero
|
data/judges.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
|
27
27
|
s.required_ruby_version = '>=3.2'
|
28
28
|
s.name = 'judges'
|
29
|
-
s.version = '0.
|
29
|
+
s.version = '0.18.0'
|
30
30
|
s.license = 'MIT'
|
31
31
|
s.summary = 'Command-Line Tool for a Factbase'
|
32
32
|
s.description =
|
data/lib/judges/baza.rb
CHANGED
@@ -33,15 +33,14 @@ require_relative '../judges/elapsed'
|
|
33
33
|
# Copyright:: Copyright (c) 2024 Yegor Bugayenko
|
34
34
|
# License:: MIT
|
35
35
|
class Judges::Baza
|
36
|
-
|
37
|
-
def initialize(host, port, token, ssl: true, timeout: 30, loog: Loog::NULL)
|
38
|
-
# rubocop:enable Metrics/ParameterLists
|
36
|
+
def initialize(host, port, token, ssl: true, timeout: 30, retries: 3, loog: Loog::NULL)
|
39
37
|
@host = host
|
40
38
|
@port = port
|
41
39
|
@ssl = ssl
|
42
40
|
@token = token
|
43
41
|
@timeout = timeout
|
44
42
|
@loog = loog
|
43
|
+
@retries = retries
|
45
44
|
end
|
46
45
|
|
47
46
|
def push(name, data, meta)
|
@@ -50,9 +49,11 @@ class Judges::Baza
|
|
50
49
|
'Content-Type' => 'application/octet-stream',
|
51
50
|
'Content-Length' => data.size
|
52
51
|
)
|
53
|
-
|
52
|
+
unless meta.empty?
|
53
|
+
hdrs = hdrs.merge('X-Zerocracy-Meta' => meta.map { |v| Base64.encode64(v).gsub("\n", '') }.join(' '))
|
54
|
+
end
|
54
55
|
elapsed(@loog) do
|
55
|
-
ret = with_retries do
|
56
|
+
ret = with_retries(max_tries: @retries) do
|
56
57
|
checked(
|
57
58
|
Typhoeus::Request.put(
|
58
59
|
home.append('push').append(name).to_s,
|
@@ -85,7 +86,9 @@ class Judges::Baza
|
|
85
86
|
request.on_body do |chunk|
|
86
87
|
f.write(chunk)
|
87
88
|
end
|
88
|
-
|
89
|
+
with_retries(max_tries: @retries) do
|
90
|
+
request.run
|
91
|
+
end
|
89
92
|
checked(request.response)
|
90
93
|
end
|
91
94
|
data = File.binread(file)
|
@@ -99,7 +102,7 @@ class Judges::Baza
|
|
99
102
|
def finished?(id)
|
100
103
|
finished = false
|
101
104
|
elapsed(@loog) do
|
102
|
-
ret = with_retries do
|
105
|
+
ret = with_retries(max_tries: @retries) do
|
103
106
|
checked(
|
104
107
|
Typhoeus::Request.get(
|
105
108
|
home.append('finished').append(id).to_s,
|
@@ -116,7 +119,7 @@ class Judges::Baza
|
|
116
119
|
# Lock the name.
|
117
120
|
def lock(name, owner)
|
118
121
|
elapsed(@loog) do
|
119
|
-
with_retries do
|
122
|
+
with_retries(max_tries: @retries) do
|
120
123
|
checked(
|
121
124
|
Typhoeus::Request.get(
|
122
125
|
home.append('lock').append(name).add(owner:).to_s,
|
@@ -131,7 +134,7 @@ class Judges::Baza
|
|
131
134
|
# Unlock the name.
|
132
135
|
def unlock(name, owner)
|
133
136
|
elapsed(@loog) do
|
134
|
-
with_retries do
|
137
|
+
with_retries(max_tries: @retries) do
|
135
138
|
checked(
|
136
139
|
Typhoeus::Request.get(
|
137
140
|
home.append('unlock').append(name).add(owner:).to_s,
|
@@ -146,7 +149,7 @@ class Judges::Baza
|
|
146
149
|
def recent(name)
|
147
150
|
job = 0
|
148
151
|
elapsed(@loog) do
|
149
|
-
ret = with_retries do
|
152
|
+
ret = with_retries(max_tries: @retries) do
|
150
153
|
checked(
|
151
154
|
Typhoeus::Request.get(
|
152
155
|
home.append('recent').append("#{name}.txt").to_s,
|
@@ -163,7 +166,7 @@ class Judges::Baza
|
|
163
166
|
def name_exists?(name)
|
164
167
|
exists = 0
|
165
168
|
elapsed(@loog) do
|
166
|
-
ret = with_retries do
|
169
|
+
ret = with_retries(max_tries: @retries) do
|
167
170
|
checked(
|
168
171
|
Typhoeus::Request.get(
|
169
172
|
home.append('exists').append(name).to_s,
|
@@ -220,6 +223,8 @@ class Judges::Baza
|
|
220
223
|
msg +=
|
221
224
|
', most probably you are trying to reach a wrong server, which doesn\'t ' \
|
222
225
|
'have the URL that it is expected to have'
|
226
|
+
when 0
|
227
|
+
msg += ', most likely an internal error'
|
223
228
|
end
|
224
229
|
raise msg
|
225
230
|
end
|
data/lib/judges/commands/pull.rb
CHANGED
@@ -42,13 +42,14 @@ class Judges::Pull
|
|
42
42
|
opts['host'], opts['port'].to_i, opts['token'],
|
43
43
|
ssl: opts['ssl'],
|
44
44
|
timeout: (opts['timeout'] || 30).to_i,
|
45
|
-
loog: @loog
|
45
|
+
loog: @loog,
|
46
|
+
retries: (opts['retries'] || 3).to_i
|
46
47
|
)
|
47
48
|
name = args[0]
|
48
49
|
elapsed(@loog) do
|
49
50
|
if baza.name_exists?(name)
|
50
51
|
baza.lock(name, opts['owner'])
|
51
|
-
fb.import(baza.pull(wait(baza, baza.recent(name), opts['wait'])))
|
52
|
+
fb.import(baza.pull(wait(name, baza, baza.recent(name), opts['wait'])))
|
52
53
|
Judges::Impex.new(@loog, args[1]).export(fb)
|
53
54
|
throw :"Pulled #{fb.size} facts by the name '#{name}'"
|
54
55
|
else
|
@@ -59,14 +60,15 @@ class Judges::Pull
|
|
59
60
|
|
60
61
|
private
|
61
62
|
|
62
|
-
def wait(baza, id, limit)
|
63
|
+
def wait(name, baza, id, limit)
|
63
64
|
raise 'Waiting time is nil' if limit.nil?
|
64
65
|
start = Time.now
|
65
66
|
loop do
|
66
67
|
break if baza.finished?(id)
|
67
68
|
sleep 1
|
68
|
-
raise
|
69
|
-
|
69
|
+
raise "Time is over, the job ##{id} ('#{name}') is still not finished" if Time.now - start > limit
|
70
|
+
lapsed = Time.now - start
|
71
|
+
@loog.debug("Still waiting for the job ##{id} ('#{name}') to finish... (#{format('%.2f', lapsed)}s already)")
|
70
72
|
end
|
71
73
|
id
|
72
74
|
end
|
data/lib/judges/commands/push.rb
CHANGED
@@ -43,7 +43,8 @@ class Judges::Push
|
|
43
43
|
opts['host'], opts['port'].to_i, opts['token'],
|
44
44
|
ssl: opts['ssl'],
|
45
45
|
timeout: (opts['timeout'] || 30).to_i,
|
46
|
-
loog: @loog
|
46
|
+
loog: @loog,
|
47
|
+
retries: (opts['retries'] || 3).to_i
|
47
48
|
)
|
48
49
|
elapsed(@loog) do
|
49
50
|
baza.lock(name, opts['owner'])
|
data/lib/judges/commands/test.rb
CHANGED
@@ -46,18 +46,19 @@ class Judges::Test
|
|
46
46
|
dir = args[0]
|
47
47
|
@loog.info("Testing judges in #{dir.to_rel}...")
|
48
48
|
errors = []
|
49
|
-
|
49
|
+
tested = 0
|
50
50
|
tests = 0
|
51
51
|
visible = []
|
52
|
+
judges = Judges::Judges.new(dir, opts['lib'], @loog)
|
52
53
|
elapsed(@loog) do
|
53
|
-
|
54
|
-
visible <<
|
55
|
-
next unless include?(opts,
|
56
|
-
@loog.info("\n👉 Testing #{
|
57
|
-
|
54
|
+
judges.each_with_index do |judge, i|
|
55
|
+
visible << judge.name
|
56
|
+
next unless include?(opts, judge.name)
|
57
|
+
@loog.info("\n👉 Testing #{judge.script} (##{i}) in #{judge.dir.to_rel}...")
|
58
|
+
judge.tests.each do |f|
|
58
59
|
tname = File.basename(f).gsub(/\.yml$/, '')
|
59
|
-
visible << " #{
|
60
|
-
next unless include?(opts,
|
60
|
+
visible << " #{judge.name}/#{tname}"
|
61
|
+
next unless include?(opts, judge.name, tname)
|
61
62
|
yaml = YAML.load_file(f, permitted_classes: [Time])
|
62
63
|
if yaml['skip']
|
63
64
|
@loog.info("Skippped #{f.to_rel}")
|
@@ -69,25 +70,31 @@ class Judges::Test
|
|
69
70
|
end
|
70
71
|
@loog.info("🛠️ Testing #{f.to_rel}:")
|
71
72
|
begin
|
72
|
-
|
73
|
+
fb = Factbase.new
|
74
|
+
yaml['before']&.each do |n|
|
75
|
+
j = judges.get(n)
|
76
|
+
@loog.info("Running #{j.script} judge as a pre-condition...")
|
77
|
+
test_one(fb, opts, j, n, yaml, assert: false)
|
78
|
+
end
|
79
|
+
test_one(fb, opts, judge, tname, yaml)
|
73
80
|
tests += 1
|
74
81
|
rescue StandardError => e
|
75
82
|
@loog.warn(Backtrace.new(e))
|
76
83
|
errors << f
|
77
84
|
end
|
78
85
|
end
|
79
|
-
|
86
|
+
tested += 1
|
80
87
|
end
|
81
|
-
throw :'👍 No judges tested' if
|
82
|
-
throw :"👍 All #{
|
83
|
-
throw :"👍 All #{
|
84
|
-
throw :"❌ #{
|
88
|
+
throw :'👍 No judges tested' if tested.zero?
|
89
|
+
throw :"👍 All #{tested} judge(s) but no tests passed" if tests.zero?
|
90
|
+
throw :"👍 All #{tested} judge(s) and #{tests} tests passed" if errors.empty?
|
91
|
+
throw :"❌ #{tested} judge(s) tested, #{errors.size} of them failed"
|
85
92
|
end
|
86
93
|
unless errors.empty?
|
87
94
|
raise "#{errors.size} tests failed" unless opts['quiet']
|
88
95
|
@loog.debug('Not failing the build with tests failures, due to the --quiet option')
|
89
96
|
end
|
90
|
-
return unless
|
97
|
+
return unless tested.zero? || tests.zero?
|
91
98
|
if opts['judge'].nil?
|
92
99
|
raise 'There are seems to be no judges' unless opts['quiet']
|
93
100
|
@loog.debug('Not failing the build with no judges tested, due to the --quiet option')
|
@@ -106,8 +113,7 @@ class Judges::Test
|
|
106
113
|
judges.any? { |n| n.match?(%r{^#{name}(/#{tre})?$}) }
|
107
114
|
end
|
108
115
|
|
109
|
-
def test_one(opts, judge, tname, yaml)
|
110
|
-
fb = Factbase.new
|
116
|
+
def test_one(fb, opts, judge, tname, yaml, assert: true)
|
111
117
|
inputs = yaml['input']
|
112
118
|
inputs&.each do |i|
|
113
119
|
f = fb.insert
|
@@ -127,6 +133,7 @@ class Judges::Test
|
|
127
133
|
fbx = fb
|
128
134
|
fbx = Factbase::Looged.new(fb, @loog) if opts['log']
|
129
135
|
judge.run(fbx, {}, {}, options)
|
136
|
+
next unless assert
|
130
137
|
assert(judge, tname, fb, yaml) if r == runs || opts['assert_once'].is_a?(FalseClass)
|
131
138
|
end
|
132
139
|
end
|
data/lib/judges/judges.rb
CHANGED
@@ -34,8 +34,16 @@ class Judges::Judges
|
|
34
34
|
@loog = loog
|
35
35
|
end
|
36
36
|
|
37
|
+
# Get one judge by name.
|
38
|
+
# @return [Judge]
|
39
|
+
def get(name)
|
40
|
+
d = File.absolute_path(File.join(@dir, name))
|
41
|
+
raise "Judge #{name} doesn't exist in #{@dir}" unless File.exist?(d)
|
42
|
+
Judges::Judge.new(d, @lib, @loog)
|
43
|
+
end
|
44
|
+
|
37
45
|
# Iterate over them all.
|
38
|
-
# @yield [
|
46
|
+
# @yield [Judge]
|
39
47
|
def each
|
40
48
|
Dir.glob(File.join(@dir, '**/*.rb')).each do |f|
|
41
49
|
d = File.dirname(File.absolute_path(f))
|
@@ -44,7 +52,7 @@ class Judges::Judges
|
|
44
52
|
end
|
45
53
|
|
46
54
|
# Iterate over them all.
|
47
|
-
# @yield [(
|
55
|
+
# @yield [(Judge, Integer)]
|
48
56
|
def each_with_index
|
49
57
|
idx = 0
|
50
58
|
each do |p|
|
data/lib/judges.rb
CHANGED
data/test/commands/test_test.rb
CHANGED
@@ -88,6 +88,35 @@ class TestTest < Minitest::Test
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
+
def test_with_before
|
92
|
+
Dir.mktmpdir do |d|
|
93
|
+
home = File.join(d, 'judges')
|
94
|
+
FileUtils.mkdir_p(File.join(home, 'first'))
|
95
|
+
File.write(File.join(d, 'judges/first/the-first.rb'), '$fb.insert.foo = 42')
|
96
|
+
FileUtils.mkdir_p(File.join(home, 'second'))
|
97
|
+
File.write(File.join(d, 'judges/second/the-second.rb'), '$fb.insert.foo = 55')
|
98
|
+
File.write(
|
99
|
+
File.join(d, 'judges/first/something.yml'),
|
100
|
+
<<-YAML
|
101
|
+
input: []
|
102
|
+
expected:
|
103
|
+
- /fb[count(f)=1]
|
104
|
+
YAML
|
105
|
+
)
|
106
|
+
File.write(
|
107
|
+
File.join(d, 'judges/second/something.yml'),
|
108
|
+
<<-YAML
|
109
|
+
input: []
|
110
|
+
before:
|
111
|
+
- first
|
112
|
+
expected:
|
113
|
+
- /fb[count(f)=2]
|
114
|
+
YAML
|
115
|
+
)
|
116
|
+
Judges::Test.new(Loog::NULL).run({}, [home])
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
91
120
|
def test_one_judge_negative
|
92
121
|
Dir.mktmpdir do |d|
|
93
122
|
File.write(File.join(d, 'foo.rb'), '')
|
data/test/test__helper.rb
CHANGED
data/test/test_baza.rb
CHANGED
@@ -89,6 +89,21 @@ class TestBaza < Minitest::Test
|
|
89
89
|
assert(req.include?("X-Zerocracy-Meta: Ym9vbSE= 0YXQtdC5IQ==\r\n"))
|
90
90
|
end
|
91
91
|
|
92
|
+
def test_push_with_big_meta
|
93
|
+
req = with_http_server(200, 'yes') do |baza|
|
94
|
+
baza.push(
|
95
|
+
'simple',
|
96
|
+
'hello, world!',
|
97
|
+
[
|
98
|
+
'pages_url:https://zerocracy.github.io/zerocracy.html',
|
99
|
+
'others:https://zerocracy.github.io/zerocracy.html',
|
100
|
+
'duration:59595'
|
101
|
+
]
|
102
|
+
)
|
103
|
+
end
|
104
|
+
assert(req.join.include?('X-Zerocracy-Meta: '))
|
105
|
+
end
|
106
|
+
|
92
107
|
private
|
93
108
|
|
94
109
|
def with_http_server(code, response)
|
data/test/test_judges.rb
CHANGED
@@ -30,7 +30,7 @@ require_relative '../lib/judges/judges'
|
|
30
30
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
31
31
|
# Copyright:: Copyright (c) 2024 Yegor Bugayenko
|
32
32
|
# License:: MIT
|
33
|
-
class
|
33
|
+
class TestJudges < Minitest::Test
|
34
34
|
def test_basic
|
35
35
|
Dir.mktmpdir do |d|
|
36
36
|
File.write(File.join(d, 'foo.rb'), 'hey')
|
@@ -44,4 +44,14 @@ class TestPacks < Minitest::Test
|
|
44
44
|
assert_equal(1, found)
|
45
45
|
end
|
46
46
|
end
|
47
|
+
|
48
|
+
def test_get_one
|
49
|
+
Dir.mktmpdir do |d|
|
50
|
+
f = File.join(d, 'boo/foo.rb')
|
51
|
+
FileUtils.mkdir_p(File.dirname(f))
|
52
|
+
File.write(f, 'hey')
|
53
|
+
j = Judges::Judges.new(d, nil, Loog::NULL).get('boo')
|
54
|
+
assert_equal('foo.rb', j.script)
|
55
|
+
end
|
56
|
+
end
|
47
57
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: judges
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-07-
|
11
|
+
date: 2024-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backtrace
|