diff --git a/app/models/edition.rb b/app/models/edition.rb index a3e3d08beb4..fad84b90364 100644 --- a/app/models/edition.rb +++ b/app/models/edition.rb @@ -348,9 +348,11 @@ def can_set_previously_published? end def government - return @government ||= Government.find(government_id) if government_id.present? - - @government ||= Government.on_date(date_for_government) unless date_for_government.nil? + if government_id.present? + Government.find(government_id) + elsif date_for_government.present? + Government.on_date(date_for_government) + end end def search_government_name diff --git a/test/unit/app/models/edition_test.rb b/test/unit/app/models/edition_test.rb index e19e6e5c1cc..cb8f09e38df 100644 --- a/test/unit/app/models/edition_test.rb +++ b/test/unit/app/models/edition_test.rb @@ -806,6 +806,18 @@ class EditionTest < ActiveSupport::TestCase assert_equal previous_government, edition.government end + test "instantiated edition fetches its most up to date #government association" do + current_government = create(:current_government) + previous_government = create(:previous_government) + edition = create(:edition, first_published_at: Time.zone.now, government_id: previous_government.id) + assert_equal previous_government, edition.government + # at this point, edition.government == previous_government + # But if the user updates the association to a different government, we don't want the old one to be returned + edition.government_id = current_government.id + edition.save + assert_equal current_government, edition.government + end + test "#government returns the current government for a newly published edition" do government = create(:current_government) edition = create(:edition, first_published_at: Time.zone.now)