public async Task GeoCliInput_Default_HappyFlow() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { "/test.jpg" }, new List <byte[]> { CreateAnImage.Bytes }); var hash = (await new FileHash(storage).GetHashCodeAsync("/test.jpg")).Key; storage.FileCopy("/test.jpg", $"/{hash}.jpg"); var geoWrite = new FakeIGeoLocationWrite(); var geoLookup = new FakeIGeoReverseLookup(); var console = new FakeConsoleWrapper(); var geoCli = new GeoCli(geoLookup, geoWrite, new FakeSelectorStorage(storage), new AppSettings(), console, new FakeIGeoFileDownload(), new FakeExifToolDownload()); await geoCli.CommandLineAsync(new List <string> { "-p", }.ToArray()); Assert.AreEqual(1, geoLookup.Count); Assert.IsTrue(storage.ExistFile($"/{hash}.jpg")); Assert.IsTrue(storage.ExistFile("/test.jpg")); }
public async Task CreateThumbTest_FileHash_SkipExtraLarge() { var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { _fakeIStorageImageSubPath }, new List <byte[]> { CreateAnImage.Bytes }); var fileHash = "test_hash"; // skip xtra large var isCreated = await new Thumbnail(storage, storage, new FakeIWebLogger()).CreateThumb( _fakeIStorageImageSubPath, fileHash, true); Assert.AreEqual(true, isCreated); Assert.AreEqual(true, storage.ExistFile(fileHash)); Assert.AreEqual(true, storage.ExistFile( ThumbnailNameHelper.Combine(fileHash, ThumbnailSize.Small))); Assert.AreEqual(false, storage.ExistFile( ThumbnailNameHelper.Combine(fileHash, ThumbnailSize.ExtraLarge))); }
public async Task Rename_Move_FileToDeleted_Collections() { var fromItemJpg = "/child_folder/test_21.jpg"; var fromItemDng = "/child_folder/test_21.dng"; var toItemJpg = "/child_folder/test_21_edit.jpg"; var toItemDng = "/child_folder/test_21_edit.dng"; await _query.AddItemAsync(new FileIndexItem(fromItemJpg)); await _query.AddItemAsync(new FileIndexItem(fromItemDng)); await _query.AddParentItemsAsync(fromItemDng); var iStorage = new FakeIStorage(new List <string> { "/", "/child_folder", "/child_folder2" }, new List <string> { fromItemJpg, fromItemDng }); // only say: fromItemJpg > toItemJpg var renameFs1 = await new RenameService(_query, iStorage) .Rename(fromItemJpg, toItemJpg); var renameFs = renameFs1.Where(p => p.Status != FileIndexItem.ExifStatus.NotFoundSourceMissing).ToList(); // it has moved the files Assert.IsFalse(iStorage.ExistFile(fromItemJpg)); Assert.IsFalse(iStorage.ExistFile(fromItemDng)); Assert.IsTrue(iStorage.ExistFile(toItemJpg)); Assert.IsTrue(iStorage.ExistFile(toItemDng)); var toItemJpgItem = renameFs .FirstOrDefault(p => p.FilePath == toItemJpg); var toItemDngItem = renameFs .FirstOrDefault(p => p.FilePath == toItemDng); Assert.AreEqual(toItemJpg, toItemJpgItem.FilePath); Assert.AreEqual(toItemDng, toItemDngItem.FilePath); Assert.AreEqual(FileIndexItem.ExifStatus.Ok, toItemJpgItem.Status); Assert.AreEqual(FileIndexItem.ExifStatus.Ok, toItemDngItem.Status); // // and the database is ok Assert.AreEqual(toItemJpg, _query.SingleItem(toItemJpg).FileIndexItem.FilePath); Assert.AreEqual(toItemDng, _query.SingleItem(toItemDng).FileIndexItem.FilePath); }
public async Task Json_Write() { var fakeStorage = new FakeIStorage(); await new FileIndexItemJsonParser(fakeStorage).WriteAsync(new FileIndexItem("/test.jpg")); Assert.IsTrue(fakeStorage.ExistFile("/.starsky.test.jpg.json")); }
public async Task UpdateAppSettingsTest_StorageFolder_JsonCheck() { var storage = new FakeIStorage(new List <string> { "test" }); Environment.SetEnvironmentVariable("app__storageFolder", string.Empty); var appSettings = new AppSettings { AppSettingsPath = $"{Path.DirectorySeparatorChar}temp{Path.DirectorySeparatorChar}appsettings.json" }; var controller = new AppSettingsController(appSettings, new FakeSelectorStorage(storage)); await controller.UpdateAppSettings( new AppSettingsTransferObject { Verbose = true, StorageFolder = "test" }); Assert.IsTrue(storage.ExistFile(appSettings.AppSettingsPath)); var jsonContent = await new PlainTextFileHelper().StreamToStringAsync( storage.ReadStream(appSettings.AppSettingsPath)); Assert.IsTrue(jsonContent.Contains("app\": {")); Assert.IsTrue(jsonContent.Contains("\"StorageFolder\": \"")); }
public async Task Rename_Move_SidecarFile_ShouldMove_FileToFolder() { // var item1 = "/child_folder/test_20.jpg"; var item1dng = "/child_folder/test_20.dng"; var item1SideCar = "/child_folder/test_20.xmp"; // _query.AddItem(new FileIndexItem(item1)); await _query.AddItemAsync(new FileIndexItem(item1dng)); await _query.AddParentItemsAsync(item1dng); var iStorage = new FakeIStorage(new List <string> { "/", "/child_folder", "/child_folder2" }, new List <string> { item1dng, item1SideCar }); // item1 // Move DNG to different folder var renameFs = await new RenameService(_query, iStorage) .Rename(item1dng, "/child_folder2"); Assert.AreEqual(item1dng, renameFs[0].FilePath); Assert.AreEqual(item1dng.Replace("child_folder", "child_folder2"), renameFs[1].FilePath); // did move the side car file Assert.IsTrue(iStorage.ExistFile(item1SideCar.Replace("child_folder", "child_folder2"))); }
public void Delete_IsFileRemoved() { var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { "/test.jpg" }, new List <byte[]> { FakeCreateAn.CreateAnImage.Bytes }); var selectorStorage = new FakeSelectorStorage(storage); var fakeQuery = new FakeIQuery(new List <FileIndexItem> { new FileIndexItem("/test.jpg") { Tags = "!delete!" } }); var deleteItem = new DeleteItem(fakeQuery, new AppSettings(), selectorStorage); var result = deleteItem.Delete("/test.jpg", true); Assert.AreEqual(FileIndexItem.ExifStatus.Ok, result.FirstOrDefault().Status); Assert.IsNull(fakeQuery.GetObjectByFilePath("/test.jpg")); Assert.IsFalse(storage.ExistFile("/test.jpg")); }
public async Task PreGenerateThumbnail_Test() { var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { "/test.jpg" }, new List <byte[]> { CreateAnImageNoExif.Bytes }); var selectorStorage = new FakeSelectorStorage(storage); var service = new WebHtmlPublishService(null, selectorStorage, null, null, null, null, new FakeIWebLogger()); var input = new List <FileIndexItem> { new FileIndexItem("/test.jpg") { FileHash = "test_hash_01" } }.AsEnumerable(); await service.PreGenerateThumbnail(input, ""); Assert.IsTrue(storage.ExistFile("test_hash_01")); }
public async Task ExifToolCmdHelper_TestForFakeExifToolInjection() { var folderPaths = new List <string> { "/" }; var inputSubPaths = new List <string> { "/test.dng" }; var storage = new FakeIStorage(folderPaths, inputSubPaths, new List <byte[]> { FakeCreateAn.CreateAnImage.Bytes }); var readMeta = new ReadMeta(storage); var fakeExifTool = new FakeExifTool(storage, _appSettings); await new ExifCopy(storage, storage, fakeExifTool, readMeta).XmpSync("/test.dng"); Assert.AreEqual(true, storage.ExistFile("/test.xmp")); var xmpContentReadStream = storage.ReadStream("/test.xmp"); var xmpContent = await new PlainTextFileHelper().StreamToStringAsync(xmpContentReadStream); // Those values are injected by fakeExifTool Assert.AreEqual(true, xmpContent.Contains("<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 11.30'>")); Assert.AreEqual(true, xmpContent.Contains("<rdf:li>test</rdf:li>")); }
public async Task Rename_Move_SidecarFile_ShouldNotMove_FileToFolder_ItsAJpeg() { var item1 = "/child_folder/test_20.jpg"; var item1SideCar = "/child_folder/test_20.xmp"; await _query.AddItemAsync(new FileIndexItem(item1)); await _query.AddParentItemsAsync(item1); var iStorage = new FakeIStorage(new List <string> { "/", "/child_folder", "/child_folder2" }, new List <string> { item1, item1SideCar }); // Move Jpg to different folder but the xmp should be ignored var renameFs = await new RenameService(_query, iStorage) .Rename(item1, "/child_folder2"); Assert.AreEqual(item1, renameFs.FirstOrDefault().FilePath); Assert.AreEqual(item1.Replace("child_folder", "child_folder2"), renameFs[1].FilePath); // it should not move the sidecar file Assert.IsFalse(iStorage.ExistFile(item1SideCar.Replace("child_folder", "child_folder2"))); }
public async Task GeoCliInput_AbsolutePath_HappyFlow() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { "/test.jpg" }, new List <byte[]> { CreateAnImage.Bytes }); var appSettings = new AppSettings { Verbose = true }; var geoWrite = new FakeIGeoLocationWrite(); var geoLookup = new FakeIGeoReverseLookup(); var console = new FakeConsoleWrapper(); var geoCli = new GeoCli(geoLookup, geoWrite, new FakeSelectorStorage(storage), appSettings, console, new FakeIGeoFileDownload(), new FakeExifToolDownload()); await geoCli.CommandLineAsync(new List <string> { "-p", "/test" }.ToArray()); Assert.AreEqual(appSettings.StorageFolder, "/test" + Path.DirectorySeparatorChar); Assert.AreEqual(1, geoLookup.Count); Assert.IsTrue(storage.ExistFile("/test.jpg")); }
public void PublishCreate_existItem_Force() { var appSettings = new AppSettings { TempFolder = Path.DirectorySeparatorChar.ToString() }; var storage = new FakeIStorage(new List <string> { Path.DirectorySeparatorChar + "test" }, new List <string> { Path.DirectorySeparatorChar + "test.zip" }); var controller = new PublishController(appSettings, new FakeIPublishPreflight(), new FakeIWebHtmlPublishService(), new FakeIMetaInfo(new List <FileIndexItem> { new FileIndexItem("/test.jpg") { Status = FileIndexItem.ExifStatus.Ok } }), new FakeSelectorStorage(storage), _bgTaskQueue, new FakeIWebLogger()); var actionResult = controller.PublishCreate("/test.jpg", "test", "test", true) as JsonResult; var result = actionResult.Value as string; Assert.AreEqual("test", result); Assert.IsFalse(storage.ExistFolder(Path.DirectorySeparatorChar + "test")); Assert.IsFalse(storage.ExistFile(Path.DirectorySeparatorChar + "test.zip")); }
public async Task GenerateJpeg_Thumbnail_CorruptOutput_Test() { var appSettings = new AppSettings { PublishProfiles = new Dictionary <string, List <AppSettingsPublishProfiles> > { { "default", new List <AppSettingsPublishProfiles> { new AppSettingsPublishProfiles { ContentType = TemplateContentType.Jpeg, Path = "index.html", MetaData = true, } } } }, Verbose = true }; var storage = new FakeIStorage(new List <string>(), new List <string> { "corrupt" }, new List <byte[]> { CreateAnImage.Bytes }); var selectorStorage = new FakeSelectorStorage(storage); var service = new WebHtmlPublishService(new PublishPreflight(appSettings, new ConsoleWrapper()), selectorStorage, appSettings, new FakeExifTool(storage, appSettings), new FakeIOverlayImage(selectorStorage), new ConsoleWrapper(), new FakeIWebLogger()); var profiles = new PublishPreflight(appSettings, new ConsoleWrapper()).GetPublishProfileName("default"); var generateJpeg = await service.GenerateJpeg(profiles.FirstOrDefault(), new List <FileIndexItem> { new FileIndexItem("/test.jpg") { FileHash = "fileHash" } }, Path.DirectorySeparatorChar.ToString(), 1); // should not output file due corrupt output of image generation Assert.IsTrue(generateJpeg.ContainsKey("test.jpg")); // removed in script due corrupt output Assert.IsFalse(storage.ExistFile(Path.DirectorySeparatorChar + "test.jpg")); }
public async Task Image_WithThumbnail_InMemoryIntegrationTest() { var selectorStorage = new FakeSelectorStorage(_iStorageFake); var logger = new FakeIWebLogger(); var result = await new MetaExifThumbnailService(new AppSettings(), selectorStorage, new OffsetDataMetaExifThumbnail(selectorStorage, logger), new WriteMetaThumbnailService(selectorStorage, logger, new AppSettings()), logger) .AddMetaThumbnail("/poppy.jpg", "/meta_image"); Assert.IsTrue(result); Assert.IsTrue(_iStorageFake.ExistFile("/meta_image@meta")); }
public async Task ThumbnailCleanerTestAsync_Cleaner_WithDifferentSizes() { var fakeStorage = new FakeIStorage(new List <string> { "/" }, new List <string> { ThumbnailNameHelper.Combine("hash1234", ThumbnailSize.Large), ThumbnailNameHelper.Combine("hash1234", ThumbnailSize.ExtraLarge), ThumbnailNameHelper.Combine("hash1234", ThumbnailSize.TinyMeta), ThumbnailNameHelper.Combine("exist", ThumbnailSize.TinyMeta), ThumbnailNameHelper.Combine("exist", ThumbnailSize.ExtraLarge), ThumbnailNameHelper.Combine("exist", ThumbnailSize.TinyMeta), ThumbnailNameHelper.Combine("exist", ThumbnailSize.Large), ThumbnailNameHelper.Combine("12234456677", ThumbnailSize.ExtraLarge), }); var fakeQuery = new FakeIQuery(new List <FileIndexItem> { new FileIndexItem("/test.jpg") { FileHash = "exist" } }); var thumbnailCleaner = new ThumbnailCleaner(fakeStorage, fakeQuery, new FakeIWebLogger()); await thumbnailCleaner.CleanAllUnusedFilesAsync(1); Assert.IsTrue(fakeStorage.ExistFile( ThumbnailNameHelper.Combine("exist", ThumbnailSize.TinyMeta))); Assert.IsTrue(fakeStorage.ExistFile( ThumbnailNameHelper.Combine("exist", ThumbnailSize.ExtraLarge))); Assert.IsTrue(fakeStorage.ExistFile( ThumbnailNameHelper.Combine("exist", ThumbnailSize.Large))); Assert.IsTrue(fakeStorage.ExistFile( ThumbnailNameHelper.Combine("exist", ThumbnailSize.TinyMeta))); Assert.IsFalse(fakeStorage.ExistFile( ThumbnailNameHelper.Combine("hash1234", ThumbnailSize.TinyMeta))); Assert.IsFalse(fakeStorage.ExistFile( ThumbnailNameHelper.Combine("hash1234", ThumbnailSize.ExtraLarge))); Assert.IsFalse(fakeStorage.ExistFile( ThumbnailNameHelper.Combine("hash1234", ThumbnailSize.Large))); Assert.IsFalse(fakeStorage.ExistFile( ThumbnailNameHelper.Combine("12234456677", ThumbnailSize.ExtraLarge))); }
public void ExtractTarGz() { // Gz Tar! var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { }); var memoryStream = new MemoryStream(CreateAnExifToolTarGz.Bytes); new TarBal(storage).ExtractTarGz(memoryStream, "/test"); Assert.IsTrue(storage.ExistFile("/test/Image-ExifTool-11.99/exiftool")); }
public async Task GenerateJpeg_Large_Test() { var appSettings = new AppSettings { PublishProfiles = new Dictionary <string, List <AppSettingsPublishProfiles> > { { "default", new List <AppSettingsPublishProfiles> { new AppSettingsPublishProfiles { ContentType = TemplateContentType.Jpeg, Path = "index.html", MetaData = false, SourceMaxWidth = 1001 } } } }, Verbose = true }; var storage = new FakeIStorage(new List <string>(), new List <string> { "/test.jpg" }, new List <byte[]> { CreateAnImage.Bytes }); var selectorStorage = new FakeSelectorStorage(storage); var service = new WebHtmlPublishService(new PublishPreflight(appSettings, new ConsoleWrapper()), selectorStorage, appSettings, new FakeExifTool(storage, appSettings), new FakeIOverlayImage(selectorStorage), new ConsoleWrapper(), new FakeIWebLogger()); var profiles = new PublishPreflight(appSettings, new ConsoleWrapper()).GetPublishProfileName("default"); var generateJpeg = await service.GenerateJpeg(profiles.FirstOrDefault(), new List <FileIndexItem> { new FileIndexItem("/test.jpg") }, Path.DirectorySeparatorChar.ToString(), 1); Assert.IsTrue(generateJpeg.ContainsKey("test.jpg")); Assert.IsTrue(storage.ExistFile(Path.DirectorySeparatorChar + "test.jpg")); }
public void ExportManifestTest_Export() { var plainTextFileHelper = new FakePlainTextFileHelper(); var appSettings = new AppSettings(); var storage = new FakeIStorage(); new PublishManifest(storage, plainTextFileHelper) .ExportManifest(appSettings.StorageFolder, "Test", new Dictionary <string, bool>()); var expectedPath = Path.Combine(appSettings.StorageFolder, "_settings.json"); Assert.IsTrue(storage.ExistFile(expectedPath)); }
public async Task SwaggerTest_Integration_Test() { var swaggerFilePath = Path.Join(_appSettings.TempFolder, _appSettings.Name.ToLowerInvariant() + ".json"); var storage = new FakeIStorage(); var fakeSelectorStorage = new FakeSelectorStorage(storage); var host = WebHost.CreateDefaultBuilder() .UseUrls("http://localhost:5051") .ConfigureServices(services => { services.AddMvcCore().AddApiExplorer(); services.AddSwaggerGen(); new SwaggerSetupHelper(_appSettings).Add01SwaggerGenHelper(services); }) .Configure(app => { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); }); new SwaggerSetupHelper(_appSettings).Add02AppUseSwaggerAndUi(app); using (var serviceScope = app.ApplicationServices .GetRequiredService <IServiceScopeFactory>() .CreateScope()) { var swaggerProvider = ( ISwaggerProvider )serviceScope.ServiceProvider.GetService(typeof(ISwaggerProvider)); new SwaggerExportHelper(null).Add03AppExport(_appSettings, fakeSelectorStorage, swaggerProvider); } }).Build(); await host.StartAsync(); await host.StopAsync(); Assert.AreEqual(true, storage.ExistFile(swaggerFilePath)); var swaggerFileContent = await new PlainTextFileHelper().StreamToStringAsync( storage.ReadStream(swaggerFilePath)); System.Console.WriteLine("swaggerFileContent " + swaggerFileContent); Assert.AreEqual(true, swaggerFileContent.Contains($"\"Title\": \"{_appSettings.Name}\"")); }
public async Task WriteAndCropFile_FileIsWritten() { var storage = new FakeIStorage(); var service = new WriteMetaThumbnailService(new FakeSelectorStorage(storage), new FakeIWebLogger(), new AppSettings()); var result = await service.WriteAndCropFile("test", new OffsetModel { Count = CreateAnImage.Bytes.Length, Data = CreateAnImage.Bytes, Index = 0 }, 6, 6, FileIndexItem.Rotation.Horizontal); Assert.IsTrue(result); Assert.IsTrue(storage.ExistFile(ThumbnailNameHelper.Combine("test", ThumbnailSize.TinyMeta))); }
public async Task MoveSourceFiles_False() { var profile = new AppSettingsPublishProfiles { ContentType = TemplateContentType.MoveSourceFiles, Folder = "src", }; var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { "/test.jpg" }); var selectorStorage = new FakeSelectorStorage(storage); var appSettings = new AppSettings { PublishProfiles = new Dictionary <string, List <AppSettingsPublishProfiles> > { { "default", new List <AppSettingsPublishProfiles> { profile } } }, Verbose = true }; var service = new WebHtmlPublishService(new PublishPreflight(appSettings, new ConsoleWrapper()), selectorStorage, appSettings, new FakeExifTool(storage, appSettings), new FakeIOverlayImage(selectorStorage), new ConsoleWrapper(), new FakeIWebLogger()); await service.GenerateMoveSourceFiles(profile, new List <FileIndexItem> { new FileIndexItem("/test.jpg") }, "/", false); // False situation Assert.IsTrue(storage.GetAllFilesInDirectoryRecursive("/") .FirstOrDefault(p => p != null && p.Contains("src/test.jpg")) != null); // is True instead of False Assert.IsTrue(storage.ExistFile("/test.jpg")); }
public async Task ThumbnailCleanerTestAsync_CatchException() { var fakeStorage = new FakeIStorage(new List <string> { "/" }, new List <string> { ThumbnailNameHelper.Combine("hash1234", ThumbnailSize.Large), }); var fakeQuery = new FakeIQueryException(new Microsoft.EntityFrameworkCore.Storage.RetryLimitExceededException()); var thumbnailCleaner = new ThumbnailCleaner(fakeStorage, fakeQuery, new FakeIWebLogger()); await thumbnailCleaner.CleanAllUnusedFilesAsync(); // the file is there even the connection is crashed Assert.IsTrue(fakeStorage.ExistFile( ThumbnailNameHelper.Combine("hash1234", ThumbnailSize.Large))); }
public async Task CreateXmpFileIsNotExist_CreateFile_dng() { var updateModel = new FileIndexItem { LocationAltitude = -41, }; var folderPaths = new List <string> { "/" }; var inputSubPaths = new List <string> { "/test.dng" }; var storage = new FakeIStorage(folderPaths, inputSubPaths, null); var fakeExifTool = new FakeExifTool(storage, _appSettings); await new ExifToolCmdHelper(fakeExifTool, storage, storage, new FakeReadMeta()).CreateXmpFileIsNotExist(updateModel, inputSubPaths); Assert.IsTrue(storage.ExistFile("/test.xmp")); }
public async Task GeoCliInput_RelativeUrl_HappyFlow() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var relativeParentFolder = new AppSettings().DatabasePathToFilePath( new StructureService(new FakeIStorage(), new AppSettings().Structure) .ParseSubfolders(0), false); var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { "/test.jpg" }, new List <byte[]> { CreateAnImage.Bytes }); var appSettings = new AppSettings(); var geoWrite = new FakeIGeoLocationWrite(); var geoLookup = new FakeIGeoReverseLookup(); var console = new FakeConsoleWrapper(); var geoCli = new GeoCli(geoLookup, geoWrite, new FakeSelectorStorage(storage), appSettings, console, new FakeIGeoFileDownload(), new FakeExifToolDownload()); await geoCli.CommandLineAsync(new List <string> { "-g", "0" }.ToArray()); Assert.AreEqual(appSettings.StorageFolder, relativeParentFolder + Path.DirectorySeparatorChar); Assert.AreEqual(1, geoLookup.Count); Assert.IsTrue(storage.ExistFile("/test.jpg")); }