From c985ce8ba40ec7f5357ab5042dec28968bee655d Mon Sep 17 00:00:00 2001 From: Mason Ballengee Date: Mon, 7 Oct 2024 15:42:43 -0400 Subject: [PATCH] Prevent bad encode status from breaking encode record pages --- app/controllers/encode_records_controller.rb | 4 +-- app/presenters/encode_presenter.rb | 2 +- .../encode_records_controller_spec.rb | 32 ++++++++++++++++++- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/app/controllers/encode_records_controller.rb b/app/controllers/encode_records_controller.rb index 263c81d1d3..a7e5646913 100644 --- a/app/controllers/encode_records_controller.rb +++ b/app/controllers/encode_records_controller.rb @@ -71,7 +71,7 @@ def paged_index "recordsFiltered": filtered_records_total, "data": @encode_records.collect do |encode| encode_presenter = EncodePresenter.new(encode) - encode_status = encode_presenter.status.downcase + encode_status = encode_presenter.status&.downcase unless encode_status == 'completed' progress_class = 'progress-bar-striped' end @@ -117,7 +117,7 @@ def set_encode_record def format_progress(presenter) # Set progress = 100.0 when job failed - if presenter.status.casecmp("failed") == 0 + if presenter.status&.casecmp("failed") == 0 100.0 else presenter.progress diff --git a/app/presenters/encode_presenter.rb b/app/presenters/encode_presenter.rb index 96b85b9953..37b78b8220 100644 --- a/app/presenters/encode_presenter.rb +++ b/app/presenters/encode_presenter.rb @@ -29,7 +29,7 @@ def initialize(encode_record) delegate :id, :adapter, :display_title, :master_file_id, :media_object_id, :created_at, :progress, to: :encode_record def status - @encode_record.state.capitalize + @encode_record.state&.capitalize end def global_id diff --git a/spec/controllers/encode_records_controller_spec.rb b/spec/controllers/encode_records_controller_spec.rb index 1122f54a03..a7c04d04c8 100644 --- a/spec/controllers/encode_records_controller_spec.rb +++ b/spec/controllers/encode_records_controller_spec.rb @@ -63,6 +63,14 @@ expect(response).to render_template('errors/restricted_pid') end end + + context "when state is nil" do + let(:encode_record_test) { FactoryBot.create(:encode_record, state: nil) } + it "returns a success response" do + get :index, params: {}, session: valid_session + expect(response).to be_successful + end + end end describe "GET #show" do @@ -75,10 +83,18 @@ let(:user) { FactoryBot.create(:user) } it "redirects to restricted content page" do - get :index, params: {}, session: valid_session + get :show, params: { id: encode_record_test.to_param }, session: valid_session expect(response).to render_template('errors/restricted_pid') end end + + context "when state is nil" do + let(:encode_record_test) { FactoryBot.create(:encode_record, state: nil) } + it "returns a success response" do + get :show, params: { id: encode_record_test.to_param }, session: valid_session + expect(response).to be_successful + end + end end describe "POST #paged_index" do @@ -134,6 +150,20 @@ expect(parsed_response['data'][1][3]).to eq('Title 997') end end + + context "when state is nil" do + let(:params) { { start: 0, length: 20, order: { '0': { column: 3, dir: 'asc' } }, search: { value: '' } } } + before do + FactoryBot.create(:encode_record, state: nil) + end + + it "returns a success response" do + post :paged_index, format: 'json', params: params, session: valid_session + expect(response).to be_successful + parsed_response = JSON.parse(response.body) + expect(parsed_response['recordsTotal']).to eq(12) + end + end end describe "POST #progress" do