Follow the Brass

spec/case_classifier_spec.rb

32 lines · ruby

Project files
# frozen_string_literal: true

require "case_classifier"
require "cartridge_case"
require "foreign_object"

RSpec.describe CaseClassifier do
  it "separates the observed cleaning output into three exits" do
    five_fifty_six = CartridgeCase.new(caliber: "5.56")
    nine_millimeter = CartridgeCase.new(caliber: "9mm")
    fifty_caliber = CartridgeCase.new(caliber: ".50 cal")
    stripper_clip = ForeignObject.new(description: "stripper clip")

    classification = described_class.new(expected_caliber: "5.56").classify(
      [five_fifty_six, nine_millimeter, fifty_caliber, stripper_clip]
    )

    expect(classification.accepted).to eq([five_fifty_six])
    expect(classification.wrong_context).to eq([nine_millimeter, fifty_caliber])
    expect(classification.foreign).to eq([stripper_clip])
  end

  it "returns frozen exits without freezing the caller's batch" do
    batch = [CartridgeCase.new(caliber: "5.56")]

    classification = described_class.new(expected_caliber: "5.56").classify(batch)

    expect([classification.accepted, classification.wrong_context,
            classification.foreign]).to all(be_frozen)
    expect(batch).not_to be_frozen
  end
end

Read along in the manual: The Reloading Lab · Download the project (zip)