public void ChaneHierarchicalResetState_should_be_true() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = "test\\" + i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString(), ResetType = ResetType.Resolved }); } var service = new IndexedDefinitions(); service.InitMap(defs, true); var results = service.ChangeHierarchicalResetState(new Definition() { ResetType = ResetType.None, Id = "1", Type = "1", File = "test\\1" }); results.Should().BeTrue(); }
public void HasGameDefinitions_should_be_true() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = "test\\" + i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString(), IsFromGame = true }); } var service = new IndexedDefinitions(); service.InitMap(defs); var results = service.HasGameDefinitions(); results.Should().BeTrue(); }
public async Task Should_not_load_definitions_when_no_version() { var storageProvider = new Mock <IStorageProvider>(); var modParser = new Mock <IModParser>(); var parserManager = new Mock <IParserManager>(); var reader = new Mock <IReader>(); var modWriter = new Mock <IModWriter>(); var gameService = new Mock <IGameService>(); var mapper = new Mock <IMapper>(); var gameIndexer = new Mock <IGameIndexer>(); var defs = new IndexedDefinitions(); defs.InitMap(new List <IDefinition>() { new Definition() { Type = "test", Id = "1", ModName = "test" } }); var service = GetService(gameIndexer, storageProvider, modParser, parserManager, reader, mapper, modWriter, gameService); var result = await service.LoadDefinitionsAsync(defs, new Game(), new List <string>() { string.Empty }); result.Should().Be(defs); }
public void Returns_all_definitions_and_added_definitions() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString() }); } var service = new IndexedDefinitions(); service.InitMap(defs); service.AddToMap(new Definition() { Code = "a", Id = "14", Type = "14" }); var results = service.GetAll(); results.Count().Should().Be(defs.Count + 1); }
public void Should_find_definition() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString(), Tags = new List <string>() { i.ToString() } }); } var service = new IndexedDefinitions(); service.InitMap(defs); service.InitSearch(); var results = service.SearchDefinitions("1"); results.Count().Should().Be(1); results.First().Id.Should().Be("1"); }
public void Should_exist_by_file() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString() }); } var service = new IndexedDefinitions(); service.InitMap(defs); var results = service.ExistsByFile("1"); results.Should().BeTrue(); }
public void HasResetDefinitions_should_be_false_due_to_no_hierarchical_definition() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = "test\\" + i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString(), ResetType = ResetType.Resolved }); } var service = new IndexedDefinitions(); service.InitMap(defs); var results = service.HasResetDefinitions(); results.Should().BeFalse(); }
public void Deletes_specified_definition() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString() }); } var service = new IndexedDefinitions(); service.InitMap(defs, true); service.Remove(defs.First()); var result = service.GetAll(); result.Count().Should().Be(defs.Count - 1); result.FirstOrDefault(p => p.Id == "0").Should().BeNull(); var hierarchalResult = service.GetHierarchicalDefinitions(); hierarchalResult.First().Children.Count.Should().Be(defs.Count - 1); hierarchalResult.First().Children.FirstOrDefault(p => p.Key.StartsWith("0")).Should().BeNull(); service.GetByTypeAndId(defs.First().TypeAndId).Count().Should().Be(0); }
public async Task Should_not_load_definitions_when_definitions_dont_exist() { var storageProvider = new Mock <IStorageProvider>(); var modParser = new Mock <IModParser>(); var parserManager = new Mock <IParserManager>(); var reader = new Mock <IReader>(); var modWriter = new Mock <IModWriter>(); var gameService = new Mock <IGameService>(); var mapper = new Mock <IMapper>(); var gameIndexer = new Mock <IGameIndexer>(); storageProvider.Setup(p => p.GetRootStoragePath()).Returns("c:\\test"); gameIndexer.Setup(p => p.GameVersionsSameAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <IEnumerable <string> >())).Returns((string p1, IGame p2, IEnumerable <string> p3) => Task.FromResult(false)); var defs = new IndexedDefinitions(); defs.InitMap(new List <IDefinition>() { new Definition() { Type = "test", Id = "1", ModName = "test" } }); var service = GetService(gameIndexer, storageProvider, modParser, parserManager, reader, mapper, modWriter, gameService); var result = await service.LoadDefinitionsAsync(defs, new Game(), new List <string>() { "3.0.3" }); result.Should().Be(defs); }
public void Returns_hierarchical_objects() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = i < 3 ? "file" : i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i > 3 && i < 6 ? "type" : i.ToString() }); } var service = new IndexedDefinitions(); service.InitMap(defs, true); var results = service.GetHierarchicalDefinitions(); results.Count().Should().Be(1); results.First().Children.Count.Should().Be(10); }
public void Returns_all_directory_keys() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = "test\\" + i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString() }); } var service = new IndexedDefinitions(); service.InitMap(defs); var results = service.GetAllDirectoryKeys(); results.Count().Should().Be(1); }
public void Returns_by_parent_directory() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 3; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = "events\\" + i.ToString() + ".txt", Id = i.ToString(), ModName = i.ToString(), Type = i.ToString() }); } var service = new IndexedDefinitions(); service.InitMap(defs); var results = service.GetByParentDirectory("events"); results.Count().Should().Be(defs.Count); }
public void Returns_by_value_type() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = i < 5 ? "file" : i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString(), ValueType = ValueType.Object }); } var service = new IndexedDefinitions(); service.InitMap(defs); var results = service.GetByValueType(ValueType.Object); results.Count().Should().Be(10); }
public async Task Should_not_create_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>(); var parserManager = new Mock <IParserManager>(); infoProvider.Setup(p => p.DefinitionUsesFIOSRules(It.IsAny <IDefinition>())).Returns(true); infoProvider.Setup(p => p.CanProcess(It.IsAny <string>())).Returns(true); gameService.Setup(p => p.GetSelected()).Returns((IGame)null); var service = new ModMergeService(null, parserManager.Object, 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 indexed = new IndexedDefinitions(); indexed.InitMap(new List <IDefinition>() { new Definition() { Code = "test = {test}", File = "fake.txt" } }); var empty = new IndexedDefinitions(); empty.InitMap(new List <IDefinition>()); var result = await service.MergeCollectionByDefinitionsAsync(new ConflictResult() { AllConflicts = indexed, Conflicts = empty, OverwrittenConflicts = empty, ResolvedConflicts = empty }, new List <string>(), "fake copy"); result.Should().BeNull(); }
public async Task Should_load_definitions() { DISetup.SetupContainer(); var storageProvider = new Mock <IStorageProvider>(); var modParser = new Mock <IModParser>(); var parserManager = new Mock <IParserManager>(); var reader = new Mock <IReader>(); var modWriter = new Mock <IModWriter>(); var gameService = new Mock <IGameService>(); var mapper = new Mock <IMapper>(); var gameIndexer = new Mock <IGameIndexer>(); storageProvider.Setup(p => p.GetRootStoragePath()).Returns("c:\\test"); gameIndexer.Setup(p => p.GameVersionsSameAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <IEnumerable <string> >())).Returns((string p1, IGame p2, IEnumerable <string> p3) => Task.FromResult(true)); var gameDefs = new List <IDefinition>() { new Definition() { File = "test\\testgame.txt", Type = "test", Id = "2", ModName = "test game" } }; gameIndexer.Setup(p => p.GetDefinitionsAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <string>())).Returns((string p1, IGame p2, string p3) => Task.FromResult(gameDefs as IEnumerable <IDefinition>)); var defs = new IndexedDefinitions(); defs.InitMap(new List <IDefinition>() { new Definition() { File = "test\\test.txt", Type = "test", Id = "1", ModName = "test" } }); var service = GetService(gameIndexer, storageProvider, modParser, parserManager, reader, mapper, modWriter, gameService); var result = await service.LoadDefinitionsAsync(defs, new Game() { Name = "fake game" }, new List <string>() { "3.0.3" }); result.GetAll().Count().Should().Be(2); result.GetAll().FirstOrDefault(p => p.ModName == "fake game").Should().NotBeNull(); }
public void Returns_by_disk_file() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = i < 5 ? "file" : i.ToString(), DiskFile = i < 5 ? "diskfile" : i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString() }); } var service = new IndexedDefinitions(); service.InitMap(defs); var results = service.GetByDiskFile("diskfile"); results.Count().Should().Be(defs.Where(s => s.DiskFile == "diskfile").Count()); int match = 0; foreach (var item in defs.Where(s => s.DiskFile == "diskfile")) { if (results.Contains(item)) { match++; } } match.Should().Be(defs.Where(s => s.DiskFile == "diskfile").Count()); }
public void Returns_all_definitions() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = i.ToString(), Id = i.ToString(), ModName = i.ToString(), Type = i.ToString() }); } var service = new IndexedDefinitions(); service.InitMap(defs); var results = service.GetAll(); results.Count().Should().Be(defs.Count); int match = 0; foreach (var item in defs) { if (results.Contains(item)) { match++; } } match.Should().Be(defs.Count); }
public void Returns_by_type_and_id_non_constructed_key() { DISetup.SetupContainer(); var defs = new List <IDefinition>(); for (int i = 0; i < 10; i++) { defs.Add(new Definition() { Code = i.ToString(), ContentSHA = i.ToString(), Dependencies = new List <string> { i.ToString() }, File = i < 3 ? "file" : i.ToString(), Id = i > 4 && i < 7 ? "id" : i.ToString(), ModName = i.ToString(), Type = i > 3 && i < 6 ? "type" : i.ToString() }); } var service = new IndexedDefinitions(); service.InitMap(defs); var results = service.GetByTypeAndId("type-id"); results.Count().Should().Be(defs.Where(s => s.Type == "type" && s.Id == "id").Count()); int match = 0; foreach (var item in defs.Where(s => s.Type == "type" && s.Id == "id")) { if (results.Contains(item)) { match++; } } match.Should().Be(defs.Where(s => s.Type == "type" && s.Id == "id").Count()); }
public async Task Should_select_overwritten_conflict_for_merge() { DISetup.SetupContainer(); 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>(); modPatchExporter.Setup(p => p.GetPatchStateAsync(It.IsAny <ModPatchExporterParameters>(), It.IsAny <bool>())).Returns(Task.FromResult((IPatchState) new PatchState() { ConflictHistory = new List <IDefinition>() })); IDefinition definition = null; var modMergeExporter = new Mock <IModMergeExporter>(); modMergeExporter.Setup(p => p.ExportDefinitionsAsync(It.IsAny <ModMergeDefinitionExporterParameters>())).Returns((ModMergeDefinitionExporterParameters p) => { definition = p.PatchDefinitions.FirstOrDefault(); return(Task.FromResult(true)); }); var infoProvider = new Mock <IDefinitionInfoProvider>(); infoProvider.Setup(p => p.DefinitionUsesFIOSRules(It.IsAny <IDefinition>())).Returns(true); infoProvider.Setup(p => p.CanProcess(It.IsAny <string>())).Returns(true); gameService.Setup(p => p.GetSelected()).Returns(new Game() { Type = "Should_select_overwritten_conflict_for_merge", 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_select_overwritten_conflict_for_merge" } }; 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 indexed = new IndexedDefinitions(); indexed.InitMap(new List <IDefinition>() { new Definition() { Code = "test = {test}", File = "events\\fake.txt", ModName = "a", Id = "test1" } }); var overwritten = new IndexedDefinitions(); overwritten.InitMap(new List <IDefinition>() { new Definition() { Code = "test = {testfakeoverwritten}", File = "events\\fake.txt", ModName = "a", Id = "test1" } }); var empty = new IndexedDefinitions(); empty.InitMap(new List <IDefinition>()); var result = await service.MergeCollectionByDefinitionsAsync(new ConflictResult() { AllConflicts = indexed, Conflicts = empty, OverwrittenConflicts = overwritten, ResolvedConflicts = empty }, new List <string>() { "a" }, "fake copy"); result.Should().NotBeNull(); definition.Code.Should().Be("test = {testfakeoverwritten}"); }
public async Task Should_not_index_definitions() { var storageProvider = new Mock <IStorageProvider>(); var modParser = new Mock <IModParser>(); var parserManager = new Mock <IParserManager>(); var reader = new Mock <IReader>(); var modWriter = new Mock <IModWriter>(); var gameService = new Mock <IGameService>(); var mapper = new Mock <IMapper>(); var gameIndexer = new Mock <IGameIndexer>(); storageProvider.Setup(p => p.GetRootStoragePath()).Returns("c:\\test"); gameIndexer.Setup(p => p.GameVersionsSameAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <IEnumerable <string> >())).Returns((string p1, IGame p2, IEnumerable <string> p3) => Task.FromResult(false)); gameIndexer.Setup(p => p.CachedDefinitionsSameAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <int>())).Returns((string p1, IGame p2, int p3) => Task.FromResult(false)); gameIndexer.Setup(p => p.ClearDefinitionAsync(It.IsAny <string>(), It.IsAny <IGame>())).Returns((string p1, IGame p2) => Task.FromResult(false)); gameIndexer.Setup(p => p.WriteVersionAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <IEnumerable <string> >(), It.IsAny <int>())).Returns((string p1, IGame p2, IEnumerable <string> p3, int p4) => Task.FromResult(false)); gameIndexer.Setup(p => p.FolderCachedAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <string>())).Returns((string p1, IGame p2, string p3) => Task.FromResult(true)); reader.Setup(p => p.GetFiles(It.IsAny <string>())).Returns(new List <string>() { "test1\\1.txt", "test2\\2.txt", "test3\\3.txt" }); var fileInfos1 = new List <IFileInfo>() { new FileInfo() { Content = new List <string>() { "1" }, FileName = "test1\\1.txt", IsBinary = false } }; var fileInfos2 = new List <IFileInfo>() { new FileInfo() { Content = new List <string>() { "1" }, FileName = "test2\\2.txt", IsBinary = false } }; reader.Setup(s => s.Read(It.Is <string>(p => p.Contains("test1")), It.IsAny <IEnumerable <string> >(), It.IsAny <bool>())).Returns(fileInfos1); reader.Setup(s => s.Read(It.Is <string>(p => p.Contains("test2")), It.IsAny <IEnumerable <string> >(), It.IsAny <bool>())).Returns(fileInfos2); parserManager.Setup(s => s.Parse(It.IsAny <ParserManagerArgs>())).Returns((ParserManagerArgs args) => { return(new List <IDefinition>() { new Definition() { Code = args.File, File = args.File, ContentSHA = args.File, Id = args.File, Type = args.ModName } }); }); var saved = new ConcurrentBag <string>(); gameIndexer.Setup(p => p.SaveDefinitionsAsync(It.IsAny <string>(), It.IsAny <IGame>(), It.IsAny <IEnumerable <IDefinition> >())).Returns((string p1, IGame p2, IEnumerable <IDefinition> p3) => { saved.Add(p3.FirstOrDefault().ParentDirectory); return(Task.FromResult(true)); }); var service = GetService(gameIndexer, storageProvider, modParser, parserManager, reader, mapper, modWriter, gameService); var indexed = new IndexedDefinitions(); indexed.InitMap(new List <IDefinition>() { new Definition() { File = "test1\\1.txt" }, new Definition() { File = "test2\\3.txt" } }); var result = await service.IndexDefinitionsAsync(new Game() { ExecutableLocation = "c:\\test\\test.exe", GameFolders = new List <string>() { "test1", "test2" } }, new List <string>() { "3.0.3" }, indexed); result.Should().BeTrue(); saved.Count.Should().Be(0); }