require "rails_helper"

RSpec.describe WarpEngine::BuildsService do
  describe "#index" do
    subject(:result) { described_class.new.index }

    it "returns all supported platforms with expected kinds" do
      expect(result[:platforms]).to have_key("tic80")
      expect(result[:platforms]["tic80"][:label]).to eq("TIC-80")
      expect(result[:platforms]["tic80"][:kinds]).to include("cartridge", "html")
    end

    it "returns c64 with only cartridge" do
      expect(result[:platforms]["c64"][:kinds]).to eq(["cartridge"])
    end

    it "returns allKinds matching WarpEngine::ReleaseAsset::KINDS" do
      expect(result[:allKinds]).to eq(WarpEngine::ReleaseAsset::KINDS)
    end

    it "includes all supported platforms" do
      WarpEngine::PlatformLink::SUPPORTED_PLATFORMS.each do |platform|
        expect(result[:platforms]).to have_key(platform)
      end
    end
  end

  describe "#show" do
    let!(:software) { create(:software, name: "test-game", platform: "love") }
    let!(:release) { create(:release, software: software, version: "1.0.0") }

    before do
      WarpEngine::ReleaseAsset.create!(release: release, kind: "html", path: "/test/html")
      WarpEngine::ReleaseAsset.create!(release: release, kind: "win_x64", path: "/test/win")
    end

    it "returns expected and actual kinds per release" do
      result = described_class.new.show("test-game")

      expect(result[:platform]).to eq("love")
      expect(result[:expected]).to match_array(%w[html win_x64 linux_x64 mac_universal])
      expect(result[:releases]["1.0.0"][:actual]).to match_array(%w[html win_x64])
      expect(result[:releases]["1.0.0"][:missing]).to match_array(%w[linux_x64 mac_universal])
    end

    it "raises RecordNotFound for unknown software" do
      expect { described_class.new.show("nonexistent") }.to raise_error(ActiveRecord::RecordNotFound)
    end
  end
end
