public async Task Should_not_create_file_merge_mod_due_to_no_collection_name()
        {
            var messageBus = new Mock <IMessageBus>();

            messageBus.Setup(p => p.PublishAsync(It.IsAny <IMessageBusEvent>()));
            messageBus.Setup(p => p.Publish(It.IsAny <IMessageBusEvent>()));
            var storageProvider  = new Mock <IStorageProvider>();
            var modParser        = new Mock <IModParser>();
            var reader           = new Mock <IReader>();
            var modWriter        = new Mock <IModWriter>();
            var gameService      = new Mock <IGameService>();
            var mapper           = new Mock <IMapper>();
            var modPatchExporter = new Mock <IModPatchExporter>();
            var modMergeExporter = new Mock <IModMergeExporter>();
            var infoProvider     = new Mock <IDefinitionInfoProvider>();

            gameService.Setup(p => p.GetSelected()).Returns(new Game()
            {
                Type              = "Should_not_create_file_merge_mod_due_to_no_collection_name",
                UserDirectory     = "C:\\Users\\Fake",
                WorkshopDirectory = "C:\\Fake"
            });

            var service = new ModMergeService(new Cache(), messageBus.Object, modPatchExporter.Object, modMergeExporter.Object,
                                              new List <IDefinitionInfoProvider>()
            {
                infoProvider.Object
            }, reader.Object, modWriter.Object,
                                              modParser.Object, gameService.Object, storageProvider.Object, mapper.Object);

            var result = await service.MergeCollectionByFilesAsync(string.Empty);

            result.Should().BeNull();
        }
        public async Task Should_not_create_file_merge_mod_due_to_no_game_set()
        {
            var messageBus = new Mock <IMessageBus>();

            messageBus.Setup(p => p.PublishAsync(It.IsAny <IMessageBusEvent>()));
            messageBus.Setup(p => p.Publish(It.IsAny <IMessageBusEvent>()));
            var storageProvider  = new Mock <IStorageProvider>();
            var modParser        = new Mock <IModParser>();
            var reader           = new Mock <IReader>();
            var modWriter        = new Mock <IModWriter>();
            var gameService      = new Mock <IGameService>();
            var mapper           = new Mock <IMapper>();
            var modPatchExporter = new Mock <IModPatchExporter>();
            var modMergeExporter = new Mock <IModMergeExporter>();
            var infoProvider     = new Mock <IDefinitionInfoProvider>();

            gameService.Setup(p => p.GetSelected()).Returns((IGame)null);

            var service = new ModMergeService(new Cache(), messageBus.Object, modPatchExporter.Object, modMergeExporter.Object,
                                              new List <IDefinitionInfoProvider>()
            {
                infoProvider.Object
            }, reader.Object, modWriter.Object,
                                              modParser.Object, gameService.Object, storageProvider.Object, mapper.Object);

            var result = await service.MergeCollectionByFilesAsync("test");

            result.Should().BeNull();
        }
        public async Task Should_create_file_merge_mod()
        {
            var messageBus = new Mock <IMessageBus>();

            messageBus.Setup(p => p.PublishAsync(It.IsAny <IMessageBusEvent>()));
            messageBus.Setup(p => p.Publish(It.IsAny <IMessageBusEvent>()));
            var storageProvider  = new Mock <IStorageProvider>();
            var modParser        = new Mock <IModParser>();
            var reader           = new Mock <IReader>();
            var modWriter        = new Mock <IModWriter>();
            var gameService      = new Mock <IGameService>();
            var mapper           = new Mock <IMapper>();
            var modPatchExporter = new Mock <IModPatchExporter>();
            var modMergeExporter = new Mock <IModMergeExporter>();
            var infoProvider     = new Mock <IDefinitionInfoProvider>();

            modMergeExporter.Setup(p => p.ExportFilesAsync(It.IsAny <ModMergeFileExporterParameters>())).Returns(Task.FromResult(true));
            gameService.Setup(p => p.GetSelected()).Returns(new Game()
            {
                Type              = "Should_create_file_merge_mod",
                UserDirectory     = "C:\\Users\\Fake",
                WorkshopDirectory = "C:\\Fake"
            });
            var collections = new List <IModCollection>()
            {
                new ModCollection()
                {
                    IsSelected = true,
                    Mods       = new List <string>()
                    {
                        "mod/fakemod.mod"
                    },
                    Name = "test",
                    Game = "Should_create_file_merge_mod"
                }
            };

            storageProvider.Setup(s => s.GetModCollections()).Returns(() =>
            {
                return(collections);
            });
            var fileInfos = new List <IFileInfo>()
            {
                new FileInfo()
                {
                    Content = new List <string>()
                    {
                        "a"
                    },
                    FileName = "fakemod.mod",
                    IsBinary = false
                }
            };

            reader.Setup(s => s.Read(It.IsAny <string>(), It.IsAny <IEnumerable <string> >())).Returns(fileInfos);
            modParser.Setup(s => s.Parse(It.IsAny <IEnumerable <string> >())).Returns((IEnumerable <string> values) =>
            {
                return(new ModObject()
                {
                    FileName = values.First(),
                    Name = values.First()
                });
            });
            mapper.Setup(s => s.Map <IMod>(It.IsAny <IModObject>())).Returns((IModObject o) =>
            {
                return(new Mod()
                {
                    FileName = o.FileName,
                    Name = o.Name
                });
            });

            var service = new ModMergeService(new Cache(), messageBus.Object, modPatchExporter.Object, modMergeExporter.Object,
                                              new List <IDefinitionInfoProvider>()
            {
                infoProvider.Object
            }, reader.Object, modWriter.Object,
                                              modParser.Object, gameService.Object, storageProvider.Object, mapper.Object);

            var result = await service.MergeCollectionByFilesAsync("test");

            result.Should().NotBeNull();
        }