From cecfee26dcff30a61c8c1d67d304f91d4b191401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Tellnes?= Date: Thu, 8 Feb 2018 15:56:09 +0100 Subject: [PATCH] Do extensive unit(/integration) testing on documents directory handling --- .../Arkivverket.Arkade.Test.csproj | 11 +- .../Core/DocumentsDirectoryTest.cs | 108 ++++++++++++++++++ .../5000001.pdf => DOKUMENT/B.PDF} | Bin .../5000000.pdf => DOKUMENT/a.pdf} | Bin .../underkatalog/C.pdf} | Bin .../content/DOKUMENT/underkatalog/d.PDF | Bin 0 -> 18432 bytes .../DocumentfilesReferenceControlTest.cs | 55 ++++++--- 7 files changed, 154 insertions(+), 20 deletions(-) create mode 100644 src/Arkivverket.Arkade.Test/Core/DocumentsDirectoryTest.cs rename src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/{dokumenter/5000001.pdf => DOKUMENT/B.PDF} (100%) rename src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/{dokumenter/5000000.pdf => DOKUMENT/a.pdf} (100%) rename src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/{dokumenter/underkatalog/5000002.pdf => DOKUMENT/underkatalog/C.pdf} (100%) create mode 100644 src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/DOKUMENT/underkatalog/d.PDF diff --git a/src/Arkivverket.Arkade.Test/Arkivverket.Arkade.Test.csproj b/src/Arkivverket.Arkade.Test/Arkivverket.Arkade.Test.csproj index e31274d51..dc4857750 100644 --- a/src/Arkivverket.Arkade.Test/Arkivverket.Arkade.Test.csproj +++ b/src/Arkivverket.Arkade.Test/Arkivverket.Arkade.Test.csproj @@ -181,6 +181,7 @@ + @@ -344,7 +345,10 @@ Always - + + Always + + Always @@ -353,10 +357,10 @@ Always - + Always - + Always @@ -581,6 +585,7 @@ + diff --git a/src/Arkivverket.Arkade.Test/Core/DocumentsDirectoryTest.cs b/src/Arkivverket.Arkade.Test/Core/DocumentsDirectoryTest.cs new file mode 100644 index 000000000..cfc952c31 --- /dev/null +++ b/src/Arkivverket.Arkade.Test/Core/DocumentsDirectoryTest.cs @@ -0,0 +1,108 @@ +using System; +using System.IO; +using Arkivverket.Arkade.Core; +using FluentAssertions; +using Xunit; + +namespace Arkivverket.Arkade.Test.Core +{ + public class DocumentsDirectoryTest + { + private static DirectoryInfo _physicalWorkingDirectory; + + public DocumentsDirectoryTest() + { + _physicalWorkingDirectory = new DirectoryInfo( + Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestData", "DocumentDirectoryTest") + ); + + if (!_physicalWorkingDirectory.Exists) + _physicalWorkingDirectory.Create(); + } + + [Fact] + [Trait("Category", "Integration")] + public void ArhiveDetectsDocumentsDirectoriesWithSupportedNames() + { + // Plural, lowercase documents directory name: + DirectoryInfo documentsDirectoryA = SetupArchiveWithPhysicalDocumentsDirectory("dokumenter"); + documentsDirectoryA.Name.Should().Be("dokumenter"); + documentsDirectoryA.Exists.Should().BeTrue(); + + // Plural, uppercase documents directory name: + DirectoryInfo documentsDirectoryB = SetupArchiveWithPhysicalDocumentsDirectory("DOKUMENTER"); + documentsDirectoryB.Name.Should().Be("DOKUMENTER"); + documentsDirectoryB.Exists.Should().BeTrue(); + + // Singular, lowercase documents directory name: + DirectoryInfo documentsDirectoryC = SetupArchiveWithPhysicalDocumentsDirectory("dokument"); + documentsDirectoryC.Name.Should().Be("dokument"); + documentsDirectoryC.Exists.Should().BeTrue(); + + // Singular, uppercase documents directory name: + DirectoryInfo documentsDirectoryD = SetupArchiveWithPhysicalDocumentsDirectory("DOKUMENT"); + documentsDirectoryD.Name.Should().Be("DOKUMENT"); + documentsDirectoryD.Exists.Should().BeTrue(); + } + + [Fact] + [Trait("Category", "Integration")] + public void DocumentsDirectoriesWithUnsupportedNamesResultsInFallback() + { + // Mixed case documents directory name: + DirectoryInfo documentsDirectoryA = SetupArchiveWithPhysicalDocumentsDirectory("Dokumenter"); + documentsDirectoryA.Name.Should().Be("dokumenter"); + + // English documents directory name: + DirectoryInfo documentsDirectoryB = SetupArchiveWithPhysicalDocumentsDirectory("documenter"); + documentsDirectoryB.Name.Should().Be("dokumenter"); + } + + [Fact] + [Trait("Category", "Integration")] + public void MissingDocumentsDirectoryResultsInFallback() + { + // Missing documents directory: + DirectoryInfo documentsDirectoryA = SetupArchiveWithPhysicalDocumentsDirectory(string.Empty); + documentsDirectoryA.Name.Should().Be("dokumenter"); + documentsDirectoryA.Exists.Should().BeFalse(); + } + + private static DirectoryInfo SetupArchiveWithPhysicalDocumentsDirectory(string documentsDirectoryName) + { + // Remove any existing document directories: + RemovePhysicalContentsDirectory(); + + // Make new archive to reset any existing documentsdirectory reference: + Archive archive = SetupArchive(); + + // Create an actual documentsdirectory for the archive to look for: + CreatePhysicalDocumentsDirectory(documentsDirectoryName); + + // Return what the archive has defined as its documentsdirectory: + return archive.GetDocumentsDirectory(); + } + private static void RemovePhysicalContentsDirectory() + { + var contentDirectory = new DirectoryInfo(Path.Combine(_physicalWorkingDirectory.FullName, "content")); + + if (contentDirectory.Exists) + contentDirectory.Delete(true); + } + + private static Archive SetupArchive() + { + return new ArchiveBuilder() + .WithArchiveType(ArchiveType.Noark5) + .WithWorkingDirectoryRoot(_physicalWorkingDirectory.FullName) + .Build(); + } + + private static void CreatePhysicalDocumentsDirectory(string documentsDirectoryName) + { + Directory.CreateDirectory( + Path.Combine(_physicalWorkingDirectory.FullName, "content", documentsDirectoryName) + ); + } + } +} diff --git a/src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/dokumenter/5000001.pdf b/src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/DOKUMENT/B.PDF similarity index 100% rename from src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/dokumenter/5000001.pdf rename to src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/DOKUMENT/B.PDF diff --git a/src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/dokumenter/5000000.pdf b/src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/DOKUMENT/a.pdf similarity index 100% rename from src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/dokumenter/5000000.pdf rename to src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/DOKUMENT/a.pdf diff --git a/src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/dokumenter/underkatalog/5000002.pdf b/src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/DOKUMENT/underkatalog/C.pdf similarity index 100% rename from src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/dokumenter/underkatalog/5000002.pdf rename to src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/DOKUMENT/underkatalog/C.pdf diff --git a/src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/DOKUMENT/underkatalog/d.PDF b/src/Arkivverket.Arkade.Test/TestData/Noark5/DocumentfilesControl/FilesToBeReferenced/content/DOKUMENT/underkatalog/d.PDF new file mode 100644 index 0000000000000000000000000000000000000000..a1abeda36cab41a5f6065fa76f5dc15a6f3d386a GIT binary patch literal 18432 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 r.Message.Equals( - "Ikke-referert fil funnet: dokumenter/5000001.pdf") + "Ikke-referert fil funnet: DOKUMENT/underkatalog/d.PDF") ); testRun.Results.Count.Should().Be(1);