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

pulibrary / tigerdata-app / 1f9ee909-20b2-467d-b493-b5be4964430d

22 Oct 2025 04:57PM UTC coverage: 91.212%. Remained the same
1f9ee909-20b2-467d-b493-b5be4964430d

push

circleci

web-flow
Fixing flaky tests (#2080)

10 times out of 10 one of these tests would fail for me locally.

Really we just have to look at the page for something new so that we are
sure the controller action has finished before we check for something
that is not waiting.

2740 of 3004 relevant lines covered (91.21%)

755.12 hits per line

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

100.0
/app/models/project_validator.rb
1
class ProjectValidator < ActiveModel::Validator
6✔
2
    def validate(project)
6✔
3
        @schema = TigerdataSchema.new(namespace: "tigerdata", type: "tigerdata:project")
1,666✔
4

5
        # we need this because this method references the metadata_json which is not updated until the project is saved
6
        project.metadata = project.metadata_model
1,666✔
7

8
        # Required fields, always validate
9
        validate_role(project:, netid: project.metadata_model.data_manager, role: "Data Manager")
1,666✔
10
        validate_role(project:, netid: project.metadata_model.data_sponsor, role: "Data Sponsor")
1,666✔
11

12
        # Validate if present
13
        project.metadata_model.data_user_read_only&.each { |read_only| validate_role(project:, netid: read_only, role: "Data User Read Only")}
1,976✔
14
        project.metadata_model.data_user_read_write&.each { |read_write| validate_role(project:, netid: read_write, role: "Data User Read Write")}
1,792✔
15

16
        # validate all required fields
17
        required_metadata_field_errors = []
1,666✔
18
        required_metadata = required_attributes(project:)
1,666✔
19
        if required_metadata.values.include?(nil)
1,666✔
20
            required_keys.each do |attr|
14✔
21
                value = required_metadata[attr]
98✔
22
                required_metadata_field_errors << "Missing metadata value for #{attr}" if value.nil? && project.metadata_json.include?(attr)
98✔
23
            end
24
        end
25
        if required_metadata_field_errors.count > 0
1,666✔
26
            project.errors.add :base, "Invalid Project Metadata it does not match the schema #{TigerdataSchema::SCHEMA_VERSION}\n #{required_metadata_field_errors.join(", ")}"
14✔
27
        end
28
    end
29

30
    private
6✔
31

32
    def validate_role(project:, netid:, role:)
6✔
33
        if netid.blank?
3,768✔
34
            project.errors.add :base, "Missing netid for role #{role}"
10✔
35
        elsif User.where(uid: netid).empty?
3,758✔
36
            project.errors.add :base, "Invalid netid: #{netid} for role #{role}"
84✔
37
        end
38
    end
39

40
    def required_field_labels
6✔
41
        @schema.required_project_schema_fields.pluck(:name)
41,748✔
42
    end
43

44
    def required_keys
6✔
45
        tableized = required_field_labels.map { |v| v.underscore }
333,984✔
46
        tableized
41,748✔
47
    end
48

49
    def required_attributes(project:)
6✔
50
        project.metadata_json.select { |k, _v| required_keys.include?(k) }
43,400✔
51
    end
52

53
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