• 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

98.77
/app/models/request.rb
1
# frozen_string_literal: true
2
class Request < ApplicationRecord
2✔
3
  DRAFT = "draft" # default state set by database
2✔
4
  SUBMITTED = "submitted" # Ready to be approved
2✔
5

6
  def valid_to_submit?
2✔
7
    errors.clear
39✔
8
    # run all validations and then check for errors otherwise ruby stops at the first error
9
    valid_title?
39✔
10
    valid_data_sponsor?
39✔
11
    valid_data_manager?
39✔
12
    valid_departments?
39✔
13
    valid_quota?
39✔
14
    valid_description?
39✔
15
    # Is parent folder really required?  For Skeletor let's skip it.
16
    # valid_parent_folder?
17
    valid_project_folder?
39✔
18
    # For Skeletor we are setting the requestor to the data sponsor
19
    # valid_requested_by?
20
    errors.count == 0
39✔
21
  end
22

23
  def valid_title?
2✔
24
    field_present?(project_title, :project_title)
45✔
25
  end
26

27
  def valid_data_sponsor?
2✔
28
    valid_uid?(data_sponsor, :data_sponsor)
42✔
29
  end
30

31
  def valid_data_manager?
2✔
32
    valid_uid?(data_manager, :data_manager)
42✔
33
  end
34

35
  def valid_departments?
2✔
36
    field_present?(departments, :departments)
41✔
37
  end
38

39
  def valid_description?
2✔
40
    field_present?(description, :description)
41✔
41
  end
42

43
  def valid_parent_folder?
2✔
UNCOV
44
    field_present?(parent_folder, :parent_folder)
2✔
45
  end
46

47
  def valid_project_folder?
2✔
48
    field_present?(project_folder, :project_folder)
41✔
49
  end
50

51
  def valid_quota?
2✔
52
    if ((quota == "500 GB") || (quota == "2 TB") || (quota == "10 TB") || (quota == "25 TB")) ||
47✔
UNCOV
53
       (custom_quota? && (storage_size.present? && (storage_size > 0)) && ((storage_unit == "GB") || (storage_unit == "TB")))
5✔
54
      true
44✔
55
    else
UNCOV
56
      errors.add(:quota, :invalid, message: "must be one of '500 GB', '2 TB', '10 TB', '25 TB', or 'custom'")
3✔
UNCOV
57
      false
3✔
58
    end
59
  end
60

61
  def custom_quota?
2✔
62
    quota == "custom"
87✔
63
  end
64

65
  def valid_requested_by?
2✔
UNCOV
66
    field_present?(requested_by, :requested_by)
2✔
67
  end
68

69
  def approve(approver)
2✔
UNCOV
70
    create_project_operation = ProjectCreate.new
6✔
UNCOV
71
    result = create_project_operation.call(request: self, approver: approver)
6✔
UNCOV
72
    if result.success?
6✔
UNCOV
73
      result.value!
5✔
74
    else
UNCOV
75
      self.error_message = { message: result.failure }
1✔
UNCOV
76
      save!
1✔
UNCOV
77
      raise ProjectCreate::ProjectCreateError, result.failure
1✔
78
    end
79
  end
80

81
  def approved_quota_size
2✔
82
    if approved_quota.present?
15✔
UNCOV
83
      if approved_quota == "custom"
1✔
84
        approved_storage_size.to_f
×
85
      else
UNCOV
86
        approved_quota.split.first.to_f
1✔
87
      end
88
    else
89
      requested_quota_size
14✔
90
    end
91
  end
92

93
  def requested_quota_size
2✔
94
    if custom_quota?
41✔
95
      storage_size.to_f
5✔
96
    else
97
      quota.split.first.to_f
36✔
98
    end
99
  end
100

101
  def approved_quota_unit
2✔
102
    if approved_quota.present?
18✔
UNCOV
103
      if approved_quota == "custom"
3✔
UNCOV
104
        approved_storage_unit
2✔
105
      else
UNCOV
106
        approved_quota.split.last
1✔
107
      end
108
    else
109
      requested_quota_unit
15✔
110
    end
111
  end
112

113
  def requested_quota_unit
2✔
114
    if custom_quota?
41✔
115
      storage_unit
5✔
116
    else
117
      quota.split.last
36✔
118
    end
119
  end
120

121
  def submitted?
2✔
UNCOV
122
    state == Request::SUBMITTED
22✔
123
  end
124

125
  private
2✔
126

127
    def field_present?(value, name)
2✔
128
      if value.present?
172✔
129
        true
91✔
130
      else
131
        errors.add(name, :invalid, message: "cannot be empty")
81✔
132
        false
81✔
133
      end
134
    end
135

136
    def valid_uid?(uid, field)
2✔
137
      if uid.blank?
84✔
138
        errors.add(field, :blank, message: "cannot be empty")
35✔
139
        false
35✔
140
      elsif User.where(uid: uid).count == 0
49✔
UNCOV
141
        errors.add(field, :invalid, message: "must be a valid user")
2✔
UNCOV
142
        false
2✔
143
      else
144
        true
47✔
145
      end
146
    end
147
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