require 'spec_helper'

describe "Cistern::Collection" do
  class SampleCollectionModel < Cistern::Model
    identity :id
    attribute :name
  end
  class SampleCollection < Cistern::Collection
    model SampleCollectionModel

    def all
      self.load([{id: 1}, {id: 3, name: "tom"}, {id: 2}])
    end
  end

  it "should give to_s" do
    collection = SampleCollection.new
    expect(collection.to_s).not_to eq "[]"
    expect(collection.to_s.gsub(/:[^>]*/,'')).to eq(collection.all.to_s.gsub(/:[^>]*/,''))
  end

  it "should give size and count" do
    expect(SampleCollection.new.size).to eq(3)
    expect(SampleCollection.new.count).to eq(3)
  end

  it "should give first" do
    expect(SampleCollection.new.first).to eq(SampleCollectionModel.new(id: 1))
  end

  it "should give last" do
    expect(SampleCollection.new.last).to eq(SampleCollectionModel.new(id: 2))
  end

  it "should reject" do
    expect(SampleCollection.new.reject{|m| m.id == 2}).to eq([SampleCollectionModel.new(id: 1), SampleCollectionModel.new(id: 3)])
  end

  it "should select" do
    expect(SampleCollection.new.select{|m| m.id == 2}).to eq([SampleCollectionModel.new(id: 2)])
  end

  it "should slice" do
    expect(SampleCollection.new.slice(0,2)).to eq([SampleCollectionModel.new(id: 1), SampleCollectionModel.new(id: 3, name: "tom")])
  end

  it "should ==" do
    SampleCollection.new.all == SampleCollection.new.all
  end
end
