# == Schema Information
#
# Table name: servers
#
#  id              :integer          not null, primary key
#  name            :string(255)
#  description     :string(255)
#  dns             :string(255)
#  ip              :string(255)
#  port            :string(255)
#  password        :string(255)
#  irc             :string(255)
#  user_id         :integer
#  official        :boolean
#  created_at      :datetime
#  updated_at      :datetime
#  map             :string(255)
#  players         :integer
#  max_players     :integer
#  ping            :string(255)
#  version         :integer
#  domain          :integer          default(0), not null
#  reservation     :string(255)
#  recording       :string(255)
#  idle            :datetime
#  default_id      :integer
#  active          :boolean          default(TRUE), not null
#  recordable_type :string(255)
#  recordable_id   :integer
#  category_id     :integer
#

require "spec_helper"

describe Server do
  describe "create" do
    it "sets category to 45 if domain is NS2" do
      server = create :server, domain: Server::DOMAIN_NS2

      expect(server.category_id).to eq(45)
    end

    it "sets category to 44 if domain is not NS2" do
      server = create :server, domain: Server::DOMAIN_HLDS

      expect(server.category_id).to eq(44)
    end
  end

  describe "addr" do
    it "returns properly formatted IP and port number" do
      ip = "1.1.1.1"
      port = "8000"
      server = create :server, ip: ip, port: port

      expect(server.addr).to eq("1.1.1.1:8000")
    end
  end

  describe "to_s" do
    it "returns server name" do
      server_name = "Foo"
      server = create :server, name: server_name

      expect(server.to_s).to eq(server_name)
    end
  end

  describe "Permissions" do
    let!(:user) { create :user }
    let!(:admin) { create :user, :admin }
    let!(:server_user) { create :user }
    let!(:server) { create :server, user: server_user }

    describe "can_create?" do
      it "returns true for non-admins" do
        expect(server.can_create? user).to be_truthy
      end
    end

    describe "can_destroy?" do
      it "returns true for admin" do
        expect(server.can_destroy? admin).to eq(true)
      end

      it "returns false for non-admins" do
        expect(server.can_destroy? user).to eq(false)
      end
    end

    describe "can_update?" do
      it "returns true for admin" do
        expect(server.can_update? admin).to eq(true)
      end

      it "returns true if server belongs to user" do
        expect(server.can_update? server_user).to eq(true)
      end

      it "returns false for non-admins" do
        expect(server.can_update? user).to eq(false)
      end
    end
  end
end