platform links

This commit is contained in:
2026-08-04 10:49:02 +02:00
parent ddab4b9ff5
commit 46c51bb317
11 changed files with 174 additions and 0 deletions
@@ -0,0 +1,8 @@
FactoryBot.define do
factory :platform_link do
sequence(:name) { |n| "Link #{n}" }
platform { "tic80" }
url { "https://example.com/link" }
position { 0 }
end
end
@@ -0,0 +1,52 @@
require "rails_helper"
RSpec.describe PlatformLink, type: :model do
describe "validations" do
it { should validate_presence_of(:name) }
it { should validate_presence_of(:url) }
it { should validate_presence_of(:platform) }
it "rejects invalid platform" do
link = build(:platform_link, platform: "invalid")
expect(link).not_to be_valid
expect(link.errors[:platform]).to be_present
end
it "accepts valid platforms" do
PlatformLink::SUPPORTED_PLATFORMS.each do |p|
link = build(:platform_link, platform: p)
expect(link).to be_valid
end
end
end
describe "default scope" do
it "excludes soft-deleted records" do
active = create(:platform_link)
create(:platform_link, deleted_at: Time.current)
expect(PlatformLink.all).to eq([active])
end
it "orders by position" do
second = create(:platform_link, position: 2)
first = create(:platform_link, position: 1)
expect(PlatformLink.all).to eq([first, second])
end
end
describe ".for_platform" do
it "returns links for given platform only" do
tic80_link = create(:platform_link, platform: "tic80")
create(:platform_link, platform: "love")
result = PlatformLink.for_platform("tic80")
expect(result).to eq([tic80_link])
end
it "returns empty array for platform without links" do
expect(PlatformLink.for_platform("godot")).to eq([])
end
end
end