Skip to content

Instantly share code, notes, and snippets.

@pivotal-casebook
Last active August 29, 2015 14:27
Show Gist options
  • Save pivotal-casebook/de385d08086b9a94fe41 to your computer and use it in GitHub Desktop.
Save pivotal-casebook/de385d08086b9a94fe41 to your computer and use it in GitHub Desktop.
Refactoring: replace assessment#reopened_at with query via WorkflowEvent.most_recent_reopening #100672128
05b794c 2015-08-13 12:09:32 -0400 Chris Earnhardt and Mitch Saltykov | WIP - Chris stuff!
diff --git a/app/models/assessment.rb b/app/models/assessment.rb
index 00932ca..cfa66e6 100644
--- a/app/models/assessment.rb
+++ b/app/models/assessment.rb
@@ -744,13 +744,18 @@ class Assessment < ActiveRecord::Base
end
def has_been_appended?
- reopened_at?
+ # reopened_at?
+ workflow_events.most_recent_reopening.present?
end
def most_recently_appended_at
reopened_at
end
+ # def reopened_at
+ # workflow_events.most_recent_reopening.try(:created_at)
+ # end
+
# the datetime accepted by supervisor prior to appeal
def approved_at_prior_to_appending
workflow_events.acceptances_before(most_recently_appended_at).first.try(:created_at)
diff --git a/app/models/workflow_event.rb b/app/models/workflow_event.rb
index f9f7e56..d7ccd72 100644
--- a/app/models/workflow_event.rb
+++ b/app/models/workflow_event.rb
@@ -48,6 +48,10 @@ class WorkflowEvent < ActiveRecord::Base
reverse_chronological.endorsed
end
+ def most_recent_reopening
+ reverse_chronological.reopenings.first
+ end
+
def active_return_for_edit
unless reverse_chronological.empty?
record = reverse_chronological.first
diff --git a/spec/models/assessment_spec.rb b/spec/models/assessment_spec.rb
index 3e1dd57..a318bcb 100644
--- a/spec/models/assessment_spec.rb
+++ b/spec/models/assessment_spec.rb
@@ -121,7 +121,8 @@ describe Assessment, :type => :model do
end
describe ":assessment_in_reopened" do
- subject { assessments(:assessment_in_reopened) }
+ before { allow(ApplicationModel).to receive(:current_app_user).and_return(users(:worker_user)) }
+ subject { FactoryGirl.create(:assessment_in_reopened) }
describe '#state' do
subject { super().state }
@@ -2014,7 +2015,8 @@ describe Assessment, :type => :model do
shared_examples_for "a method that returns false when reopened" do
before do
- assessment.update_attributes!(reopened_at: 1.day.ago)
+ assessment.workflow_events.create(action: WorkflowEvent::Action::REOPENED,
+ created_at: 1.day.ago)
expect(assessment).to have_been_appended
end
@@ -3191,8 +3193,9 @@ describe Assessment, :type => :model do
context "when reopened" do
it 'validates allegations have substantiation set' do
- assessment = FactoryGirl.create(:nonsubstantiated_assessment,
- reopened_at: 1.day.ago)
+ assessment = FactoryGirl.create(:nonsubstantiated_assessment)
+ assessment.workflow_events.create(action: WorkflowEvent::Action::REOPENED,
+ created_at: 1.day.ago)
assessment.submitted_to_supervisor_review = true
expect(assessment).to_not receive(:validate_submit_to_supervisor_review)
expect(assessment.send(:primary_validator)).to receive(:validate_allegations_have_substantiation_set)
diff --git a/spec/models/workflow_event_spec.rb b/spec/models/workflow_event_spec.rb
expect(assessment).to_not receive(:validate_submit_to_supervisor_review)
expect(assessment.send(:primary_validator)).to receive(:validate_allegations_have_substantiation_set)
diff --git a/spec/models/workflow_event_spec.rb b/spec/models/workflow_event_spec.rb
index 538f44e..95798ea 100644
--- a/spec/models/workflow_event_spec.rb
+++ b/spec/models/workflow_event_spec.rb
@@ -250,6 +250,47 @@ describe WorkflowEvent, :type => :model do
end
end
+ describe '.most_recent_reopening' do
+ before do
+ WorkflowEvent.destroy_all
+ end
+
+ context 'when there are reopenings' do
+ context "has only a single reopened event" do
+ it 'returns the reopened workflow event' do
+ july_10_reopened_event = WorkflowEvent.create!(action: WorkflowEvent::Action::REOPENED,
+ model_with_workflow: assessments(:assessment),
+ created_at: Time.parse("July 10, 2011"))
+
+ expect(WorkflowEvent.most_recent_reopening).to eq(july_10_reopened_event)
+ end
+ end
+
+ context "has multiple reopened workflow events" do
+ it 'returns the most recent reopened event' do
+ WorkflowEvent.create!(action: WorkflowEvent::Action::REOPENED,
+ model_with_workflow: assessments(:assessment),
+ created_at: Time.parse("July 10, 2011"))
+
+ july_20_reopened_event = WorkflowEvent.create!(action: WorkflowEvent::Action::REOPENED,
+ model_with_workflow: assessments(:assessment),
+ created_at: Time.parse("July 20, 2011"))
+
+ WorkflowEvent.create!(action: WorkflowEvent::Action::REOPENED,
+ model_with_workflow: assessments(:assessment),
+ created_at: Time.parse("July 19, 2011"))
+ expect(WorkflowEvent.most_recent_reopening).to eq(july_20_reopened_event)
+ end
+ end
+ end
+
+ context "when there are no reopened events" do
+ it 'returns nil' do
+ expect(WorkflowEvent.most_recent_reopening).to be_nil
+ end
+ end
+ end
+
describe ".active_return_for_edit" do
subject { WorkflowEvent.active_return_for_edit }
(END)
index 538f44e..95798ea 100644
--- a/spec/models/workflow_event_spec.rb
+++ b/spec/models/workflow_event_spec.rb
@@ -250,6 +250,47 @@ describe WorkflowEvent, :type => :model do
end
end
+ describe '.most_recent_reopening' do
+ before do
+ WorkflowEvent.destroy_all
+ end
+
+ context 'when there are reopenings' do
+ context "has only a single reopened event" do
+ it 'returns the reopened workflow event' do
+ july_10_reopened_event = WorkflowEvent.create!(action: WorkflowEvent::Action::REOPENED,
+ model_with_workflow: assessments(:assessment),
+ created_at: Time.parse("July 10, 2011"))
+
+ expect(WorkflowEvent.most_recent_reopening).to eq(july_10_reopened_event)
+ end
+ end
+
+ context "has multiple reopened workflow events" do
+ it 'returns the most recent reopened event' do
+ WorkflowEvent.create!(action: WorkflowEvent::Action::REOPENED,
+ model_with_workflow: assessments(:assessment),
+ created_at: Time.parse("July 10, 2011"))
+
+ july_20_reopened_event = WorkflowEvent.create!(action: WorkflowEvent::Action::REOPENED,
+ model_with_workflow: assessments(:assessment),
+ created_at: Time.parse("July 20, 2011"))
+
+ WorkflowEvent.create!(action: WorkflowEvent::Action::REOPENED,
+ model_with_workflow: assessments(:assessment),
+ created_at: Time.parse("July 19, 2011"))
+ expect(WorkflowEvent.most_recent_reopening).to eq(july_20_reopened_event)
+ end
+ end
+ end
+
+ context "when there are no reopened events" do
+ it 'returns nil' do
+ expect(WorkflowEvent.most_recent_reopening).to be_nil
+ end
+ end
+ end
+
describe ".active_return_for_edit" do
subject { WorkflowEvent.active_return_for_edit }
(END)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment