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

pulibrary / tigerdata-app / 435504a1-6163-4d2e-9bf6-16a925fb14c3

04 Aug 2025 07:42PM UTC coverage: 75.591% (-1.6%) from 77.142%
435504a1-6163-4d2e-9bf6-16a925fb14c3

push

circleci

web-flow
Add data users to a project after it is created in mediaflux (#1657)

* Add data users to a project after it is created in mediaflux

* only send the mediaflux id and data users in the request

* fixing multiple users command

* setup dry operation

* setup dry operation

* revert request model

* adding project and user steps to dry operations

* adding desired success and failure outcomes

* calling the dry operation in the request model

* Flattening successful results until we reach the project

* Raising and logging a project create error within the project create dry-operation

* Creating tests for project create dry operations

* spec file for operations

* testing success and failure cases for the dry operation

* finalizing tests

* tagging operation spec as integration

* removeing require relative statement

23 of 82 new or added lines in 4 files covered. (28.05%)

4 existing lines in 1 file now uncovered.

2205 of 2917 relevant lines covered (75.59%)

313.89 hits per line

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

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

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

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

27
  def valid_data_sponsor?
1✔
28
    valid_uid?(data_sponsor, :data_sponsor)
25✔
29
  end
30

31
  def valid_data_manager?
1✔
32
    valid_uid?(data_manager, :data_manager)
25✔
33
  end
34

35
  def valid_departments?
1✔
36
    field_present?(departments, :departments)
24✔
37
  end
38

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

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

47
  def valid_project_folder?
1✔
48
    field_present?(project_folder, :project_folder)
24✔
49
  end
50

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

61
  def custom_quota?
1✔
62
    quota == "custom"
7✔
63
  end
64

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

69
  def approve(approver)
1✔
70
    create_project_operation = ProjectCreate.new
1✔
71
    result = create_project_operation.call(request: self, approver: approver)
1✔
NEW
72
    result = result.flatten while result.class != Project
×
NEW
73
    result
×
74
  rescue ProjectCreate::ProjectCreateError => ex
75
    # Save the error within the Request object
76
    self.error_message = { message: ex.message }
1✔
77
    save!
1✔
78
    # ..and get rid of the Rails project
79
    project.destroy!
1✔
NEW
80
    raise "Error approving request #{id}"
×
81
  end
82

83
  private
1✔
84

85
    def field_present?(value, name)
1✔
86
      if value.present?
100✔
87
        true
38✔
88
      else
89
        errors.add(name, :invalid, message: "cannot be empty")
62✔
90
        false
62✔
91
      end
92
    end
93

94
    def valid_uid?(uid, field)
1✔
95
      if uid.blank?
50✔
96
        errors.add(field, :blank, message: "cannot be empty")
25✔
97
        false
25✔
98
      elsif User.where(uid: uid).count == 0
25✔
99
        errors.add(field, :invalid, message: "must be a valid user")
2✔
100
        false
2✔
101
      else
102
        true
23✔
103
      end
104
    end
105
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