spec/follow_the_brass_spec.rb
51 lines · ruby
Project files
# frozen_string_literal: true
require "caliber_specification"
require "cartridge_case"
require "case_classifier"
require "foreign_object"
require "production_readiness_gate"
RSpec.describe "Follow the brass" do
it "moves a mixed batch through classification and readiness without merging exits" do
ready_case = cartridge_case
unsized_case = cartridge_case(sized: false)
nine_millimeter = CartridgeCase.new(caliber: "9mm")
fifty_caliber = CartridgeCase.new(caliber: ".50 cal")
stripper_clip = ForeignObject.new(description: "stripper clip")
cleaning_output = [
ready_case, unsized_case, nine_millimeter, fifty_caliber, stripper_clip
]
classification = classifier.classify(cleaning_output)
admissions = classification.accepted.to_h { |item| [item, gate.assess(item)] }
expect(admissions.select { |_item, result| result.admitted? }.keys).to eq([ready_case])
expect(admissions.fetch(unsized_case).reasons).to eq([:unsized])
expect(classification.wrong_context).to eq([nine_millimeter, fifty_caliber])
expect(classification.foreign).to eq([stripper_clip])
end
def classifier
CaseClassifier.new(expected_caliber: "5.56")
end
def gate
ProductionReadinessGate.new(caliber_specification: specification)
end
def specification
CaliberSpecification.new(caliber: "5.56", maximum_case_length: 1.760)
end
def cartridge_case(overrides = {})
CartridgeCase.new(**readiness_facts.merge(overrides))
end
def readiness_facts
{
caliber: "5.56", clean: true, primer_pocket_clear: true,
primer_pocket_prepared: true, sized: true, length: 1.750, defects: []
}
end
end
Read along in the manual: The Reloading Lab · Download the project (zip)