Skip to content

Commit 78f796b

Browse files
authored
Better handling for Mediaflux XML error responses (#1754)
* Better handling for Mediaflux XML error responses * Mark a couple of tests as integration
1 parent cb0ee20 commit 78f796b

File tree

4 files changed

+23
-3
lines changed

4 files changed

+23
-3
lines changed

app/controllers/projects_controller.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ def show_mediaflux
152152
end
153153
end
154154
end
155+
rescue => ex
156+
Rails.logger.error "Error getting MediaFlux XML for project #{project_id}, user #{current_user.uid}: #{ex.message}"
157+
flash[:alert] = "Error fetching Mediaflux XML for this project"
158+
redirect_to project_path(project_id)
155159
end
156160

157161
def project_job_service

app/models/project_mediaflux.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ class ProjectMediaflux
1010
def self.xml_payload(project:, user:, xml_namespace: nil)
1111
request = Mediaflux::AssetMetadataRequest.new(session_token: user.mediaflux_session, id: project.mediaflux_id)
1212
request.resolve
13+
if request.error?
14+
raise request.response_error[:message]
15+
end
1316
request.response_body
1417
end
1518

spec/models/project_mediaflux_spec.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,11 @@
9696
expect(project.metadata_model.updated_by).to eq "user123"
9797
end
9898
end
99+
100+
describe "#xml_payload" do
101+
it "raises errors when project is not accessible", :integration do
102+
# The project is not in mediaflux and therefore this will raise an exception
103+
expect { described_class.xml_payload(project: project, user: current_user) }.to raise_error(StandardError)
104+
end
105+
end
99106
end

spec/requests/projects_spec.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,20 +156,26 @@
156156
end
157157

158158
describe "GET /projects/:id/:id-mf" do
159-
let(:data_manager) { FactoryBot.create(:user, mediaflux_session: SystemUser.mediaflux_session) }
159+
let(:data_manager) { FactoryBot.create(:user, uid: "hc8719", mediaflux_session: SystemUser.mediaflux_session) }
160160
let(:project) { FactoryBot.create(:approved_project, data_manager: data_manager.uid) }
161161

162162
context "when the user is authenticated" do
163163
before do
164+
project.approve!(current_user: sponsor_and_data_manager_user)
164165
sign_in data_manager
165166
end
166167

167-
it "provides the xml metadata for a project" do
168-
# project/12.xml
168+
it "provides the xml metadata for a project", :integration do
169169
get project_show_mediaflux_url(project), params: { format: :xml }
170170
expect(response.code).to eq "200"
171171
expect(response.content_type).to match "xml"
172172
end
173+
174+
it "redirect to the project page when there is an error", :integration do
175+
# Go to a non-existing project to force an error
176+
get project_show_mediaflux_url("non-existing"), params: { format: :xml }
177+
expect(response.code).to eq "302"
178+
end
173179
end
174180
end
175181
end

0 commit comments

Comments
 (0)