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

pulibrary / tigerdata-app / 8d70f2ab-acc5-4aab-b64b-743d66ddd2eb

29 Aug 2025 06:22PM UTC coverage: 87.983% (-0.1%) from 88.118%
8d70f2ab-acc5-4aab-b64b-743d66ddd2eb

Pull #1801

circleci

JaymeeH
Merge branch '1586-request-mailer' of https://github.com/pulibrary/tiger-data-app into 1586-request-mailer
Pull Request #1801: 1586 request mailer

10 of 10 new or added lines in 2 files covered. (100.0%)

1173 existing lines in 56 files now uncovered.

2482 of 2821 relevant lines covered (87.98%)

317.98 hits per line

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

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

5
  # TODO: Remove the optional project parameter once https://github.com/pulibrary/tigerdata-app/issues/1707
6
  # has been completed. In practice the project is always created from the request.
7
  def call(request:, approver:, project: nil)
2✔
8
    if project.nil?
78✔
UNCOV
9
      project = step create_project_from_request(request)
10✔
10
    end
11
    mediaflux_id = step persist_in_mediaflux(project, approver)
77✔
12
    step update_project_with_mediaflux_info(mediaflux_id:, project:)
73✔
13
    step persist_users_in_mediaflux(project, approver)
72✔
14
    step activate_project(project, approver)
72✔
15
  end
16

17
  private
2✔
18
    def create_project_from_request(request)
2✔
19
      # Create the project in the Rails database
UNCOV
20
      project_metadata_json = RequestProjectMetadata.convert(request)
10✔
UNCOV
21
      project = Project.create!({ metadata_json: project_metadata_json })
10✔
UNCOV
22
      project.draft_doi
10✔
UNCOV
23
      project.save!
9✔
24

25
      # Return Success(attrs) or Failure(error)
UNCOV
26
      Success project
9✔
27
    rescue => ex
UNCOV
28
      Failure("Error creating the project: #{ex}")
1✔
29
    end
30

31
    def persist_in_mediaflux(project, current_user)
2✔
32
      # Create the project in Mediaflux
33
      mediaflux_request = Mediaflux::ProjectCreateServiceRequest.new(session_token: current_user.mediaflux_session, project: project)
77✔
34
      mediaflux_request.resolve
77✔
35

36
      mediaflux_id = mediaflux_request.mediaflux_id
77✔
37

38
      if mediaflux_id.to_i == 0
77✔
UNCOV
39
        debug_output = "Error saving project #{project.id} to Mediaflux: #{mediaflux_request.response_error}. Debug output: #{mediaflux_request.debug_output}"
4✔
UNCOV
40
        Rails.logger.error debug_output
4✔
41

42
        # we do not want unsaved projects just hanging around
UNCOV
43
        project.destroy!
4✔
UNCOV
44
        Failure debug_output
4✔
45
      else
46
        ProvenanceEvent.generate_approval_events(project: project, user: current_user, debug_output: mediaflux_request.debug_output.to_s)
73✔
47
        Success(mediaflux_id)
73✔
48
      end
49
    rescue => ex
50
      Failure("Error saving project #{project.id} to Mediaflux: #{ex}")
×
51
    end
52

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

63
    def persist_users_in_mediaflux(project, current_user)
2✔
64
      # Do nothing if there are no users to persist
65
      return Success(project) if (project.metadata_model.ro_users + project.metadata_model.rw_users).empty?
72✔
66

67
      # Add the data users to the project in Mediaflux
68
      add_users_request = Mediaflux::ProjectUserAddRequest.new(session_token: current_user.mediaflux_session, project: project)
5✔
69
      add_users_request.resolve
5✔
70

71
      if add_users_request.error?
5✔
72
        # TODO: what should we do with the project in this case?  It got all the way to mediaflux, but the users were not added
73
        Failure("Error adding users to mediaflux project #{project.mediaflux_id} #{add_users_request.response_error}")
×
74
      else
75
        user_debug = add_users_request.debug_output.to_s
5✔
76
        Rails.logger.debug { "Project #{project.id} users have been added to MediaFlux: #{user_debug}" }
10✔
77
        Success project
5✔
78
      end
79
    rescue => ex
80
      Failure("Exception adding users to mediaflux project #{project.mediaflux_id}: #{ex}")
×
81
    end
82

83
    def activate_project(project, approver)
2✔
84
      project.activate(current_user: approver)
72✔
85
      Success(project)
72✔
86
    rescue => ex
87
      Failure("Error activate project #{project.id}: #{ex}")
×
88
    end
89
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