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

pulibrary / tigerdata-app / 7291b10e-eaa3-4284-9371-5a980ceebf59

24 Nov 2025 07:18PM UTC coverage: 87.613% (-3.7%) from 91.333%
7291b10e-eaa3-4284-9371-5a980ceebf59

push

circleci

web-flow
Adds breadcrumb to Wizard (#2231)

Adds the breadcrumb to the Wizard and the functionality to allow the
user to save their changes before leaving the Wizard when clicking on
the "Dashboard" link in the breadcrumbs.

Closes #2102

5 of 12 new or added lines in 11 files covered. (41.67%)

904 existing lines in 36 files now uncovered.

2801 of 3197 relevant lines covered (87.61%)

360.23 hits per line

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

88.37
/app/controllers/application_controller.rb
1
# frozen_string_literal: true
2
class ApplicationController < ActionController::Base
4✔
3
  protect_from_forgery with: :exception
4✔
4
  before_action :authenticate_user!
4✔
5
  before_action :mediaflux_session
4✔
6
  around_action :mediaflux_session_errors
4✔
7
  around_action :mediaflux_login_errors
4✔
8
  before_action :emulate_user
4✔
9
  before_action :downtime_check
4✔
10

11
  helper_method :breadcrumbs
4✔
12

13
  def new_session_path(_scope)
4✔
14
    new_user_session_path
×
15
  end
16

17
  def after_sign_in_path_for(_resource)
4✔
18
    mediaflux_passthru_path
1✔
19
    # "/users/#{@user.id}"
20
  end
21

22
  def require_admin_user
4✔
23
    head :forbidden unless current_user&.eligible_sysadmin?
×
24
  end
25

26
  def breadcrumbs
4✔
27
    @breadcrumbs ||= []
270✔
28
  end
29

30
  def add_breadcrumb(name, path = nil)
4✔
31
    breadcrumbs << Breadcrumb.new(name, path)
216✔
32
  end
33

34
  # Render a 404 page for any undefined route
35
  def render_not_found
4✔
36
    render file: Rails.public_path.join("404.html").to_s, layout: false, status: :not_found
1✔
37
  end
38

39
  private
4✔
40

41
    def mediaflux_session
4✔
42
      logger.debug "Application Session #{session[:mediaflux_session]} cas: #{session[:active_web_user]}"
195✔
43
      unless ["passthru", "cas"].include?(action_name)
195✔
44
        current_user&.mediaflux_from_session(session)
189✔
45
      end
46
    end
47

48
    def mediaflux_session_errors
4✔
49
      yield
195✔
50
    rescue ActionView::Template::Error, Mediaflux::SessionExpired => e
UNCOV
51
      raise unless e.is_a?(Mediaflux::SessionExpired) || e.cause.is_a?(Mediaflux::SessionExpired)
6✔
UNCOV
52
      if session[:active_web_user]
6✔
UNCOV
53
        redirect_to mediaflux_passthru_path(path: request.path)
3✔
UNCOV
54
      elsif session_error_handler
3✔
UNCOV
55
        retry
2✔
56
      else
UNCOV
57
        raise
1✔
58
      end
59
    end
60

61
    def mediaflux_login_errors
4✔
62
      yield
195✔
63
    rescue Mediaflux::SessionError
64
      if session_error_handler
×
65
        retry
×
66
      else
67
        raise
×
68
      end
69
    end
70

71
    def session_error_handler
4✔
UNCOV
72
      @retry_count ||= 0
3✔
UNCOV
73
      @retry_count += 1
3✔
74

UNCOV
75
      current_user.clear_mediaflux_session(session)
3✔
UNCOV
76
      current_user.mediaflux_from_session(session)
3✔
UNCOV
77
      @retry_count < 3 # If the session is expired we should not have to retry more than once, but let's have a little wiggle room
3✔
78
    end
79

80
    def emulate_user
4✔
81
      return if Rails.env.production?
195✔
82
      return if current_user.blank? || !current_user.trainer
165✔
83

UNCOV
84
      if session[:emulation_role]
24✔
UNCOV
85
        if session[:emulation_role] == "Eligible Data Sponsor"
15✔
UNCOV
86
          emulate_sponsor
1✔
UNCOV
87
        elsif session[:emulation_role] == "Eligible Data Manager"
14✔
UNCOV
88
          emulate_manager
1✔
UNCOV
89
        elsif session[:emulation_role] == "System Administrator"
13✔
UNCOV
90
          emulate_sysadmin
12✔
UNCOV
91
        elsif session[:emulation_role] == "Eligible Data User"
1✔
UNCOV
92
          emulate_data_user
1✔
93
        elsif session[:emulation_role] == "Return to Self"
×
94
          return_to_self
×
95
        end
96
      end
97
    end
98

99
    def emulate_sponsor
4✔
UNCOV
100
      current_user.eligible_sponsor = true
1✔
UNCOV
101
      current_user.eligible_manager = false
1✔
UNCOV
102
      current_user.sysadmin = false
1✔
103
    end
104

105
    def emulate_manager
4✔
UNCOV
106
      current_user.eligible_manager = true
1✔
UNCOV
107
      current_user.eligible_sponsor = false
1✔
UNCOV
108
      current_user.sysadmin = false
1✔
109
    end
110

111
    def emulate_sysadmin
4✔
UNCOV
112
      current_user.sysadmin = true
12✔
UNCOV
113
      current_user.eligible_manager = false
12✔
UNCOV
114
      current_user.eligible_sponsor = false
12✔
115
    end
116

117
    def emulate_data_user
4✔
UNCOV
118
      current_user.eligible_sponsor = false
1✔
UNCOV
119
      current_user.eligible_manager = false
1✔
UNCOV
120
      current_user.sysadmin = false
1✔
UNCOV
121
      current_user.trainer = false
1✔
122
    end
123

124
    def return_to_self
4✔
125
      current_user.eligible_sponsor = false
×
126
      current_user.eligible_manager = false
×
127
      current_user.sysadmin = false
×
128
    end
129

130
    def downtime_check(with_redirect: true)
4✔
131
      if Flipflop.disable_login?
191✔
UNCOV
132
        if current_user&.eligible_sysadmin?
6✔
UNCOV
133
          flash[:notice] = I18n.t(:only_sysadmin_users)
3✔
134
        else
UNCOV
135
          redirect_to root_path if with_redirect
3✔
UNCOV
136
          flash[:notice] = I18n.t(:no_login_currently)
3✔
137
        end
138
      end
139
    end
140
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