Skip to content

Commit

Permalink
Refactor InnerBagValidator to use BagAdapter
Browse files Browse the repository at this point in the history
  • Loading branch information
ssciolla committed Aug 6, 2024
1 parent e7ced5c commit e8e9af0
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 32 deletions.
19 changes: 19 additions & 0 deletions lib/bag_adapter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@
require_relative "../services"

module BagAdapter
ValidationResult = Struct.new(
"ValidationResult",
:is_valid,
:error_message,
keyword_init: true
)

class BagAdapter
include DarkBlueLogger

Expand Down Expand Up @@ -51,5 +58,17 @@ def add_manifests
sha1tag = File.join(@bag.bag_dir, "tagmanifest-sha1.txt")
File.delete(sha1tag) if File.exist?(sha1tag)
end

def check_if_valid
is_valid = @bag.valid?
if is_valid
ValidationResult.new(is_valid: is_valid, error_message: nil)
else
ValidationResult.new(
is_valid: is_valid,
error_message: @bag.errors.full_messages.join(", ")
)
end
end
end
end
16 changes: 9 additions & 7 deletions lib/bag_validator.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require "bagit"
require_relative "bag_adapter"

class BagValidator
def validate(path)
Expand All @@ -7,7 +7,7 @@ def validate(path)
end

class InnerBagValidator < BagValidator
def initialize(inner_bag_name, detect_hidden)
def initialize(inner_bag_name:, detect_hidden: true)
@inner_bag_name = inner_bag_name
@detect_hidden = detect_hidden
end
Expand All @@ -18,13 +18,15 @@ def validate(data_path)
raise BagValidationError, "Inner bag path does not exist: #{path}"
end

@bag = BagIt::Bag.new(path, {}, false, @detect_hidden)
validity = @bag.valid?
bag = BagAdapter::BagAdapter.new(
target_dir: path, detect_hidden: @detect_hidden
)
result = bag.check_if_valid

if !validity
raise BagValidationError, "Inner bag is not valid: #{@bag.errors.full_messages.join(", ")}"
if !result.is_valid
raise BagValidationError, "Inner bag is not valid: #{result.error_message}"
else
validity
result.is_valid
end
end
end
Expand Down
4 changes: 3 additions & 1 deletion run_dark_blue.rb
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,9 @@ def deliver_package(dispatcher:, package_data:, remote_client:)
remote_client: remote_client,
remote_path: package_data.remote_path
),
validator: InnerBagValidator.new(package_data.dir_name, @detect_hidden)
validator: InnerBagValidator.new(
inner_bag_name: package_data.dir_name, detect_hidden: @detect_hidden
)
)
logger.measure_info("Delivered package #{package_data.metadata.id}.") do
courier.deliver
Expand Down
10 changes: 8 additions & 2 deletions test/test_bag_courier.rb
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def setup
)
innerbag.add_bag_info({})
innerbag.add_manifests
@validator = InnerBagValidator.new("package", @detect_hidden)
@validator = InnerBagValidator.new(inner_bag_name: "package", detect_hidden: @detect_hidden)
# Set up remote-related objects
@data_transfer = DataTransfer::RemoteClientDataTransfer.new(
remote_client: RemoteClient::FileSystemRemoteClient.new(
Expand Down Expand Up @@ -123,7 +123,13 @@ def setup
)
end

def create_courier(dry_run:, target_client:, validator: @validator, remove_export: false, detect_hidden:)
def create_courier(
dry_run:,
target_client:,
detect_hidden:,
validator: @validator,
remove_export: false
)
BagCourier::BagCourier.new(
bag_id: @bag_id,
bag_info: @bag_info,
Expand Down
51 changes: 30 additions & 21 deletions test/test_bag_validator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
@test_dir_path = File.join(__dir__, "test_bag_val_dir")

if Dir.exist?(@test_dir_path)
# Delete the folder
FileUtils.rm_rf(@test_dir_path)
# Delete the folder
FileUtils.rm_rf(@test_dir_path)
end

@inner_bag_path = "inner_test_bag"
Expand All @@ -38,8 +38,9 @@
@bag.add_manifests
end

it "returns true if the bag is valid" do
result = InnerBagValidator.new(@inner_bag_path, @detect_hidden_no).validate(@test_data_dir)
it "returns true if the bag is valid" do
result = InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_no)
.validate(@test_data_dir)
assert(result)
end

Expand All @@ -49,14 +50,16 @@
file.puts "Invalid line"
end
assert_raises(BagValidationError) do
InnerBagValidator.new(@inner_bag_path, @detect_hidden_no).validate(@test_data_dir)
InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_no)
.validate(@test_data_dir)
end
end

it "returns error if the bag path is not valid" do
@random_path = @data_dir_path + "/test"
assert_raises(BagValidationError) do
InnerBagValidator.new(@inner_bag_path, @detect_hidden_no).validate(@random_path)
InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_no)
.validate(@random_path)
end
end
end
Expand All @@ -67,8 +70,8 @@
@test_dir_path = File.join(__dir__, "test_bag_val_dir")

if Dir.exist?(@test_dir_path)
# Delete the folder
FileUtils.rm_rf(@test_dir_path)
# Delete the folder
FileUtils.rm_rf(@test_dir_path)
end

@inner_bag_path = "inner_test_bag"
Expand All @@ -95,7 +98,7 @@
end

it "returns true if the bag is valid" do
result = InnerBagValidator.new(@inner_bag_path, @detect_hidden_yes).validate(@test_data_dir)
result = InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_yes).validate(@test_data_dir)
assert(result)
end

Expand All @@ -105,27 +108,28 @@
file.puts "Invalid line"
end
assert_raises(BagValidationError) do
InnerBagValidator.new(@inner_bag_path, @detect_hidden_yes).validate(@test_data_dir)
InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_yes)
.validate(@test_data_dir)
end
end

it "returns error if the bag path is not valid" do
@random_path = @data_dir_path + "/test"
assert_raises(BagValidationError) do
InnerBagValidator.new(@inner_bag_path, @detect_hidden_yes).validate(@random_path)
InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_yes)
.validate(@random_path)
end
end
end

describe "#validate_inner_bag with hidden files and detect hidden" do
# Set up the test environment
before do

@test_dir_path = File.join(__dir__, "test_bag_val_dir")

if Dir.exist?(@test_dir_path)
# Delete the folder
FileUtils.rm_rf(@test_dir_path)
# Delete the folder
FileUtils.rm_rf(@test_dir_path)
end

@inner_bag_path = "inner_test_bag"
Expand Down Expand Up @@ -176,7 +180,8 @@
end

it "returns true if the bag is valid with hidden files" do
result = InnerBagValidator.new(@inner_bag_path, @detect_hidden_yes).validate(@test_data_dir)
result = InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_yes)
.validate(@test_data_dir)
assert(result)
end

Expand All @@ -186,22 +191,23 @@
file.puts "Invalid line"
end
assert_raises(BagValidationError) do
InnerBagValidator.new(@inner_bag_path, @detect_hidden_yes).validate(@test_data_dir)
InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_yes)
.validate(@test_data_dir)
end
end

it "returns error if the bag path is not valid with hidden files" do
@random_path = @data_dir_path + "/test"
assert_raises(BagValidationError) do
InnerBagValidator.new(@inner_bag_path, @detect_hidden_yes).validate(@random_path)
InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_yes)
.validate(@random_path)
end
end
end

describe "#validate_inner_bag with hidden files and no detect hidden" do
# Set up the test environment
before do

@test_dir_path = File.join(__dir__, "test_bag_val_dir")

if Dir.exist?(@test_dir_path)
Expand Down Expand Up @@ -257,7 +263,8 @@
end

it "returns true if the bag is valid with hidden files" do
result = InnerBagValidator.new(@inner_bag_path, @detect_hidden_no).validate(@test_data_dir)
result = InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_no)
.validate(@test_data_dir)
assert(result)
end

Expand All @@ -267,14 +274,16 @@
file.puts "Invalid line"
end
assert_raises(BagValidationError) do
InnerBagValidator.new(@inner_bag_path, @detect_hidden_no).validate(@test_data_dir)
InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_no)
.validate(@test_data_dir)
end
end

it "returns error if the bag path is not valid with hidden files" do
@random_path = @data_dir_path + "/test"
assert_raises(BagValidationError) do
InnerBagValidator.new(@inner_bag_path, @detect_hidden_no).validate(@random_path)
InnerBagValidator.new(inner_bag_name: @inner_bag_path, detect_hidden: @detect_hidden_no)
.validate(@random_path)
end
end
end
Expand Down
5 changes: 4 additions & 1 deletion test/test_dispatcher.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,10 @@ def create_courier_with_dispatch
remote_client: RemoteClient::FileSystemRemoteClient.new("/some/path"),
remote_path: "some_subdir"
),
validator: InnerBagValidator.new("some-inner-bag-name", @detect_hidden)
validator: InnerBagValidator.new(
inner_bag_name: "some-inner-bag-name",
detect_hidden: @detect_hidden
)
)
end

Expand Down

0 comments on commit e8e9af0

Please sign in to comment.