Skip to content

Commit 9dacfbc

Browse files
authored
Merge pull request #80 from yokenzan/fix/master-handler-nil-version
fix: MasterHandler#prepare に nil バージョンチェックを追加
2 parents 30f0e88 + 0839407 commit 9dacfbc

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

lib/receiptisan/model/receipt_computer/digitalized_receipt/parser/master_handler.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ def initialize(master_loader)
2626
# @return [void]
2727
def prepare(shinryou_ym)
2828
version = Master::Version.resolve_by_ym(shinryou_ym)
29+
raise "対応するマスターバージョンが見つかりません: 診療年月=#{shinryou_ym}" unless version
30+
2931
@loaded_masters[version] ||= @master_loader.load(version)
3032
@current_master = @loaded_masters[version]
3133
end
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# frozen_string_literal: true
2+
3+
require 'month'
4+
require 'receiptisan'
5+
6+
RSpec.describe Receiptisan::Model::ReceiptComputer::DigitalizedReceipt::Parser::MasterHandler do
7+
let(:master_loader) { instance_double(Receiptisan::Model::ReceiptComputer::Master::Loader) }
8+
let(:handler) { described_class.new(master_loader) }
9+
10+
describe '#prepare' do
11+
context '対応するバージョンが存在する診療年月の場合' do
12+
let(:loaded_master) { instance_double(Receiptisan::Model::ReceiptComputer::Master) }
13+
14+
before do
15+
allow(master_loader).to receive(:load).and_return(loaded_master)
16+
end
17+
18+
specify '例外を投げないこと' do
19+
expect { handler.prepare(Month.new(2024, 6)) }.not_to raise_error
20+
end
21+
22+
specify '同一バージョンのマスタは再ロードしないこと' do
23+
handler.prepare(Month.new(2024, 6))
24+
handler.prepare(Month.new(2024, 7))
25+
26+
expect(master_loader).to have_received(:load).once
27+
end
28+
end
29+
30+
context '対応するバージョンが存在しない診療年月の場合' do
31+
specify '明確なエラーメッセージで例外を投げること' do
32+
expect { handler.prepare(Month.new(2017, 3)) }.to raise_error(RuntimeError, /対応するマスターバージョンが見つかりません/)
33+
end
34+
35+
specify 'エラーメッセージに診療年月が含まれること' do
36+
expect { handler.prepare(Month.new(2017, 3)) }.to raise_error(RuntimeError, /2017/)
37+
end
38+
end
39+
end
40+
end

0 commit comments

Comments
 (0)