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

pulibrary / pdc_describe / 1e90e590-4cd8-4280-81e5-20c0234f4d4b

15 Jan 2025 08:18PM UTC coverage: 95.972% (-0.1%) from 96.116%
1e90e590-4cd8-4280-81e5-20c0234f4d4b

Pull #2013

circleci

jrgriffiniii
Integrates Prettier for formatting YAML, SCSS and JavaScript
Pull Request #2013: Integrates Prettier for formatting YAML, SCSS and JavaScript

3336 of 3476 relevant lines covered (95.97%)

205.02 hits per line

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

95.92
/app/models/migration_upload_snapshot.rb
1
# frozen_string_literal: true
2
class MigrationUploadSnapshot < UploadSnapshot
1✔
3
  def store_files(s3_files, pre_existing_files: [])
1✔
4
    self.files = s3_files.map { |file| { "filename" => file.filename_display, "checksum" => file.checksum, "migrate_status" => "started" } }
50✔
5
    files.concat pre_existing_files if pre_existing_files.present?
13✔
6
  end
7

8
  def mark_error(s3_file, error_message)
1✔
9
    index = find_file(s3_file.filename_display)
11✔
10
    if index.present?
11✔
11
      files[index]["migrate_status"] = "error"
11✔
12
      files[index]["migrate_error"] = error_message
11✔
13
    end
14
  end
15

16
  # Rename a file
17
  def rename(old_filename, new_filename)
1✔
18
    index = find_file(old_filename)
14✔
19
    files[index]["original_filename"] = old_filename
14✔
20
    files[index]["filename"] = new_filename
14✔
21
  end
22

23
  def mark_complete(s3_file)
1✔
24
    index = find_file(s3_file.filename)
29✔
25
    if index.present?
29✔
26
      files[index]["migrate_status"] = "complete"
26✔
27
      files[index].delete("migrate_error")
26✔
28

29
      # Retrieve the checksum from AWS, as this often differs from what is migrated from DSpace
30
      # Please see https://github.com/pulibrary/pdc_describe/issues/1413
31
      updated = s3_file.s3_query_service.get_s3_object_attributes(key: s3_file.filename)
26✔
32
      updated_checksum = updated[:etag]
26✔
33

34
      files[index]["checksum"] = updated_checksum
26✔
35
      finalize_migration if migration_complete?
26✔
36
    end
37
  end
38

39
  def complete?(s3_file)
1✔
40
    index = find_complete_file(s3_file.filename, s3_file.checksum)
19✔
41
    !index.nil?
19✔
42
  end
43

44
  def migration_complete?
1✔
45
    files.select { |file| file.keys.include?("migrate_status") }.map { |file| file["migrate_status"] }.uniq == ["complete"]
231✔
46
  end
47

48
  def migration_complete_with_errors?
1✔
49
    return false if migration_complete?
×
50
    files.select { |file| file.keys.include?("migrate_status") }.map { |file| file["migrate_status"] }.uniq.exclude?("started")
×
51
  end
52

53
  def existing_files
1✔
54
    super.select { |file| file["migrate_status"].nil? || file["migrate_status"] == "complete" }
30✔
55
  end
56

57
  def finalize_migration
1✔
58
    migration_start = WorkActivity.activities_for_work(work.id, [WorkActivity::MIGRATION_START]).order(created_at: :desc)
5✔
59
    if migration_start.count == 0
5✔
60
      Honeybadger.notify("Finalized a migration with no start! Work: #{work.id} Migration Snapshot: #{id}")
3✔
61
      WorkActivity.add_work_activity(work.id, { migration_id: id, message: "Migration from Dataspace is complete." }.to_json,
3✔
62
                                     nil, activity_type: WorkActivity::MIGRATION_COMPLETE)
63
    else
64
      migration = migration_start.first
2✔
65
      data = JSON.parse(migration.message)
2✔
66
      message = "#{data['file_count']} #{'file'.pluralize(data['file_count'])} and #{data['directory_count']} #{'directory'.pluralize(data['directory_count'])} have migrated from Dataspace."
2✔
67
      WorkActivity.add_work_activity(work.id, { migration_id: id, message: }.to_json,
2✔
68
                                                migration.created_by_user_id, activity_type: WorkActivity::MIGRATION_COMPLETE)
69
    end
70
  end
71

72
  private
1✔
73

74
    def find_file(filename)
1✔
75
      index = files.index { |file| file["filename"] == filename && (file["migrate_status"] == "started" || file["migrate_status"] == "error") }
180✔
76
      if index.nil?
54✔
77
        Honeybadger.notify("Migrated a file that was not part of the orginal Migration: #{id} for work #{work_id}: #{filename}")
3✔
78
      end
79
      index
54✔
80
    end
81

82
    def find_complete_file(filename, checksum)
1✔
83
      files.index { |file| (file["filename"] == filename) && (file["checksum"] == checksum) && (file["migrate_status"] == "complete") }
80✔
84
    end
85
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