public async Task Should_export_mod_with_order_only()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();
            var isValid         = false;

            gameService.Setup(s => s.GetSelected()).Returns(new Game()
            {
                Type          = "no-items",
                UserDirectory = "C:\\fake"
            });
            modExport.Setup(p => p.ExportAsync(It.IsAny <ModCollectionExporterParams>())).Callback((ModCollectionExporterParams p) =>
            {
                if (p.File.Equals("file") && p.Mod.Name.Equals("fake") && p.ExportModOrderOnly)
                {
                    isValid = true;
                }
            });
            var modWriter = new Mock <IModWriter>();

            modWriter.Setup(p => p.ModDirectoryExists(It.IsAny <ModWriterParameters>())).Returns((ModWriterParameters p) =>
            {
                return(false);
            });

            var service = new ModCollectionService(null, null, new Cache(), null, null, modWriter.Object, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            await service.ExportAsync("file", new ModCollection()
            {
                Name = "fake"
            }, true);

            isValid.Should().BeTrue();
        }
        public async Task Should_not_import_mod()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            DISetup.SetupContainer();
            gameService.Setup(s => s.GetSelected()).Returns(new Game()
            {
                Type          = "no-items",
                UserDirectory = "C:\\fake"
            });
            modExport.Setup(p => p.ImportAsync(It.IsAny <ModCollectionExporterParams>())).Returns((ModCollectionExporterParams p) =>
            {
                p.Mod.Name = "fake";
                return(Task.FromResult(true));
            });
            modExport.Setup(p => p.ImportModDirectoryAsync(It.IsAny <ModCollectionExporterParams>())).Returns((ModCollectionExporterParams p) =>
            {
                return(Task.FromResult(false));
            });
            var modWriter = new Mock <IModWriter>();

            modWriter.Setup(p => p.ModDirectoryExists(It.IsAny <ModWriterParameters>())).Returns((ModWriterParameters p) =>
            {
                return(false);
            });

            var service = new ModCollectionService(null, null, new Cache(), null, null, modWriter.Object, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = await service.ImportAsync("file");

            result.Should().BeNull();
        }
        public void Should_return_mod_names()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            SetupMockCase(storageProvider, gameService);

            var service = new ModCollectionService(null, null, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);

            service.GetAll().Count().Should().Be(2);
        }
        public void Should_not_return_true_when_collection_exists()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            SetupMockCase(storageProvider, gameService);

            var service = new ModCollectionService(null, null, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = service.Exists("test101");

            result.Should().BeFalse();
        }
        public void Should_not_return_mod_names_when_no_selected_game()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            SetupMockCase(storageProvider, gameService);
            gameService.Setup(s => s.GetSelected()).Returns((IGame)null);

            var service = new ModCollectionService(null, null, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);

            service.GetAll().Count().Should().Be(0);
        }
        public void Should_not_return_mod_collection_object()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            SetupMockCase(storageProvider, gameService);

            var service = new ModCollectionService(null, null, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = service.Get("test3");

            result.Should().BeNull();
        }
        public void Should_not_delete_mod_collection()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            SetupMockCase(storageProvider, gameService);

            var service = new ModCollectionService(null, null, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = service.Delete("test3");

            result.Should().BeFalse();
            service.GetAll().Count().Should().Be(2);
        }
        public void Should_not_delete_mod_collection_when_collection_empty()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            SetupMockCase(storageProvider, gameService);
            storageProvider.Setup(s => s.GetModCollections()).Returns(new List <IModCollection>());

            var service = new ModCollectionService(null, null, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = service.Delete("test");

            result.Should().BeFalse();
            service.GetAll().Count().Should().Be(0);
        }
        public void Should_create_empty_mod_collection_object()
        {
            DISetup.SetupContainer();
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            SetupMockCase(storageProvider, gameService);

            var service = new ModCollectionService(null, null, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = service.Create();

            result.Name.Should().BeNullOrEmpty();
            result.Mods.Should().NotBeNull();
            result.Mods.Count().Should().Be(0);
            result.IsSelected.Should().BeFalse();
            result.Game.Should().Be("test");
        }
        public void Should_overwrite_existing_mod_object()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            SetupMockCase(storageProvider, gameService);

            var service = new ModCollectionService(null, null, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = service.Save(new ModCollection()
            {
                Name = "test",
                Game = "test"
            });

            result.Should().BeTrue();
            service.GetAll().Count().Should().Be(2);
        }
        public void Should_not_return_mod_collection_object_when_game_has_no_items()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            SetupMockCase(storageProvider, gameService);
            storageProvider.Setup(s => s.GetModCollections()).Returns(new List <IModCollection>());
            gameService.Setup(s => s.GetSelected()).Returns(new Game()
            {
                Type = "no-items"
            });

            var service = new ModCollectionService(null, null, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = service.Get("test2");

            result.Should().BeNull();
        }
        public void Should_throw_exception_when_saving_mod_object_with_no_game()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();

            SetupMockCase(storageProvider, gameService);
            var       service   = new ModCollectionService(null, null, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            Exception exception = null;

            try
            {
                service.Save(new ModCollection());
            }
            catch (Exception ex)
            {
                exception = ex;
            }
            exception.GetType().Should().Be(typeof(ArgumentNullException));
        }
        public async Task Should_not_export_hash_report()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();
            var modExport       = new Mock <IModCollectionExporter>();
            var hashExport      = new Mock <IReportExportService>();
            var messageBus      = new Mock <IMessageBus>();

            messageBus.Setup(p => p.PublishAsync(It.IsAny <IMessageBusEvent>()));
            messageBus.Setup(p => p.Publish(It.IsAny <IMessageBusEvent>()));
            DISetup.SetupContainer();

            var service = new ModCollectionService(messageBus.Object, hashExport.Object, new Cache(), null, null, null, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = await service.ExportHashReportAsync(null, "test");

            result.Should().BeFalse();

            result = await service.ExportHashReportAsync(new List <IMod>(), string.Empty);

            result.Should().BeFalse();
        }
        public async Task Should_export_hash_report()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();

            gameService.Setup(s => s.GetSelected()).Returns(new Game()
            {
                Type          = "no-items",
                UserDirectory = "C:\\fake",
                GameFolders   = new List <string>()
                {
                    "test"
                }
            });
            var collections = new List <IModCollection>()
            {
                new ModCollection()
                {
                    IsSelected = true,
                    Mods       = new List <string>()
                    {
                        "mod/fakemod.mod"
                    },
                    Name = "test",
                    Game = "no-items"
                }
            };

            storageProvider.Setup(s => s.GetModCollections()).Returns(() =>
            {
                return(collections);
            });
            var modExport  = new Mock <IModCollectionExporter>();
            var hashExport = new Mock <IReportExportService>();

            hashExport.Setup(p => p.ExportAsync(It.IsAny <IEnumerable <IHashReport> >(), It.IsAny <string>())).ReturnsAsync((IEnumerable <IHashReport> report, string path) =>
            {
                if (report.Count() == 1 && report.FirstOrDefault().Reports.Count == 1 && report.FirstOrDefault().Reports.FirstOrDefault().File == "test\\test" && report.FirstOrDefault().Reports.FirstOrDefault().Hash == "2")
                {
                    return(true);
                }
                return(false);
            });
            var messageBus = new Mock <IMessageBus>();

            messageBus.Setup(p => p.PublishAsync(It.IsAny <IMessageBusEvent>()));
            messageBus.Setup(p => p.Publish(It.IsAny <IMessageBusEvent>()));
            var reader = new Mock <IReader>();

            reader.Setup(p => p.GetFileInfo(It.IsAny <string>(), It.IsAny <string>())).Returns(new FileInfo()
            {
                ContentSHA = "2"
            });
            var modWriter = new Mock <IModWriter>();

            modWriter.Setup(p => p.ModDirectoryExistsAsync(It.IsAny <ModWriterParameters>())).Returns((ModWriterParameters p) =>
            {
                return(Task.FromResult(false));
            });
            DISetup.SetupContainer();

            var service = new ModCollectionService(messageBus.Object, hashExport.Object, new Cache(), null, reader.Object, modWriter.Object, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = await service.ExportHashReportAsync(new List <IMod>() {
                new Mod()
                {
                    Name  = "test",
                    Files = new List <string>()
                    {
                        "test\\test"
                    }
                }
            }, "test");

            result.Should().BeTrue();
        }
        public async Task Should_import_hash()
        {
            var storageProvider = new Mock <IStorageProvider>();
            var mapper          = new Mock <IMapper>();
            var gameService     = new Mock <IGameService>();

            gameService.Setup(s => s.GetSelected()).Returns(new Game()
            {
                Type          = "no-items",
                UserDirectory = "C:\\fake",
                GameFolders   = new List <string>()
                {
                    "test"
                }
            });
            var collections = new List <IModCollection>()
            {
                new ModCollection()
                {
                    IsSelected = true,
                    Mods       = new List <string>()
                    {
                        "mod/fakemod.mod"
                    },
                    Name = "test",
                    Game = "no-items"
                }
            };

            storageProvider.Setup(s => s.GetModCollections()).Returns(() =>
            {
                return(collections);
            });
            var modExport    = new Mock <IModCollectionExporter>();
            var innerReports = new List <IHashFileReport>()
            {
                new HashFileReport()
                {
                    File = "test\\1", Hash = "2"
                }
            };
            var outerReports = new List <IHashReport>()
            {
                new HashReport()
                {
                    Name = "testreport", Reports = innerReports
                }
            };
            var hashExport = new Mock <IReportExportService>();

            hashExport.Setup(p => p.GetCollectionReports(It.IsAny <IReadOnlyCollection <IHashReport> >())).Returns((IReadOnlyCollection <IHashReport> hashReports) =>
            {
                if (hashReports != null)
                {
                    return(hashReports.Where(p => p.ReportType == HashReportType.Collection).ToList());
                }
                return(null);
            });
            hashExport.Setup(p => p.CompareReports(It.IsAny <IReadOnlyCollection <IHashReport> >(), It.IsAny <IReadOnlyCollection <IHashReport> >())).Returns((IReadOnlyCollection <IHashReport> first, IReadOnlyCollection <IHashReport> second) =>
            {
                return(outerReports);
            });
            var messageBus = new Mock <IMessageBus>();

            messageBus.Setup(p => p.PublishAsync(It.IsAny <IMessageBusEvent>()));
            messageBus.Setup(p => p.Publish(It.IsAny <IMessageBusEvent>()));
            var reader = new Mock <IReader>();

            reader.Setup(p => p.GetFileInfo(It.IsAny <string>(), It.IsAny <string>())).Returns(new FileInfo()
            {
                FileName   = "2",
                ContentSHA = "3"
            });
            var modWriter = new Mock <IModWriter>();

            modWriter.Setup(p => p.ModDirectoryExistsAsync(It.IsAny <ModWriterParameters>())).Returns((ModWriterParameters p) =>
            {
                return(Task.FromResult(false));
            });
            DISetup.SetupContainer();

            var service = new ModCollectionService(messageBus.Object, hashExport.Object, new Cache(), null, reader.Object, modWriter.Object, null, gameService.Object, modExport.Object, storageProvider.Object, mapper.Object);
            var result  = await service.ImportHashReportAsync(new List <IMod>() {
                new Mod()
                {
                    Name  = "testreport",
                    Files = new List <string>()
                    {
                        "test\\test"
                    }
                }
            }, outerReports);

            result.Should().NotBeNull();
            result.Count().Should().Be(1);
            result.FirstOrDefault().Reports.Count.Should().Be(1);
        }