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

MushroomObserver / mushroom-observer / 27727854390

18 Jun 2026 12:07AM UTC coverage: 97.693% (-0.1%) from 97.822%
27727854390

Pull #4523

github

nimmolo
Start Capybara port range at 3001 to leave 3000 free for the dev server

Avoids the foot-gun where a running `bin/rails server` on 3000
collides with worker 0's Capybara port. Workers now bind 3001+N,
matching the Maps JavaScript API key's referer whitelist range
that starts at 3001.
Pull Request #4523: test infra: parallel system tests + per-worker Capybara port

46756 of 47860 relevant lines covered (97.69%)

700.05 hits per line

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

84.21
/app/controllers/admin/users_controller.rb
1
# frozen_string_literal: true
2

3
module Admin
1✔
4
  class UsersController < AdminController
1✔
5
    ### Edit user bonuses
6
    def edit
1✔
7
      return unless (@user2 = find_or_goto_index(User, params[:id].to_s))
1✔
8

9
      @user_stats = UserStats.find_by(user_id: @user2.id) ||
1✔
10
                    UserStats.create(user_id: @user2.id)
11
    end
12

13
    def update
1✔
14
      return unless (@user2 = find_or_goto_index(User, params[:id].to_s))
2✔
15

16
      return unless (@user_stats = UserStats.find_by(user_id: @user2.id))
2✔
17

18
      # Parse new set of values.
19
      @val = params[:val]
2✔
20
      bonuses = calculate_bonuses
2✔
21
      return if bonuses.nil?
2✔
22

23
      update_user_contribution(bonuses)
1✔
24
      redirect_to(user_path(@user2.id))
1✔
25
    end
26

27
    # Delete user. This is messy, but the new User#erase_user method
28
    # makes a pretty good stab at the problem.
29
    def destroy
1✔
30
      id = params[:id]
×
31
      if id.present?
×
32
        user = User.safe_find(id)
×
33
        User.erase_user(id) if user
×
34
      end
35
      redirect_back_or_default("/")
×
36
    end
37

38
    private
1✔
39

40
    def calculate_bonuses
1✔
41
      line_num = 0
2✔
42
      bonuses = []
2✔
43
      @val.split("\n").each do |line|
2✔
44
        line_num += 1
3✔
45
        if (match = line.match(/^\s*(\d+)\s*(\S.*\S)\s*$/))
3✔
46
          bonuses.push([match[1].to_i, match[2].to_s])
2✔
47
        else
48
          flash_error("Syntax error on line #{line_num}.")
1✔
49
          return nil
1✔
50
        end
51
      end
52
      bonuses
1✔
53
    end
54

55
    def update_user_contribution(bonuses)
1✔
56
      contrib = @user2.contribution.to_i
1✔
57
      # Subtract old bonuses.
58
      @user_stats.bonuses&.each_key do |points|
1✔
59
        contrib -= points
×
60
      end
61
      # Add new bonuses
62
      bonuses.each do |(points, _reason)|
1✔
63
        contrib += points
2✔
64
      end
65
      # Update database.
66
      @user_stats.update(bonuses: bonuses)
1✔
67
      @user2.update(contribution: contrib)
1✔
68
    end
69
  end
70
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc