Skip to content

Commit

Permalink
Merge pull request #6539 from samvera/adds_swapping_checksum_audit_lo…
Browse files Browse the repository at this point in the history
…g_spec

Adds fileset class swapping and refactoring to `spec/models/checksum_audit_log_spec.rb`.
  • Loading branch information
dlpierce authored Dec 14, 2023
2 parents dccce1e + 5cbeb7c commit d4e9bb1
Showing 1 changed file with 48 additions and 42 deletions.
90 changes: 48 additions & 42 deletions spec/models/checksum_audit_log_spec.rb
Original file line number Diff line number Diff line change
@@ -1,23 +1,45 @@
# frozen_string_literal: true
RSpec.describe ChecksumAuditLog do
let(:wings_disabled?) { Hyrax.config.disable_wings }
let(:storage_adapter) { Hyrax.storage_adapter }
let(:file) { create(:uploaded_file, file: File.open('spec/fixtures/world.png')) }
let(:file_metadata) { valkyrie_create(:file_metadata, :original_file, :with_file, file: file) }

let(:f) do
file = FileSet.create do |gf|
gf.apply_depositor_metadata('mjg36')
if wings_disabled?
valkyrie_create(:hyrax_file_set,
files: [file_metadata],
original_file: file_metadata)
else
file = FileSet.create do |gf|
gf.apply_depositor_metadata('mjg36')
end
# TODO: Mock addition of file to fileset to avoid calls to .save.
# This will speed up tests and avoid uneccesary integration testing for fedora funcationality.
Hydra::Works::AddFileToFileSet.call(file, File.open(fixture_path + '/world.png'), :original_file)
file
end
# TODO: Mock addition of file to fileset to avoid calls to .save.
# This will speed up tests and avoid uneccesary integration testing for fedora funcationality.
Hydra::Works::AddFileToFileSet.call(file, File.open(fixture_path + '/world.png'), :original_file)
file
end

let(:pulled_file_metdata) { Hyrax.query_service.custom_queries.find_file_metadata_by(id: f.file_ids.first) }
let(:uploaded_file) { storage_adapter.find_by(id: pulled_file_metdata.file_identifier) }

let(:version_uri) do
Hyrax::VersioningService.create(f.original_file)
f.original_file.versions.first.uri
if wings_disabled?
storage_adapter.upload_version(id: uploaded_file.id, file: fixture_file_upload('/hyrax_generic_stub.txt'))
Hyrax::VersioningService.new(resource: f.original_file).versions.first.id.to_s
else
Hyrax::VersioningService.create(f.original_file)
f.original_file.versions.first.uri
end
end

let(:content_id) { f.original_file.id }
let(:old) { described_class.create(file_set_id: f.id, file_id: content_id, checked_uri: version_uri, passed: true, created_at: 2.minutes.ago) }
let(:new) { described_class.create(file_set_id: f.id, file_id: content_id, checked_uri: version_uri, passed: false, created_at: 1.minute.ago) }

shared_context('with pruned history') { before { described_class.prune_history(file_set_id, checked_uri: version_uri) } }

context 'a file with multiple checksums' do
it 'returns a list of logs for this FileSet sorted by date descending' do
logs = described_class.logs_for(f.id, checked_uri: version_uri)
Expand Down Expand Up @@ -58,23 +80,15 @@

context "one passing record" do
let!(:record) { described_class.create(created_at: 1.day.ago, file_set_id: file_set_id, file_id: file_id, checked_uri: version_uri, passed: true) }
include_context 'with pruned history'

before do
described_class.prune_history(file_set_id, checked_uri: version_uri)
end

it "keeps record" do
expect(described_class.logs_for(file_set_id, checked_uri: version_uri).count).to eq(1)
end
it('keeps record') { expect(described_class.logs_for(file_set_id, checked_uri: version_uri).count).to eq(1) }
end

context "two passing records" do
let!(:older) { described_class.create(created_at: 1.day.ago, file_set_id: file_set_id, file_id: file_id, checked_uri: version_uri, passed: true) }
let!(:newer) { described_class.create(created_at: 0.days.ago, file_set_id: file_set_id, file_id: file_id, checked_uri: version_uri, passed: true) }

before do
described_class.prune_history(file_set_id, checked_uri: version_uri)
end
include_context 'with pruned history'

it "keeps latest, gets rid of previous" do
logs = described_class.logs_for(file_set_id, checked_uri: version_uri).to_a
Expand All @@ -90,10 +104,8 @@
let!(:fourth) { described_class.create(file_set_id: file_set_id, file_id: file_id, checked_uri: version_uri, passed: true) }
let!(:fifth) { described_class.create(file_set_id: file_set_id, file_id: file_id, checked_uri: version_uri, passed: true) }
let!(:sixth) { described_class.create(file_set_id: file_set_id, file_id: file_id, checked_uri: version_uri, passed: true) }
include_context 'with pruned history'

before do
described_class.prune_history(file_set_id, checked_uri: version_uri)
end
it "keeps latest, failing, and previous/next of failing" do
logs = described_class.logs_for(file_set_id, checked_uri: version_uri).reorder("created_at asc")
expect(logs.collect(&:id)).to eq([second.id, third.id, fourth.id, sixth.id])
Expand Down Expand Up @@ -125,8 +137,13 @@
# versions, but that's great since I couldn't figure out a reasonable
# way to create them. Note you need to #all here, or you get
# really confusing stuff.
let(:verisons_uri) { f.original_file.versions.all.first.uri }
let(:version_uri2) { f.original_file.versions.all.second.uri }
let(:valkyrie_versions) { Hyrax::VersioningService.new(resource: f.original_file).versions }
let(:verisons_uri) { wings_disabled? ? valkyrie_versions.first.version_id.to_s : f.original_file.versions.all.first.uri }
let(:version_uri2) { wings_disabled? ? valkyrie_versions.second.version_id.to_s : f.original_file.versions.all.second.uri }
let(:expected) do
[described_class.where(checked_uri: version_uri).order("created_at desc").first,
described_class.where(checked_uri: version_uri2).order("created_at desc").first]
end

before do
described_class.create(file_set_id: f.id, file_id: content_id, checked_uri: version_uri, passed: true, created_at: 2.days.ago)
Expand All @@ -137,27 +154,16 @@
described_class.create(file_set_id: f.id, file_id: content_id, checked_uri: version_uri2, passed: false, created_at: 1.day.ago)
described_class.create(file_set_id: f.id, file_id: content_id, checked_uri: version_uri2, passed: true)
end

describe ".latest_checks" do
it "returns only latest for each checked_uri" do
expected = [
described_class.where(checked_uri: version_uri).order("created_at desc").first,
described_class.where(checked_uri: version_uri2).order("created_at desc").first
]
expect(described_class.latest_checks).to match_array(expected)
end
it('returns only latest for each checked_uri') { expect(described_class.latest_checks).to match_array(expected) }
end

describe ".latest_for_file_set_id" do
before do
# add some for another file set, doens't matter it doesn't exist
described_class.create(file_set_id: "somethingelse", file_id: "whatever", checked_uri: "http://example.org/w")
end
it "returns only the lastest check for FileSet specified" do
expected = [
described_class.where(checked_uri: version_uri).order("created_at desc").first,
described_class.where(checked_uri: version_uri2).order("created_at desc").first
]
expect(described_class.latest_for_file_set_id(f.id)).to match_array(expected)
end
# add some for another file set, doens't matter it doesn't exist
before { described_class.create(file_set_id: "somethingelse", file_id: "whatever", checked_uri: "http://example.org/w") }

it('returns only the lastest check for FileSet specified') { expect(described_class.latest_for_file_set_id(f.id)).to match_array(expected) }
end
end
end

0 comments on commit d4e9bb1

Please sign in to comment.