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

pulibrary / pdc_describe / 9091a1ae-29be-458c-984a-339d213919c4

12 Dec 2024 07:41PM UTC coverage: 26.434% (-69.7%) from 96.113%
9091a1ae-29be-458c-984a-339d213919c4

Pull #2000

circleci

jrgriffiniii
Removing integration with ActiveStorage
Pull Request #2000: Bump actionpack from 7.2.1.1 to 7.2.2.1

945 of 3575 relevant lines covered (26.43%)

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

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

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

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

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

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

44
  def migration_complete?
1✔
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✔
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" }
×
55
  end
56

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