warp_engine: CiRepository -> Pipeline rename everywhere, ci_ service prefixes dropped, unknown platform allowed
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe WarpEngine::PipelineSyncService do
|
||||
let(:client) { instance_double(WarpEngine::WoodpeckerClient) }
|
||||
let(:service) { described_class.new(client: client) }
|
||||
|
||||
describe "#sync_all" do
|
||||
it "creates new Pipeline records from Woodpecker" do
|
||||
allow(client).to receive(:list_repos).and_return([
|
||||
{ "id" => 1, "name" => "mygame", "owner" => "org", "active" => true }
|
||||
])
|
||||
|
||||
result = service.sync_all
|
||||
|
||||
expect(result[:created].size).to eq(1)
|
||||
repo = result[:created].first
|
||||
expect(repo.repo_name).to eq("mygame")
|
||||
expect(repo.repo_owner).to eq("org")
|
||||
expect(repo.active).to be true
|
||||
end
|
||||
|
||||
it "updates existing records" do
|
||||
existing = create(:pipeline, woodpecker_repo_id: 1, repo_name: "old", platform: "tic80")
|
||||
allow(client).to receive(:list_repos).and_return([
|
||||
{ "id" => 1, "name" => "newname", "owner" => "org", "active" => true }
|
||||
])
|
||||
|
||||
result = service.sync_all
|
||||
|
||||
expect(result[:updated].size).to eq(1)
|
||||
expect(existing.reload.repo_name).to eq("newname")
|
||||
end
|
||||
|
||||
it "deactivates repos missing from Woodpecker" do
|
||||
orphan = create(:pipeline, woodpecker_repo_id: 99, active: true)
|
||||
allow(client).to receive(:list_repos).and_return([])
|
||||
|
||||
result = service.sync_all
|
||||
|
||||
expect(result[:deactivated]).to include(orphan)
|
||||
expect(orphan.reload.active).to be false
|
||||
end
|
||||
|
||||
it "auto-detects platform from matching Software" do
|
||||
create(:software, name: "mygame", platform: "godot")
|
||||
allow(client).to receive(:list_repos).and_return([
|
||||
{ "id" => 1, "name" => "mygame", "owner" => "org", "active" => true }
|
||||
])
|
||||
|
||||
result = service.sync_all
|
||||
|
||||
expect(result[:created].first.platform).to eq("godot")
|
||||
expect(result[:created].first.software).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
describe "#activate" do
|
||||
it "calls client and syncs the repo" do
|
||||
allow(client).to receive(:activate_repo).with(42)
|
||||
allow(client).to receive(:get_repo).with(42).and_return(
|
||||
{ "id" => 42, "name" => "game", "owner" => "org", "active" => true }
|
||||
)
|
||||
|
||||
repo = service.activate(42)
|
||||
|
||||
expect(repo.woodpecker_repo_id).to eq(42)
|
||||
expect(repo.active).to be true
|
||||
end
|
||||
end
|
||||
|
||||
describe "#deactivate" do
|
||||
it "calls client and marks repo inactive" do
|
||||
repo = create(:pipeline, woodpecker_repo_id: 42, active: true)
|
||||
allow(client).to receive(:deactivate_repo).with(42)
|
||||
|
||||
service.deactivate(42)
|
||||
|
||||
expect(repo.reload.active).to be false
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user