# frozen_string_literal: true

require "rails_helper"

RSpec.describe UserBan, type: :model do
  describe "validations" do
    it { should belong_to(:user) }
    it { should belong_to(:banned_by).class_name("User").optional }
  end

  describe "scopes" do
    describe ".current" do
      let(:user) { FactoryBot.create(:user) }
      let!(:current_ban) { UserBan.create(user: user, expires_at: Time.now.utc + 1.day) }
      let!(:expired_ban) { UserBan.create(user: user, expires_at: Time.now.utc - 1.day) }

      it "returns only current bans" do
        expect(UserBan.current).to eq([current_ban])
      end
    end
  end

  describe "#permanent?" do
    let(:user) { FactoryBot.create(:user) }
    let(:ban) { UserBan.create(user: user, expires_at: expires_at) }

    context "ban is permanent" do
      let(:expires_at) { nil }

      it "returns true" do
        expect(ban.permanent?).to eq(true)
      end
    end

    context "ban is not permanent" do
      let(:expires_at) { Time.now.utc + 1.day }

      it "returns false" do
        expect(ban.permanent?).to be false
      end
    end
  end

  describe "#current?" do
    let(:user) { FactoryBot.create(:user) }
    let(:ban) { UserBan.create(user: user, expires_at: expires_at) }

    context "ban is current" do
      let(:expires_at) { Time.now.utc + 1.day }

      it "returns true" do
        expect(ban.current?).to eq(true)
      end
    end

    context "ban is not current" do
      let(:expires_at) { Time.now.utc - 1.day }

      it "returns false" do
        expect(ban.current?).to eq(false)
      end
    end
  end
end