--- /dev/null
+# frozen_string_literal: true
+
+require "test_helper"
+
+require "walk_dir"
+
+class WalkDirTest < Minitest::Test
+ def test_is_duplicate
+ yes = %w(
+ Little_Women_bis.pdf
+ The_Autobiography_of_Benjamin_Franklin_ter.epub
+ Romeo_and_Juliet_quater.pdf
+ As_You_Like_It_quinquies.epub
+ )
+
+ no = %w(
+ Little_Women.pdf
+ The_Autobiography_of_Benjamin_Franklin.epub
+ Romeo_and_Juliet.pdf
+ As_You_Like_It.epub
+ )
+
+ walk_dir = create_walk_dir
+
+ yes.each do |filename|
+ assert_equal true, walk_dir.is_duplicate?(filename)
+ end
+
+ no.each do |filename|
+ assert_equal false, walk_dir.is_duplicate?(filename)
+ end
+ end
+
+ def test_remove_duplicates
+ input = %w(
+ 00_nonFiction/BenjaminFranklin/The_Autobiography_of_Benjamin_Franklin.epub
+ 00_nonFiction/BenjaminFranklin/The_Autobiography_of_Benjamin_Franklin.jpeg
+ 00_nonFiction/BenjaminFranklin/The_Autobiography_of_Benjamin_Franklin.pdf
+ LouisaAlcott/Little_Women.epub
+ FranklinDixon/HB001_The_Tower_Treasure.epub
+ FranklinDixon/HB001_The_Tower_Treasure.jpeg
+ FranklinDixon/HB001_The_Tower_Treasure.pdf
+ FranklinDixon/HB002_The_House_on_the_Cliff.epub
+ )
+
+ expected = %w(
+ 00_nonFiction/BenjaminFranklin/The_Autobiography_of_Benjamin_Franklin.epub
+ LouisaAlcott/Little_Women.epub
+ FranklinDixon/HB001_The_Tower_Treasure.epub
+ FranklinDixon/HB002_The_House_on_the_Cliff.epub
+ )
+
+ walk_dir = create_walk_dir
+ actual = walk_dir.remove_duplicates(input)
+
+ assert_equal expected, actual
+ end
+
+ def test_walk
+ root_entries = %w(
+ 00_nonFiction
+ LouisaAlcott
+ FranklinDixon
+ )
+
+ Dir.expects(:entries).with("./00_nonFiction").returns(%w(BenjaminFranklin))
+ Dir.expects(:entries).with("./00_nonFiction/BenjaminFranklin").returns(%w(
+ The_Autobiography_of_Benjamin_Franklin.epub
+ ))
+ Dir.expects(:entries).with("./LouisaAlcott").returns(["LW01_Little_Women.epub"])
+ Dir.expects(:entries).with("./FranklinDixon").returns(%w(
+ HB001_The_Tower_Treasure.epub
+ HB002_The_House_on_the_Cliff.epub
+ ))
+
+ %w(
+ ./00_nonFiction
+ ./00_nonFiction/BenjaminFranklin
+ ./LouisaAlcott
+ ./FranklinDixon
+ ).each do |path|
+ File.expects(:directory?).with(path).returns(true).at_least_once
+ File.expects(:symlink?).with(path).returns(false).at_least_once
+ end
+
+ %w(
+ ./00_nonFiction/BenjaminFranklin/The_Autobiography_of_Benjamin_Franklin.epub
+ ./LouisaAlcott/LW01_Little_Women.epub
+ ./FranklinDixon/HB001_The_Tower_Treasure.epub
+ ./FranklinDixon/HB002_The_House_on_the_Cliff.epub
+ ).each do |path|
+ File.expects(:directory?).with(path).returns(false).at_least_once
+ end
+
+ walk_dir = create_walk_dir(".", root_entries)
+ files = walk_dir.instance_variable_get(:@files)
+
+ expected = %w(
+ ./00_nonFiction/BenjaminFranklin/The_Autobiography_of_Benjamin_Franklin.epub
+ ./LouisaAlcott/LW01_Little_Women.epub
+ ./FranklinDixon/HB001_The_Tower_Treasure.epub
+ ./FranklinDixon/HB002_The_House_on_the_Cliff.epub
+ )
+
+ assert_equal expected, files
+ end
+
+ private
+
+ def create_walk_dir(root_path = "/does/not/exist", root_entries = [])
+ config_file = "quanlib.ini"
+ Dir.expects(:entries).with(root_path).returns(root_entries)
+
+ WalkDir.new(config_file, root_path)
+ end
+end