platform links
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user