Skip to content

Commit 3475dff

Browse files
author
kjeld Schouten-Lebbing
committed
add empty tests
1 parent 123849a commit 3475dff

File tree

3 files changed

+119
-0
lines changed

3 files changed

+119
-0
lines changed

test/incubator/.gitkeep

Whitespace-only changes.

test/stable/.gitkeep

Whitespace-only changes.

test/test_helper.rb

+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# frozen_string_literal: true
2+
3+
require 'json'
4+
require 'yaml'
5+
require 'open3'
6+
7+
require 'jq/extend'
8+
require 'minitest-implicit-subject'
9+
require "minitest/reporters"
10+
require 'minitest/autorun'
11+
require 'minitest/pride'
12+
13+
class HelmCompileError < StandardError
14+
end
15+
16+
class HelmDepsError < StandardError
17+
end
18+
19+
class Chart
20+
attr_reader :name, :path, :values
21+
22+
def initialize(chart)
23+
@name = chart.split('/').last
24+
25+
@path = File.expand_path(chart)
26+
27+
@values = default_values
28+
29+
update_deps!
30+
end
31+
32+
def update_deps!
33+
command = "helm dep update '#{path}'"
34+
stdout, stderr, status = Open3.capture3(command)
35+
raise HelmDepsError, stderr if status != 0
36+
end
37+
38+
def reset!
39+
@values = default_values
40+
@parsed_resources = nil
41+
end
42+
43+
def value(value)
44+
values.merge!(value)
45+
end
46+
47+
def configure_custom_name(name)
48+
@name = name
49+
end
50+
51+
def execute_helm_template!
52+
file = Tempfile.new(name)
53+
file.write(JSON.parse(values.to_json).to_yaml)
54+
file.close
55+
56+
begin
57+
command = "helm template '#{name}' '#{path}' --namespace='default' --values='#{file.path}'"
58+
stdout, stderr, status = Open3.capture3(command)
59+
60+
raise HelmCompileError, stderr if status != 0
61+
62+
stdout
63+
ensure
64+
file.unlink
65+
end
66+
end
67+
68+
def parsed_resources
69+
@parsed_resources ||= begin
70+
output = execute_helm_template!
71+
puts output if ENV.fetch('DEBUG', 'false') == 'true'
72+
YAML.load_stream(output)
73+
end
74+
end
75+
76+
def resources(matcher = nil)
77+
return parsed_resources unless matcher
78+
79+
parsed_resources.select do |r|
80+
r >= Hash[matcher.map { |k, v| [k.to_s, v] }]
81+
end
82+
end
83+
84+
def default_values
85+
{
86+
}
87+
end
88+
end
89+
90+
class ExtendedMinitest < Minitest::Test
91+
extend MiniTest::Spec::DSL
92+
end
93+
94+
class ChartTest < ExtendedMinitest
95+
Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
96+
97+
before do
98+
chart.reset!
99+
end
100+
101+
def chart
102+
self.class.class_variable_get('@@chart')
103+
end
104+
105+
def resource(name)
106+
chart.resources(kind: name).first
107+
end
108+
109+
def jq(matcher, object)
110+
value(object.jq(matcher)[0])
111+
end
112+
end
113+
114+
class Minitest::Result
115+
def name
116+
test_name = defined?(@name) ? @name : super
117+
test_name.to_s.gsub /\Atest_\d{4,}_/, ""
118+
end
119+
end

0 commit comments

Comments
 (0)