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

pulibrary / tigerdata-app / ab78796f-94c1-48ab-af20-e234013f98cb

21 Jan 2026 07:37PM UTC coverage: 90.766% (-0.06%) from 90.829%
ab78796f-94c1-48ab-af20-e234013f98cb

Pull #2365

circleci

hectorcorrea
Added a test for the new Mediaflux class

Co-authored-by: Robert-Anthony Lee-Faison <leefaisonr@users.noreply.github.com>
Pull Request #2365: Quota breakdown (first pass)

18 of 21 new or added lines in 3 files covered. (85.71%)

1 existing line in 1 file now uncovered.

3008 of 3314 relevant lines covered (90.77%)

602.4 hits per line

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

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

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

7
  def details
2✔
8
    return if project.blank?
22✔
9

10
    add_breadcrumb(@presenter.title, project_path)
20✔
11
    add_breadcrumb("Details")
20✔
12

13
    project_metadata = @project.metadata
20✔
14
    storage_capacity = project_metadata[:storage_capacity]
20✔
15
    size = storage_capacity[:size]
20✔
16
    unit = storage_capacity[:unit]
20✔
17

18
    @requested_size = size[:requested]
20✔
19
    @requested_unit = unit[:requested]
20✔
20

21
    @approved_size = size[:approved]
20✔
22
    @approved_unit = unit[:approved]
20✔
23

24
    @project_session = "details"
20✔
25
    if params["quota"] == "true"
20✔
NEW
26
      @quota = project.quota(session_id:current_user.mediaflux_session)
×
27
    end
28

29
    respond_to do |format|
20✔
30
      format.html do
20✔
31
        render
17✔
32
      end
33
      format.json do
20✔
34
        render json: project.to_json
2✔
35
      end
36
      format.xml do
20✔
37
        render xml: @presenter.to_xml
1✔
38
      end
39
    end
40
  end
41

42
  def index
2✔
43
    if current_user.eligible_sysadmin?
11✔
44
      search_projects
6✔
45
    else
46
      flash[:alert] = I18n.t(:access_denied)
5✔
47
      redirect_to dashboard_path
5✔
48
    end
49
  end
50

51
  def show
2✔
52
    return if project.blank?
38✔
53

54
    add_breadcrumb(@presenter.title, project_path)
29✔
55
    add_breadcrumb("Contents")
29✔
56

57
    @latest_completed_download = current_user.user_requests.where(project_id: @project.id, state: "completed").order(:completion_time).last
29✔
58
    @storage_usage = project.storage_usage(session_id: current_user.mediaflux_session)
29✔
59
    @storage_capacity = project.storage_capacity(session_id: current_user.mediaflux_session)
29✔
60

61
    @num_files = project.asset_count(session_id: current_user.mediaflux_session)
29✔
62

63
    @file_list = project.file_list(session_id: current_user.mediaflux_session, size: 100)
29✔
64
    @files = @file_list[:files]
29✔
65
    @files.sort_by!(&:path)
29✔
66

67
    @project_session = "content"
29✔
68
    respond_to do |format|
29✔
69
      format.html { render }
52✔
70
      format.xml { render xml: ProjectShowPresenter.new(project, current_user).to_xml
35✔
71
    }
72
    end
73
  end
74

75
  # GET "projects/:id/:id-mf"
76
  #
77
  # This action is used to render the mediaflux metadata for a project.
78
  def show_mediaflux
2✔
79
    project_id = params[:id]
4✔
80
    project = Project.find(project_id)
4✔
81
    respond_to do |format|
3✔
82
      format.xml do
3✔
83
        render xml: project.mediaflux_meta_xml(user: current_user)
3✔
84
      end
85
    end
86
  rescue => ex
87
    Rails.logger.error "Error getting MediaFlux XML for project #{project_id}, user #{current_user.uid}: #{ex.message}"
1✔
88
    flash[:alert] = "Error fetching Mediaflux XML for this project"
1✔
89
    redirect_to project_path(project_id)
1✔
90
  end
91

92
  def list_contents
2✔
93
    return if project.blank?
4✔
94

95
    project_job_service.list_contents_job(user: current_user)
3✔
96

97
    json_response = {
98
      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."
3✔
99
    }
100
    render json: json_response
3✔
101
  rescue => ex
102
    message = "Error producing document list (project id: #{project&.id}): #{ex.message}"
×
103
    Rails.logger.error(message)
×
104
    Honeybadger.notify(message)
×
105
    render json: { message: "Document list could not be generated." }
×
106
  end
107

108
  def file_list_download
2✔
109
    job_id = params[:job_id]
×
110
    user_request = FileInventoryRequest.where(job_id:job_id).first
×
111
    if user_request.nil?
×
112
      # TODO: handle error
113
      redirect_to "/"
×
114
    else
115
      filename = user_request.output_file
×
116
      send_data File.read(filename), type: "text/plain", filename: "filelist.csv", disposition: "attachment"
×
117
    end
118
  end
119

120
  private
2✔
121

122
    def project_job_service
2✔
123
      @project_job_service ||= ProjectJobService.new(project:)
3✔
124
    end
125

126
    def project
2✔
127
      @project ||= begin
194✔
128
        project = Project.find(params[:id])
64✔
129
        @presenter = ProjectShowPresenter.new(project, current_user)
64✔
130
        if project&.mediaflux_id != nil && @presenter.user_has_access?(user: current_user)
60✔
131
          project
52✔
132
        else
133
          flash[:alert] = I18n.t(:access_denied)
8✔
134
          redirect_to dashboard_path
8✔
135
          nil
8✔
136
        end
137
      end
138
    end
139

140
    def eligible_editor?
2✔
141
      return true if current_user.eligible_sponsor? or current_user.eligible_manager?
×
142
    end
143

144
    def set_breadcrumbs
2✔
145
      add_breadcrumb("Dashboard",dashboard_path)
85✔
146
    end
147

148
    def search_projects
2✔
149
      @title_query = if params[:title_query].present?
6✔
150
        params[:title_query]
4✔
151
      else
152
        "*" # default to all projects
2✔
153
      end
154
      result =  ProjectSearch.new.call(search_string: @title_query, requestor: current_user)
6✔
155
      if result.success?
6✔
156
        flash[:notice] = "Successful search in Mediaflux for #{@title_query}"
6✔
157
        @project_presenters = result.value!
6✔
158
      else
159
        flash[:notice] = "Error searching projects for #{@title_query}.  Error: #{result.failure}"
×
160
        @project_presenters = []
×
161
      end
162
    end
163
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

© 2026 Coveralls, Inc