66 lines
1.7 KiB
Ruby
66 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe "compatibility:validate" do
|
|
before do
|
|
Rake::Task.clear
|
|
Discourse::Application.load_tasks
|
|
end
|
|
|
|
def invoke(content)
|
|
file = Tempfile.new("discourse-compat-validate")
|
|
file.write content
|
|
file.close
|
|
error = nil
|
|
stdout =
|
|
capture_stdout do
|
|
Rake::Task["compatibility:validate"].invoke(file.path)
|
|
rescue => e
|
|
error = e
|
|
end
|
|
[error, stdout]
|
|
ensure
|
|
file.unlink
|
|
end
|
|
|
|
it "passes for a valid .discourse-compatibility file" do
|
|
error, stdout = invoke <<~CONTENT
|
|
2.5.0.beta6: c4a6c17
|
|
2.5.0.beta4: d1d2d3f
|
|
CONTENT
|
|
expect(error).to eq(nil)
|
|
expect(stdout).to include("Compatibility file is valid")
|
|
end
|
|
|
|
it "passes for empty file" do
|
|
error, stdout = invoke ""
|
|
expect(error).to eq(nil)
|
|
expect(stdout).to include("Compatibility file is valid")
|
|
end
|
|
|
|
it "fails for invalid YAML" do
|
|
error, stdout = invoke <<~CONTENT
|
|
2.5.0.beta6 c4a6c17
|
|
CONTENT
|
|
expect(error).to be_a(Discourse::InvalidVersionListError)
|
|
expect(stdout).to include("Invalid version list")
|
|
end
|
|
|
|
it "fails for invalid version specifier" do
|
|
error, stdout = invoke <<~CONTENT
|
|
> 2.5.0.beta6: c4a6c17
|
|
CONTENT
|
|
expect(error).to be_a(Discourse::InvalidVersionListError)
|
|
expect(stdout).to include("Invalid version list")
|
|
end
|
|
|
|
it "fails when matching current core version" do
|
|
error, stdout = invoke <<~CONTENT
|
|
#{Discourse::VERSION::STRING}: c4a6c17
|
|
CONTENT
|
|
expect(error).to be_a(CoreTooRecentError)
|
|
expect(stdout).to include(
|
|
"Compatibility file has an entry which matches the current version of Discourse core",
|
|
)
|
|
end
|
|
end
|