public async Task SetRemoveMetadataAsync_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); var record = await lib.CreateRecordAsync("NINTENDO_NES"); var guid = record.RecordID; record.Metadata.Add("is_test", "true"); await lib.UpdateRecordAsync(record); var newRecord = await lib.GetAllRecordsAsync().FirstAsync(); Assert.Equal(guid, newRecord.RecordID); Assert.Equal(record.PlatformID, newRecord.PlatformID); Assert.Contains("is_test", newRecord.Metadata.Keys); Assert.Equal("true", newRecord.Metadata["is_test"]); newRecord.Metadata.Remove("is_test"); await lib.UpdateRecordAsync(newRecord); var newNewRecord = await lib.GetAllRecordsAsync().FirstAsync(); Assert.Equal(guid, newNewRecord.RecordID); Assert.Equal(record.PlatformID, newNewRecord.PlatformID); Assert.DoesNotContain("is_test", newNewRecord.Metadata.Keys); }
public void SetWithMetadata_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}") .ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning)); var lib = new GameRecordLibrary(optionsBuilder); var record = lib.CreateRecord("NINTENDO_NES"); var guid = record.RecordId; record.Metadata.Add("is_test", "true"); lib.UpdateRecord(record); var newRecord = lib.GetAllRecords().First(); Assert.Equal(guid, newRecord.RecordId); Assert.Equal(record.PlatformId, newRecord.PlatformId); Assert.Contains("is_test", newRecord.Metadata.Keys); Assert.Equal("true", newRecord.Metadata["is_test"]); newRecord.Metadata.Add("is_test_two", "true"); lib.UpdateRecord(newRecord); var newNewRecord = lib.GetAllRecords().First(); Assert.Equal(guid, newNewRecord.RecordId); Assert.Equal(record.PlatformId, newNewRecord.PlatformId); Assert.Contains("is_test", newNewRecord.Metadata.Keys); Assert.Equal("true", newNewRecord.Metadata["is_test"]); Assert.Contains("is_test_two", newNewRecord.Metadata.Keys); Assert.Equal("true", newNewRecord.Metadata["is_test_two"]); }
public void SetWithMetadata_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); var record = lib.CreateRecord("NINTENDO_NES"); var guid = record.RecordID; record.Metadata.Add("is_test", "true"); lib.UpdateRecord(record); var newRecord = lib.GetAllRecords().First(); Assert.Equal(guid, newRecord.RecordID); Assert.Equal(record.PlatformID, newRecord.PlatformID); Assert.Contains("is_test", newRecord.Metadata.Keys); Assert.Equal("true", newRecord.Metadata["is_test"]); newRecord.Metadata.Add("is_test_two", "true"); lib.UpdateRecord(newRecord); var newNewRecord = lib.GetAllRecords().First(); Assert.Equal(guid, newNewRecord.RecordID); Assert.Equal(record.PlatformID, newNewRecord.PlatformID); Assert.Contains("is_test", newNewRecord.Metadata.Keys); Assert.Equal("true", newNewRecord.Metadata["is_test"]); Assert.Contains("is_test_two", newNewRecord.Metadata.Keys); Assert.Equal("true", newNewRecord.Metadata["is_test_two"]); }
public void Compose(IModule module, Loader.IServiceRepository serviceContainer) { var physicalFs = serviceContainer.Get <IFileSystem>(); var contentDirectory = serviceContainer.Get <IContentDirectoryProvider>(); string sqlitePath = Path.Combine(contentDirectory.ApplicationData.FullName, "library.db"); var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder .UseSqlite($"Data Source={sqlitePath}"); using (var context = new DatabaseContext(optionsBuilder.Options)) { var connection = context.Database.GetDbConnection(); connection.Open(); using (var command = connection.CreateCommand()) { command.CommandText = "PRAGMA journal_mode=WAL;"; command.ExecuteNonQuery(); } } // game library dependency tree var gameRecordLibrary = new GameRecordLibrary(optionsBuilder); var gameLibrary = new GameLibrary(gameRecordLibrary); var configStore = new ConfigurationCollectionStore(optionsBuilder); var fileLibrary = new FileRecordLibrary(optionsBuilder); var appDataPath = physicalFs.ConvertPathFromInternal(contentDirectory.ApplicationData.FullName); var gameFs = physicalFs.GetOrCreateSubFileSystem(appDataPath / "games"); // Add default extensions gameLibrary.AddExtension <IGameFileExtensionProvider, IGameFileExtension>(new GameFileExtensionProvider(fileLibrary, gameFs)); gameLibrary.AddExtension <IGameConfigurationExtensionProvider, IGameConfigurationExtension>(new GameConfigurationExtensionProvider(configStore)); // register game library. serviceContainer.Get <IServiceRegistrationProvider>() .RegisterService <IGameLibrary>(gameLibrary); var pluginLibrary = new PluginConfigurationStore(optionsBuilder); // plugin config store serviceContainer.Get <IServiceRegistrationProvider>() .RegisterService <IPluginConfigurationStore>(pluginLibrary); // controller elements var inputStore = new ControllerElementMappingsStore(optionsBuilder); serviceContainer.Get <IServiceRegistrationProvider>() .RegisterService <IControllerElementMappingsStore>(inputStore); }
public async Task QueryGamesByPlatformsAsync_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); var record = lib.CreateRecord("TEST_PLATFORM"); Assert.False(await lib.QueryRecordsAsync(r => r.PlatformID == "TEST_PLATFORM").IsEmptyAsync()); }
public async Task GetGameByGuidAsync_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); var record = await lib.CreateRecordAsync("TEST_PLATFORM"); Assert.NotNull(lib.GetRecord(record.RecordID)); }
public async Task GetGameByPlatformsAsync_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); await lib.CreateRecordAsync("TEST_PLATFORM"); Assert.NotEmpty(lib.GetRecords(r => r.PlatformID == "TEST_PLATFORM")); }
public async Task GetAllRecordsAsync_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); await lib.CreateRecordAsync("TEST_PLATFORM"); Assert.False(await lib.GetAllRecordsAsync().IsEmptyAsync()); }
public void GetAllRecords_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); var record = lib.CreateRecord("TEST_PLATFORM"); Assert.NotEmpty(lib.GetAllRecords()); }
public void Set_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); var record = lib.CreateRecord("NINTENDO_NES"); var guid = record.RecordID; var newRecord = lib.GetAllRecords().First(); Assert.Equal(guid, newRecord.RecordID); Assert.Equal(record.PlatformID, newRecord.PlatformID); }
public void Remove_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); var record = lib.CreateRecord("TEST_PLATFORM"); Assert.NotNull(lib.GetRecord(record.RecordID)); lib.DeleteRecord(record); Assert.Null(lib.GetRecord(record.RecordID)); }
public void GetGamesByTitle_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); var record = lib.CreateRecord("TEST_PLATFORM"); record.Title = "Test"; lib.UpdateRecord(record); Assert.NotEmpty(lib.GetRecords(g => g.Metadata[GameMetadataKeys.Title] == "Test")); }
public async Task QueryGamesByTitleAsync_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); var record = lib.CreateRecord("TEST_PLATFORM"); record.Title = "Test"; lib.UpdateRecord(record); Assert.False(await lib.QueryRecordsAsync(g => g.Metadata.First(m => m.MetadataKey == GameMetadataKeys.Title).MetadataValue == "Test").IsEmptyAsync()); }
public void GameLibraryIntegrationCreate_Test() { var path = new DirectoryInfo(Path.GetTempPath()) .CreateSubdirectory(Path.GetFileNameWithoutExtension(Path.GetTempFileName())); var fs = new PhysicalFileSystem(); var gfs = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(path.FullName)); var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var glib = new GameRecordLibrary(optionsBuilder); var gl = new GameLibrary(glib); var game = gl.CreateGame("NINTENDO_NES"); }
public void SetMultiple_Test() { var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var lib = new GameRecordLibrary(optionsBuilder); var record = lib.CreateRecord("NINTENDO_NES"); var record2 = lib.CreateRecord("NINTENDO_NES"); record.Title = "Test Game"; record2.Title = "Test Game 2"; lib.UpdateRecord(record); lib.UpdateRecord(record2); }
public async Task TestCopyInstaller_IntegrationTest() { using var testStream = TestUtilities.GetResource("TestRoms.test.nes"); using var fileStream = File.Create(Path.GetTempFileName() + ".nes"); await testStream.CopyToAsync(fileStream); string fname = fileStream.Name; fileStream.Dispose(); var path = new DirectoryInfo(Path.GetTempPath()) .CreateSubdirectory(Path.GetFileNameWithoutExtension(Path.GetTempFileName())); var fs = new PhysicalFileSystem(); var gfs = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(path.FullName)); var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var glib = new GameRecordLibrary(optionsBuilder); var flib = new FileRecordLibrary(optionsBuilder); var gl = new GameLibrary(glib); gl.AddExtension <GameFileExtensionProvider, IGameFileExtension >(new GameFileExtensionProvider(flib, gfs)); var game = gl.CreateGame("NINTENDO_NES"); var stone = new StoneProvider(); var install = new SingleFileCopyInstaller(stone); var installables = install.GetInstallables("NINTENDO_NES", new List <FileSystemInfo>() { new FileInfo(fname) }); Assert.True(installables.Select(i => i.Source).All(i => i == install.Name)); foreach (var i in installables) { await foreach (var res in install.Install(game, i.Artifacts)) { } } Assert.NotEmpty(game.WithFiles().GetFileRecords()); }
public async Task GameLibraryIntegrationQueryAsync_Test() { var path = new DirectoryInfo(Path.GetTempPath()) .CreateSubdirectory(Path.GetFileNameWithoutExtension(Path.GetTempFileName())); var fs = new PhysicalFileSystem(); var gfs = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(path.FullName)); var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var glib = new GameRecordLibrary(optionsBuilder); var gl = new GameLibrary(glib); var game = await gl.CreateGameAsync("NINTENDO_NES"); Assert.False(await gl.QueryGamesAsync(g => g.PlatformID == "NINTENDO_NES").IsEmptyAsync()); Assert.False(await gl.GetAllGamesAsync().IsEmptyAsync()); Assert.NotNull(await gl.GetGameAsync(game.Record.RecordID)); }
public async Task GameLibraryIntegrationConfigAsync_Test() { var path = new DirectoryInfo(Path.GetTempPath()) .CreateSubdirectory(Path.GetFileNameWithoutExtension(Path.GetTempFileName())); var fs = new PhysicalFileSystem(); var gfs = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(path.FullName)); var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var glib = new GameRecordLibrary(optionsBuilder); var ccs = new ConfigurationCollectionStore(optionsBuilder); var gl = new GameLibrary(glib); gl.AddExtension <IGameConfigurationExtensionProvider, IGameConfigurationExtension> (new GameConfigurationExtensionProvider(ccs)); var game = await gl.CreateGameAsync("NINTENDO_NES"); var profile = await game.WithConfigurations() .CreateNewProfileAsync <ExampleConfigurationCollection>("TestConfiguration", "test"); var profileGuid = profile.CollectionGuid; Assert.NotNull(await game.WithConfigurations() .GetProfileAsync <ExampleConfigurationCollection>("TestConfiguration", profileGuid)); Assert.NotEmpty(game.WithConfigurations().GetProfileNames()); profile.Configuration.ExampleConfiguration.FullscreenResolution = Configuration.FullscreenResolution.Resolution1600X1050; await gl.WithConfigurationLibrary().UpdateProfileAsync(profile); var newProfile = await game.WithConfigurations() .GetProfileAsync <ExampleConfigurationCollection>("TestConfiguration", profileGuid); Assert.Equal(Configuration.FullscreenResolution.Resolution1600X1050, newProfile.Configuration.ExampleConfiguration.FullscreenResolution); await game.WithConfigurations().DeleteProfileAsync("TestConfiguration", profileGuid); Assert.Empty(game.WithConfigurations().GetProfileNames()); }
public async Task GameLibraryUnknownExtensionAsync_Test() { var path = new DirectoryInfo(Path.GetTempPath()) .CreateSubdirectory(Path.GetFileNameWithoutExtension(Path.GetTempFileName())); var fs = new PhysicalFileSystem(); var gfs = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(path.FullName)); var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var glib = new GameRecordLibrary(optionsBuilder); var ccs = new ConfigurationCollectionStore(optionsBuilder); var gl = new GameLibrary(glib); Assert.Throws <KeyNotFoundException>(() => gl.GetExtension <IGameConfigurationExtensionProvider>()); var game = await gl.CreateGameAsync("NINTENDO_NES"); Assert.Throws <KeyNotFoundException>(() => game.GetExtension <IGameConfigurationExtension>()); }
public async Task GameLibraryIntegrationUpdateAsync_Test() { var path = new DirectoryInfo(Path.GetTempPath()) .CreateSubdirectory(Path.GetFileNameWithoutExtension(Path.GetTempFileName())); var fs = new PhysicalFileSystem(); var gfs = fs.GetOrCreateSubFileSystem(fs.ConvertPathFromInternal(path.FullName)); var optionsBuilder = new DbContextOptionsBuilder <DatabaseContext>(); optionsBuilder.UseSqlite($"Data Source={Path.GetTempFileName()}"); var glib = new GameRecordLibrary(optionsBuilder); var flib = new FileRecordLibrary(optionsBuilder); var gl = new GameLibrary(glib); gl.AddExtension <GameFileExtensionProvider, IGameFileExtension >(new GameFileExtensionProvider(flib, gfs)); var game = await gl.CreateGameAsync("NINTENDO_NES"); game.Record.Title = "My Awesome Game"; await gl.UpdateGameRecordAsync(game.Record); var file = game.WithFiles().MiscRoot.OpenFile("Test.txt"); file.OpenStream().Close(); await game.WithFiles().RegisterFileAsync(file, "application/text"); var record = await game.WithFiles().GetFileInfoAsync(file); record.Metadata.Add("file_metadata", "test"); await gl.GetExtension <GameFileExtensionProvider>().UpdateFileAsync(record); var newGame = await gl.GetGameAsync(game.Record.RecordID); Assert.False(await newGame.WithFiles().GetFileRecordsAsync().IsEmptyAsync()); }