• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pulibrary / tigerdata-app / 700664ce-9925-405e-8380-cada5d7c2e48

07 Nov 2025 06:12PM UTC coverage: 91.229% (-0.1%) from 91.357%
700664ce-9925-405e-8380-cada5d7c2e48

Pull #2168

circleci

bess
Refactoring to allow easier integration of the new LUX widget
The lux widget takes the name of the routine to call when the input changes.  Making the url integrated with the page will allow us to more easily call the lookup routine

refs #2083
Pull Request #2168: Refactoring to allow easier integration of the new LUX widget

2850 of 3124 relevant lines covered (91.23%)

538.43 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.75
/app/operations/project_create.rb
1
# frozen_string_literal: true
2
class ProjectCreate < Dry::Operation
5✔
3
  class ProjectCreateError < StandardError; end
5✔
4

5
  def call(request:, approver:)
5✔
6
    project = step create_project_from_request(request)
290✔
7
    mediaflux_id = step persist_in_mediaflux(project, approver)
288✔
8
    step update_project_with_mediaflux_info(mediaflux_id:, project:)
285✔
9
    step persist_users_in_mediaflux(project, approver)
284✔
10
    step activate_project(project, approver)
284✔
11
  end
12

13
  private
5✔
14
    def create_project_from_request(request)
5✔
15
      # Create the project in the Rails database
16
      project_metadata_json = RequestProjectMetadata.convert(request)
290✔
17
      # Link the request to the project
18
      project = Project.create!({ metadata_json: project_metadata_json })
290✔
19
      request.project_id = project.id
289✔
20
      project.draft_doi
289✔
21
      project.save!
288✔
22

23
      # Return Success(attrs) or Failure(error)
24
      Success project
288✔
25
    rescue => ex
26
      Failure("Error creating the project: #{ex}")
2✔
27
    end
28

29
    def persist_in_mediaflux(project, current_user)
5✔
30
      # Create the project in Mediaflux
31
      mediaflux_request = Mediaflux::ProjectCreateServiceRequest.new(session_token: current_user.mediaflux_session, project: project)
288✔
32
      mediaflux_request.resolve
288✔
33

34
      mediaflux_id = mediaflux_request.mediaflux_id
288✔
35

36
      if mediaflux_id.to_i == 0
288✔
37
        debug_output = "Error saving project #{project.id} to Mediaflux: #{mediaflux_request.response_error}. Debug output: #{mediaflux_request.debug_output}"
3✔
38
        Rails.logger.error debug_output
3✔
39
        Failure debug_output
3✔
40
      else
41
        ProvenanceEvent.generate_approval_events(project: project, user: current_user, debug_output: mediaflux_request.debug_output.to_s)
285✔
42
        Success(mediaflux_id)
285✔
43
      end
44
    # TODO:  What kind of error are we expecting here?  This will capture the session errors, but maybe we should not be doing this.
45
    #        I could not figure out a way in tests to hit this error...
46
    rescue => ex
47
      Failure("Error saving project #{project.id} to Mediaflux: #{ex}")
×
48
    end
49

50
    def update_project_with_mediaflux_info(mediaflux_id:, project:)
5✔
51
      project.mediaflux_id = mediaflux_id
285✔
52
      project.metadata_model.status = Project::APPROVED_STATUS
284✔
53
      project.save!
284✔
54
      Success(project)
284✔
55
    rescue => ex
56
      # TODO: It was saved in mediaflux, so maybe a retry here?  I don't want to destroy the project
57
      Failure("Setting the mediaflux id the project(#{project.id}) : #{ex}")
1✔
58
    end
59

60
    def persist_users_in_mediaflux(project, current_user)
5✔
61
      # Do nothing if there are no users to persist
62
      return Success(project) if (project.metadata_model.ro_users + project.metadata_model.rw_users).empty?
284✔
63

64
      # Add the data users to the project in Mediaflux
65
      add_users_request = Mediaflux::ProjectUserAddRequest.new(session_token: current_user.mediaflux_session, project: project)
38✔
66
      add_users_request.resolve
38✔
67

68
      if add_users_request.error?
38✔
69
        # TODO: what should we do with the project in this case?  It got all the way to mediaflux, but the users were not added
70
        Failure("Error adding users to mediaflux project #{project.mediaflux_id} #{add_users_request.response_error}")
×
71
      else
72
        user_debug = add_users_request.debug_output.to_s
38✔
73
        Rails.logger.debug { "Project #{project.id} users have been added to MediaFlux: #{user_debug}" }
76✔
74
        Success project
38✔
75
      end
76
    # TODO:  What kind of error are we expecting here?  This will capture the session errors, but maybe we should not be doing this.
77
    #        I could not figure out a way in tests to hit this error...
78
    rescue => ex
79
      Failure("Exception adding users to mediaflux project #{project.mediaflux_id}: #{ex}")
×
80
    end
81

82
    def activate_project(project, approver)
5✔
83
      project.activate(current_user: approver)
284✔
84
      Success(project)
283✔
85
    rescue => ex
86
      Failure("Error activate project #{project.id}: #{ex}")
1✔
87
    end
88
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc