/// <summary> /// Creates the ViewModels. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="localFileFactory">Factory used to create <see cref="Data.ILocalFile"/>s.</param> /// <param name="fileOperator">FileOperator used to interface with files.</param> /// <param name="lastFMClient">Last.fm client.</param> /// <param name="discogsClient">Client used to interact with Discogs.com</param> private void CreateViewModels(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory, IFileOperator fileOperator, ILastFMClient lastFMClient, IDiscogsDataBaseClient discogsClient) { var manualScrobbleViewModel = new ManualScrobbleViewModel(windowManager); manualScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var friendScrobbleViewModel = new FriendScrobbleViewModel(windowManager, lastFMClient.User); friendScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var databaseScrobbleViewModel = new DatabaseScrobbleViewModel(windowManager, lastFMClient.Artist, lastFMClient.Album, discogsClient); databaseScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var csvScrobbleViewModel = new CSVScrobbleViewModel(windowManager, new CSVTextFieldParserFactory(), fileOperator); csvScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var fileScrobbleViewModel = new FileScrobbleViewModel(windowManager, localFileFactory, fileOperator); fileScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var mediaPlayerDatabaseScrobbleViewModel = new MediaPlayerDatabaseScrobbleViewModel(windowManager); mediaPlayerDatabaseScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var iTunesScrobbleVM = new ITunesScrobbleViewModel(windowManager, lastFMClient.Track, lastFMClient.Album, lastFMClient.Artist); iTunesScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated; // todo: put back in once local api is working again //var spotifyScrobbleVM = new SpotifyScrobbleViewModel(windowManager, lastFMClient.Track, lastFMClient.Album, lastFMClient.Auth); //spotifyScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated; var setlistFMScrobbleVM = new SetlistFMScrobbleViewModel(windowManager, lastFMClient.Artist); setlistFMScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated; var cacheScrobblerVM = new CacheScrobblerViewModel(windowManager); cacheScrobblerVM.StatusUpdated += Scrobbler_StatusUpdated; ActivateItem(manualScrobbleViewModel); ActivateItem(friendScrobbleViewModel); ActivateItem(databaseScrobbleViewModel); ActivateItem(csvScrobbleViewModel); ActivateItem(fileScrobbleViewModel); ActivateItem(mediaPlayerDatabaseScrobbleViewModel); ActivateItem(iTunesScrobbleVM); //ActivateItem(spotifyScrobbleVM); ActivateItem(setlistFMScrobbleVM); ActivateItem(cacheScrobblerVM); // this one should be selected ActivateItem(manualScrobbleViewModel); }
/// <summary> /// Creates the ViewModels. /// </summary> /// <param name="windowManager">WindowManager used to display dialogs.</param> /// <param name="localFileFactory">Factory used to create <see cref="ILocalFile"/>s.</param> private void CreateViewModels(IExtendedWindowManager windowManager, ILocalFileFactory localFileFactory) { var manualScrobbleViewModel = new ManualScrobbleViewModel(windowManager); manualScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var friendScrobbleViewModel = new FriendScrobbleViewModel(windowManager, MainViewModel.Client.User); friendScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var databaseScrobbleViewModel = new DatabaseScrobbleViewModel(windowManager, MainViewModel.Client.Artist, MainViewModel.Client.Album); databaseScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var csvScrobbleViewModel = new CSVScrobbleViewModel(windowManager, new CSVTextFieldParserFactory()); csvScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var fileScrobbleViewModel = new FileScrobbleViewModel(windowManager, localFileFactory); fileScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var mediaPlayerDatabaseScrobbleViewModel = new MediaPlayerDatabaseScrobbleViewModel(windowManager); mediaPlayerDatabaseScrobbleViewModel.StatusUpdated += Scrobbler_StatusUpdated; var iTunesScrobbleVM = new ITunesScrobbleViewModel(windowManager); iTunesScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated; var spotifyScrobbleVM = new SpotifyScrobbleViewModel(windowManager); spotifyScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated; var setlistFMScrobbleVM = new SetlistFMScrobbleViewModel(windowManager); setlistFMScrobbleVM.StatusUpdated += Scrobbler_StatusUpdated; var cacheScrobblerVM = new CacheScrobblerViewModel(windowManager); cacheScrobblerVM.StatusUpdated += Scrobbler_StatusUpdated; ActivateItem(manualScrobbleViewModel); ActivateItem(friendScrobbleViewModel); ActivateItem(databaseScrobbleViewModel); ActivateItem(csvScrobbleViewModel); ActivateItem(fileScrobbleViewModel); ActivateItem(mediaPlayerDatabaseScrobbleViewModel); ActivateItem(iTunesScrobbleVM); ActivateItem(spotifyScrobbleVM); ActivateItem(setlistFMScrobbleVM); ActivateItem(cacheScrobblerVM); // this one should be selected ActivateItem(manualScrobbleViewModel); }
public async Task NormalScrobbleTest() { // given: CSVScrobbleViewModel with needed mocks to scrobble IEnumerable <Scrobble> actual = null; Mock <IUserScrobbler> scrobblerMock = new Mock <IUserScrobbler>(MockBehavior.Strict); scrobblerMock.Setup(u => u.ScrobbleAsync(It.IsAny <IEnumerable <Scrobble> >(), false)).Callback <IEnumerable <Scrobble>, bool>((s, c) => actual = s) .Returns(Task.Run(() => new ScrobbleResponse())); scrobblerMock.Setup(u => u.IsAuthenticated).Returns(true); List <Scrobble> expected = new List <Scrobble>() { new Scrobble("TestArtist", "TestAlbum", "TestTrack", DateTime.Now) { AlbumArtist = "TestAlbumArtist", Duration = TimeSpan.FromSeconds(30) }, new Scrobble("TestArtist2", "TestAlbum2", "TestTrack2", DateTime.Now.AddSeconds(1)) { AlbumArtist = "TestAlbumArtist2", Duration = TimeSpan.FromSeconds(31) }, new Scrobble("TestArtist3", "TestAlbum3", "TestTrack3", DateTime.Now.AddSeconds(2)) { AlbumArtist = "TestAlbumArtist2", Duration = TimeSpan.FromSeconds(0) } }; Mock <ITextFieldParser> parserMock = new Mock <ITextFieldParser>(); string[][] fields = new string[3][] { new string[] { expected[0].Artist, expected[0].Album, expected[0].Track, expected[0].TimePlayed.ToString(), expected[0].AlbumArtist, expected[0].Duration.ToString() }, new string[] { expected[1].Artist, expected[1].Album, expected[1].Track, expected[1].TimePlayed.ToString(), expected[1].AlbumArtist, expected[1].Duration.ToString() }, new string[] { expected[2].Artist, expected[2].Album, expected[2].Track, expected[2].TimePlayed.ToString(), expected[2].AlbumArtist, expected[2].Duration.ToString() }, }; int i = 0; parserMock.Setup(p => p.ReadFields()).Returns(() => fields[i++]).Callback(() => { if (i == 3) { parserMock.Setup(p => p.EndOfData).Returns(true); } }); Mock <ITextFieldParserFactory> factoryMock = new Mock <ITextFieldParserFactory>(); factoryMock.Setup(f => f.CreateParser(It.IsAny <string>())).Returns(parserMock.Object); Mock <IFileOperator> fileOperatorMock = new Mock <IFileOperator>(MockBehavior.Strict); CSVScrobbleViewModel vm = new CSVScrobbleViewModel(null, factoryMock.Object, fileOperatorMock.Object) { Scrobbler = scrobblerMock.Object, CSVFilePath = "C:\\TestFile.csv", ScrobbleMode = CSVScrobbleMode.Normal }; await vm.ParseCSVFile(); vm.SelectAll(); // when: scrobbling await vm.Scrobble(); // then: expected tracks scrobbled // we add 1 second to each TimePlayed of the expected because the vm does this too so you can scrobble from yourself... for (int e = 0; e < expected.Count; e++) { expected[e] = expected[e].CloneWithAddedSecond(); } Assert.That(actual.IsEqualScrobble(expected)); }