diff --git a/app/models/account/external_id_sequence.rb b/app/models/account/external_id_sequence.rb index 8d9cecf6d..3e76e1e24 100644 --- a/app/models/account/external_id_sequence.rb +++ b/app/models/account/external_id_sequence.rb @@ -8,7 +8,7 @@ class Account::ExternalIdSequence < ApplicationRecord end def value - first&.value + first&.value || self.next end private diff --git a/test/models/account/external_id_sequence_test.rb b/test/models/account/external_id_sequence_test.rb index 0ce72a0a8..e52f3ccc5 100644 --- a/test/models/account/external_id_sequence_test.rb +++ b/test/models/account/external_id_sequence_test.rb @@ -39,4 +39,16 @@ class Account::ExternalIdSequenceTest < ActiveSupport::TestCase assert_equal values.min..values.max, values.sort.first..values.sort.last assert_equal 20, values.max - values.min + 1, "Values should be sequential with no gaps" end + + test "#value creates the first record if it doesn't yet exist" do + assert_nil Account::ExternalIdSequence.first + + value = nil + assert_difference -> { Account::ExternalIdSequence.count }, 1 do + value = Account::ExternalIdSequence.value + end + + assert_not_nil value + assert_equal value, Account::ExternalIdSequence.first.value + end end