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

pulibrary / tigerdata-app / 085a83f3-f8ba-4ace-b5ad-5cb6d3d55a35

24 Oct 2025 02:47PM UTC coverage: 65.148% (-26.1%) from 91.202%
085a83f3-f8ba-4ace-b5ad-5cb6d3d55a35

Pull #2057

circleci

hectorcorrea
Make test more forgiving
Pull Request #2057: Dashboard displays projects straights from Mediaflux

11 of 87 new or added lines in 4 files covered. (12.64%)

625 existing lines in 35 files now uncovered.

2088 of 3205 relevant lines covered (65.15%)

181.75 hits per line

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

92.68
/app/services/project_import.rb
UNCOV
1
require "csv"
1✔
2

UNCOV
3
class ProjectImport
1✔
4

UNCOV
5
    attr_accessor :csv_data, :test_run
1✔
6

UNCOV
7
    def initialize(csv_data, test_run: false)
1✔
UNCOV
8
        @csv_data = csv_data
5✔
UNCOV
9
        @test_run = test_run
5✔
UNCOV
10
    end
11

UNCOV
12
    def self.run_with_report(mediaflux_session:)
1✔
UNCOV
13
      report = Mediaflux::ProjectReport.new(session_token: mediaflux_session)
1✔
UNCOV
14
      return [report.response_error[:message]] if report.error?
1✔
15

UNCOV
16
      importer = self.new(report.csv_data.gsub("\r\n",""))
1✔
UNCOV
17
      importer.run
1✔
UNCOV
18
    end
19

UNCOV
20
    def run
1✔
UNCOV
21
        output = []
6✔
UNCOV
22
        mediaflux_projects = CSV.new(csv_data, headers: true, liberal_parsing: true)
6✔
UNCOV
23
        mediaflux_projects.each do |project_metadata|
6✔
UNCOV
24
          project_id = project_metadata["projectID"]
45✔
UNCOV
25
          existing_project = Project.where("metadata_json @> ?", JSON.dump(project_id:))
45✔
UNCOV
26
          if existing_project.count > 0
45✔
UNCOV
27
            output << "Skipping project #{project_id}.  There are already #{existing_project.count} version of that project in the system"
30✔
UNCOV
28
          else
UNCOV
29
            metadata = convert_csv(project_metadata:, project_id:)
15✔
UNCOV
30
            if test_run
15✔
31
              output << metadata.to_json
×
UNCOV
32
            else
UNCOV
33
              if metadata.data_user_read_only.first == "n/a" && metadata.data_user_read_only.count == 1
15✔
34
                metadata.data_user_read_only = []
×
UNCOV
35
              end
36
              # Create the Rails record for the project
UNCOV
37
              project = Project.create(metadata:, mediaflux_id: project_metadata["asset"])
15✔
UNCOV
38
              if (project.valid?)
15✔
UNCOV
39
                output << "Created project for #{project_id}"
7✔
UNCOV
40
              else
UNCOV
41
                output << "Error creating project for #{project_metadata["asset"]}: #{project.errors.to_a.join(";")}"
8✔
UNCOV
42
              end
UNCOV
43
            end
UNCOV
44
          end
UNCOV
45
        end
UNCOV
46
        output
6✔
UNCOV
47
    rescue CSV::MalformedCSVError => error
48
      ["Error parsing response #{ csv_data.to_s.slice(0,200) } error: #{error}"]
×
UNCOV
49
    end
50

UNCOV
51
    private
1✔
UNCOV
52
        def convert_csv(project_metadata:, project_id:)
1✔
UNCOV
53
            data_user = parse_multiple(project_metadata, "dataUser")
15✔
UNCOV
54
            department_names = parse_multiple(project_metadata,"department")
15✔
UNCOV
55
            departments = department_names.map {|name| Affiliation.find_fuzzy_by_name(name)&.code || name }
36✔
56

UNCOV
57
            storage_size_gb = project_metadata["quota"].downcase.to_f/1000000000.0
15✔
UNCOV
58
            ProjectMetadata.new_from_hash({
15✔
UNCOV
59
              project_id:,
UNCOV
60
              title: project_metadata["title"],
UNCOV
61
              description: project_metadata["description"],
UNCOV
62
              status: Project::ACTIVE_STATUS,
UNCOV
63
              data_sponsor: project_metadata["dataSponsor"],
UNCOV
64
              data_manager: project_metadata["dataManager"],
UNCOV
65
              departments: departments,
UNCOV
66
              data_user_read_only: data_user,
UNCOV
67
              project_directory: project_metadata["path"],
UNCOV
68
              storage_capacity: {size: { approved: storage_size_gb, requested: storage_size_gb}, unit: {approved: "GB", requested: "GB"}},
UNCOV
69
              storage_performance_expectations: { requested: "Standard", approved: "Standard" },
UNCOV
70
              created_by: project_metadata["creatorUser"],
UNCOV
71
              created_on: project_metadata["createdOn"]
UNCOV
72
            })
UNCOV
73
        end
74

UNCOV
75
        def parse_multiple(project_metadata, key)
1✔
UNCOV
76
            if project_metadata[key].blank?
30✔
UNCOV
77
            []
6✔
UNCOV
78
            else
UNCOV
79
            project_metadata[key].split(",").map(&:strip)
24✔
UNCOV
80
            end
UNCOV
81
        end
UNCOV
82
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