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

pulibrary / pdc_describe / cace366a-ffad-45f1-9b60-678e607fa527

14 May 2024 02:21PM UTC coverage: 60.862% (-35.0%) from 95.908%
cace366a-ffad-45f1-9b60-678e607fa527

push

circleci

jrgriffiniii
wip

1 of 3 new or added lines in 2 files covered. (33.33%)

1194 existing lines in 57 files now uncovered.

2076 of 3411 relevant lines covered (60.86%)

22.71 hits per line

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

26.53
/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✔
UNCOV
4
    self.files = s3_files.map { |file| { "filename" => file.filename_display, "checksum" => file.checksum, "migrate_status" => "started" } }
×
UNCOV
5
    files.concat pre_existing_files if pre_existing_files.present?
×
6
  end
7

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

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

23
  def mark_complete(s3_file)
1✔
UNCOV
24
    index = find_file(s3_file.filename)
×
UNCOV
25
    if index.present?
×
UNCOV
26
      files[index]["migrate_status"] = "complete"
×
UNCOV
27
      files[index].delete("migrate_error")
×
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
UNCOV
31
      updated = s3_file.s3_query_service.get_s3_object_attributes(key: s3_file.filename)
×
UNCOV
32
      updated_checksum = updated[:etag]
×
33

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

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

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

48
  def migration_complete_with_errors?
1✔
UNCOV
49
    return false if migration_complete?
×
UNCOV
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✔
UNCOV
54
    super.select { |file| file["migrate_status"].nil? || file["migrate_status"] == "complete" }
×
55
  end
56

57
  def finalize_migration
1✔
UNCOV
58
    migration_start = WorkActivity.activities_for_work(work.id, [WorkActivity::MIGRATION_START]).order(created_at: :desc)
×
UNCOV
59
    if migration_start.count == 0
×
UNCOV
60
      Honeybadger.notify("Finalized a migration with no start! Work: #{work.id} Migration Snapshot: #{id}")
×
UNCOV
61
      WorkActivity.add_work_activity(work.id, { migration_id: id, message: "Migration from Dataspace is complete." }.to_json,
×
62
                                     nil, activity_type: WorkActivity::MIGRATION_COMPLETE)
63
    else
UNCOV
64
      migration = migration_start.first
×
UNCOV
65
      data = JSON.parse(migration.message)
×
UNCOV
66
      message = "#{data['file_count']} #{'file'.pluralize(data['file_count'])} and #{data['directory_count']} #{'directory'.pluralize(data['directory_count'])} have migrated from Dataspace."
×
UNCOV
67
      WorkActivity.add_work_activity(work.id, { migration_id: id, message: }.to_json,
×
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✔
UNCOV
75
      index = files.index { |file| file["filename"] == filename && (file["migrate_status"] == "started" || file["migrate_status"] == "error") }
×
UNCOV
76
      if index.nil?
×
UNCOV
77
        Honeybadger.notify("Migrated a file that was not part of the orginal Migration: #{id} for work #{work_id}: #{filename}")
×
78
      end
UNCOV
79
      index
×
80
    end
81

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