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

pulibrary / tigerdata-app / cb070c40-f3bf-46fe-9025-2dd3f0aa7761

30 Jul 2025 06:02PM UTC coverage: 75.625% (+0.2%) from 75.423%
cb070c40-f3bf-46fe-9025-2dd3f0aa7761

push

circleci

web-flow
Removed old project create workflow (#1664)

* Removed old project create workflow

* Removed a couple of commented routes

* Adjusted commented code

1 of 1 new or added line in 1 file covered. (100.0%)

5 existing lines in 2 files now uncovered.

2240 of 2962 relevant lines covered (75.62%)

316.16 hits per line

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

82.58
/app/controllers/projects_controller.rb
1
# frozen_string_literal: true
2
class ProjectsController < ApplicationController
1✔
3

4
  before_action :set_breadcrumbs
1✔
5
  before_action :authenticate_user!
1✔
6

7
  def project_params
1✔
UNCOV
8
    params.dup
×
9
  end
10

11
  def details
1✔
12
    return if project.blank?
19✔
13

14
    add_breadcrumb(project.title, project_path)
18✔
15
    add_breadcrumb("Details")
18✔
16

17
    @departments = project.departments.join(", ")
18✔
18
    @project_metadata = project.metadata_model
18✔
19

20
    @data_sponsor = User.find_by(uid: @project_metadata.data_sponsor)
18✔
21
    @data_manager = User.find_by(uid: @project_metadata.data_manager)
18✔
22

23
    read_only_uids = @project_metadata.ro_users
18✔
24
    data_read_only_users = read_only_uids.map { |uid| ReadOnlyUser.find_by(uid:) }.reject(&:blank?)
28✔
25

26
    read_write_uids = @project_metadata.rw_users
18✔
27
    data_read_write_users = read_write_uids.map { |uid| User.find_by(uid:) }.reject(&:blank?)
26✔
28

29
    unsorted_data_users = data_read_only_users + data_read_write_users
18✔
30
    sorted_data_users = unsorted_data_users.sort_by { |u| u.family_name || u.uid }
36✔
31
    @data_users = sorted_data_users.uniq { |u| u.uid }
34✔
32
    user_model_names = @data_users.map(&:display_name_safe)
18✔
33
    @data_user_names = user_model_names.join(", ")
18✔
34

35
    @provenance_events = project.provenance_events.where.not(event_type: ProvenanceEvent::STATUS_UPDATE_EVENT_TYPE)
18✔
36

37
    @project_eligible_to_edit = true if project.status == Project::APPROVED_STATUS && eligible_editor?
18✔
38

39
    @project_metadata = @project.metadata
18✔
40
    @project_id = @project_metadata[:project_id] || {}
18✔
41
    @storage_capacity = @project_metadata[:storage_capacity]
18✔
42
    @size = @storage_capacity[:size]
18✔
43
    @unit = @storage_capacity[:unit]
18✔
44

45
    @requested_size = @size[:requested]
18✔
46
    @requested_unit = @unit[:requested]
18✔
47

48
    @approved_size = @size[:approved]
18✔
49
    @approved_unit = @unit[:approved]
18✔
50

51
    @storage_expectations = @project_metadata[:storage_performance_expectations]
18✔
52
    @requested_storage_expectations = @storage_expectations[:requested]
18✔
53
    @approved_storage_expectations = @storage_expectations[:approved]
18✔
54

55
    @project_purpose = @project_metadata[:project_purpose]
18✔
56

57

58
    @project_session = "details"
18✔
59

60
    respond_to do |format|
18✔
61
      format.html do
18✔
62
        @project = ProjectShowPresenter.new(project)
16✔
63
      end
64
      format.json do
18✔
65
        render json: project.to_json
2✔
66
      end
67
      format.xml do
18✔
68
        render xml: project.to_xml
×
69
      end
70
    end
71
  end
72

73
  def edit
1✔
74
    add_breadcrumb(project.title, project_path)
14✔
75
    add_breadcrumb("Edit")
14✔
76
    project
14✔
77
    if project.metadata_model.status != Project::APPROVED_STATUS
14✔
78
      flash[:notice] = "Pending projects can not be edited."
1✔
79
      redirect_to project
1✔
80
    elsif project.metadata_model.status == Project::APPROVED_STATUS && !eligible_editor? #check if the current user is a sponsor or a manager
13✔
81
      flash[:notice] = "Only data sponsors and data managers can revise this project."
2✔
82
      redirect_to project
2✔
83
    end
84
  end
85

86
  def update
1✔
87
    @project = Project.find(params[:id])
4✔
88

89
    #Edit action
90
    if params.key?("title")
4✔
91
      @project.metadata_model.status = @project.metadata_model.status || Project::PENDING_STATUS
4✔
92
      @project.metadata_model.update_with_params(params, current_user)
4✔
93
    end
94

95
    # @todo ProjectMetadata should be refactored to implement ProjectMetadata.valid?(updated_metadata)
96
    if project.save and params.key?("title")
4✔
97
      redirect_to project_revision_confirmation_path(@project)
4✔
98
    else
99
      render :edit
×
100
    end
101
  end
102

103
  def index
1✔
104
    if current_user.eligible_sysadmin?
5✔
105
      @projects = Project.all
1✔
106
    else
107
      flash[:alert] = I18n.t(:access_denied)
4✔
108
      redirect_to dashboard_path
4✔
109
    end
110
  end
111

112
  def confirmation; end
1✔
113
  def revision_confirmation; end
1✔
114

115
  def show
1✔
116

117
    return if project.blank?
12✔
118
    add_breadcrumb(project.title, project_path)
11✔
119
    add_breadcrumb("Contents")
11✔
120

121
    @latest_completed_download = current_user.user_requests.where(project_id: @project.id, state: "completed").order(:completion_time).last
11✔
122
    @storage_usage = project.storage_usage(session_id: current_user.mediaflux_session)
11✔
123
    @storage_capacity = project.storage_capacity(session_id: current_user.mediaflux_session)
11✔
124

125
    @num_files = project.asset_count(session_id: current_user.mediaflux_session)
11✔
126

127
    @file_list = project.file_list(session_id: current_user.mediaflux_session, size: 100)
11✔
128
    @files = @file_list[:files]
11✔
129
    @files.sort_by!(&:path)
11✔
130
    @project = ProjectShowPresenter.new(project)
11✔
131

132
    @project_session = "content"
11✔
133
    respond_to do |format|
11✔
134
      format.html { render }
21✔
135
      format.xml { render xml: @project.to_xml }
12✔
136
    end
137
  end
138

139
  # GET "projects/:id/:id-mf"
140
  #
141
  # This action is used to render the mediaflux metadata for a project.
142
  def show_mediaflux
1✔
143
    project_id = params[:id]
1✔
144
    project = Project.find(project_id)
1✔
145
    if project.mediaflux_id == 0
1✔
146
      flash[:alert] = "Project has not been created in Mediaflux"
×
147
      redirect_to project_path(project_id)
×
148
    else
149
      respond_to do |format|
1✔
150
        format.xml do
1✔
151
          render xml: project.mediaflux_meta_xml(user: current_user)
1✔
152
        end
153
      end
154
    end
155
  end
156

157
  def project_job_service
1✔
158
    @project_job_service ||= ProjectJobService.new(project:)
×
159
  end
160

161
  def list_contents
1✔
162
    return if project.blank?
1✔
163

164
    project_job_service.list_contents_job(user: current_user)
×
165

166
    json_response = {
167
      message: "File list for \"#{project.title}\" is being generated in the background. A link to the downloadable file list will be available in the \"Recent Activity\" section of your dashboard when it is available. You may safely navigate away from this page or close this tab."
×
168
    }
169
    render json: json_response
×
170
  rescue => ex
171
    message = "Error producing document list (project id: #{project&.id}): #{ex.message}"
×
172
    Rails.logger.error(message)
×
173
    Honeybadger.notify(message)
×
174
    render json: { message: "Document list could not be generated." }
×
175
  end
176

177
  def file_list_download
1✔
178
    job_id = params[:job_id]
×
179
    user_request = FileInventoryRequest.where(job_id:job_id).first
×
180
    if user_request.nil?
×
181
      # TODO: handle error
182
      redirect_to "/"
×
183
    else
184
      filename = user_request.output_file
×
185
      send_data File.read(filename), type: "text/plain", filename: "filelist.csv", disposition: "attachment"
×
186
    end
187
  end
188

189
  private
1✔
190

191
    def build_new_project
1✔
UNCOV
192
      @project ||= Project.new
×
193
    end
194

195
    def project
1✔
196
      @project ||= begin
268✔
197
        project = Project.find(params[:id])
46✔
198
        if project.user_has_access?(user: current_user)
46✔
199
          project
43✔
200
        else
201
          flash[:alert] = I18n.t(:access_denied)
3✔
202
          redirect_to dashboard_path
3✔
203
          nil
3✔
204
        end
205
      end
206
    end
207

208
    def eligible_editor?
1✔
209
      return true if current_user.eligible_sponsor? or current_user.eligible_manager?
20✔
210
    end
211

212
    def shared_file_location(filename)
1✔
213
      raise "Shared location is not configured" if Rails.configuration.mediaflux["shared_files_location"].blank?
×
214
      location = Pathname.new(Rails.configuration.mediaflux["shared_files_location"])
×
215
      location.join(filename).to_s
×
216
    end
217

218
    def set_breadcrumbs
1✔
219
      add_breadcrumb("Dashboard",dashboard_path)
65✔
220
    end
221
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