2024-08-26 23:06:18 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require "utils/shared_audits"
|
2025-05-04 02:10:08 +09:00
|
|
|
require "utils/curl"
|
2024-08-26 23:06:18 -04:00
|
|
|
|
|
|
|
RSpec.describe SharedAudits do
|
2025-05-04 02:10:08 +09:00
|
|
|
let(:eol_json_text) do
|
|
|
|
<<~JSON
|
|
|
|
{
|
|
|
|
"schema_version" : "1.0.0",
|
2025-05-03 20:48:20 -04:00
|
|
|
"generated_at": "2025-01-02T01:23:45+00:00",
|
2025-05-04 02:10:08 +09:00
|
|
|
"result": {
|
2025-05-03 20:48:20 -04:00
|
|
|
"name": "1.2",
|
2025-05-04 02:10:08 +09:00
|
|
|
"codename": null,
|
2025-05-03 20:48:20 -04:00
|
|
|
"label": "1.2",
|
|
|
|
"releaseDate": "2024-01-01",
|
|
|
|
"isLts": false,
|
|
|
|
"ltsFrom": null,
|
|
|
|
"isEol": true,
|
|
|
|
"eolFrom": "2025-01-01",
|
|
|
|
"isMaintained": false,
|
2025-05-04 02:10:08 +09:00
|
|
|
"latest": {
|
2025-05-03 20:48:20 -04:00
|
|
|
"name": "1.0.0",
|
|
|
|
"date": "2024-01-01",
|
|
|
|
"link": "https://example.com/1.0.0"
|
2025-05-04 02:10:08 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
JSON
|
|
|
|
end
|
|
|
|
|
|
|
|
def mock_curl_output(stdout: "", success: true)
|
|
|
|
status = instance_double(Process::Status, success?: success)
|
|
|
|
curl_output = instance_double(SystemCommand::Result, stdout:, status:)
|
|
|
|
allow(Utils::Curl).to receive(:curl_output).and_return curl_output
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "::eol_data" do
|
2025-05-03 20:48:20 -04:00
|
|
|
it "returns a parsed JSON object if the product is found" do
|
2025-05-04 02:10:08 +09:00
|
|
|
mock_curl_output stdout: eol_json_text
|
2025-05-03 20:49:53 -04:00
|
|
|
expect(described_class.eol_data("product", "cycle")&.dig("result", "isEol")).to be(true)
|
|
|
|
expect(described_class.eol_data("product", "cycle")&.dig("result", "eolFrom")).to eq("2025-01-01")
|
2025-05-04 02:10:08 +09:00
|
|
|
end
|
|
|
|
|
|
|
|
it "returns nil if the product is not found" do
|
|
|
|
mock_curl_output stdout: "<html></html>"
|
|
|
|
expect(described_class.eol_data("none", "cycle")).to be_nil
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns nil if api call fails" do
|
|
|
|
mock_curl_output success: false
|
|
|
|
expect(described_class.eol_data("", "")).to be_nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2024-08-27 11:39:50 -04:00
|
|
|
describe "::github_tag_from_url" do
|
|
|
|
it "finds tags in archive urls" do
|
|
|
|
url = "https://github.com/a/b/archive/refs/tags/v1.2.3.tar.gz"
|
|
|
|
expect(described_class.github_tag_from_url(url)).to eq("v1.2.3")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "finds tags in release urls" do
|
|
|
|
url = "https://github.com/a/b/releases/download/1.2.3/b-1.2.3.tar.bz2"
|
|
|
|
expect(described_class.github_tag_from_url(url)).to eq("1.2.3")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "finds tags with slashes" do
|
|
|
|
url = "https://github.com/a/b/archive/refs/tags/c/d/e/f/g-v1.2.3.tar.gz"
|
|
|
|
expect(described_class.github_tag_from_url(url)).to eq("c/d/e/f/g-v1.2.3")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "finds tags in orgs/repos with special characters" do
|
|
|
|
url = "https://github.com/a-b/c-d_e.f/archive/refs/tags/2.5.tar.gz"
|
|
|
|
expect(described_class.github_tag_from_url(url)).to eq("2.5")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2024-08-26 23:06:18 -04:00
|
|
|
describe "::gitlab_tag_from_url" do
|
|
|
|
it "doesn't find tags in invalid urls" do
|
|
|
|
url = "https://gitlab.com/a/-/archive/v1.2.3/a-v1.2.3.tar.gz"
|
|
|
|
expect(described_class.gitlab_tag_from_url(url)).to be_nil
|
|
|
|
end
|
|
|
|
|
|
|
|
it "finds tags in basic urls" do
|
|
|
|
url = "https://gitlab.com/a/b/-/archive/v1.2.3/b-1.2.3.tar.gz"
|
|
|
|
expect(described_class.gitlab_tag_from_url(url)).to eq("v1.2.3")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "finds tags in urls with subgroups" do
|
|
|
|
url = "https://gitlab.com/a/b/c/d/e/f/g/-/archive/2.5/g-2.5.tar.gz"
|
|
|
|
expect(described_class.gitlab_tag_from_url(url)).to eq("2.5")
|
|
|
|
end
|
|
|
|
|
|
|
|
it "finds tags in urls with special characters" do
|
|
|
|
url = "https://gitlab.com/a.b/c-d_e/-/archive/2.5/c-d_e-2.5.tar.gz"
|
|
|
|
expect(described_class.gitlab_tag_from_url(url)).to eq("2.5")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|