Sha256: 1c9e55db4e28e99c63ca24695f41404ad2d8ec5d9700fb8902f95c71ccb27a0e

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

require "spec_helper"
require "hamster/list"

describe Hamster::List do
  let(:list) { Hamster.list(*values) }
  let(:filtered_list) { Hamster.list(*filtered_values) }

  describe "#filter" do
    it "is lazy" do
      expect { Hamster.stream { fail }.filter { |item| false } }.to_not raise_error
    end

    shared_examples "checking values" do
      context "with a block" do
        let(:filter) { list.filter { |item| item == item.upcase } }

        it "preserves the original" do
          expect(list).to eq(Hamster.list(*values))
        end

        it "returns the filtered list" do
          expect(filter).to eq(filtered_list)
        end
      end

      context "without a block" do
        let(:filter) { list.filter }

        it "returns itself" do
          expect(filter).to eq(list)
        end
      end
    end

    context "with an empty array" do
      let(:values) { [] }
      let(:filtered_values) { [] }

      include_examples "checking values"
    end

    context "with a single item array" do
      let(:values) { ["A"] }
      let(:filtered_values) { ["A"] }

      include_examples "checking values"
    end

    context "with a multi-item array" do
      let(:values) { %w[A B] }
      let(:filtered_values) { %w[A B] }

      include_examples "checking values"
    end

    context "with a multi-item single filterable array" do
      let(:values) { %w[A b] }
      let(:filtered_values) { ["A"] }

      include_examples "checking values"
    end

    context "with a multi-item multi-filterable array" do
      let(:values) { %w[a b] }
      let(:filtered_values) { [] }

      include_examples "checking values"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hamster-1.0.1.pre.rc2 spec/hamster/list/filter_spec.rb
hamster-1.0.1.pre.rc.1 spec/hamster/list/filter_spec.rb