public async Task ScrobbleTest() { //given: FriendScrobbleViewModel with mocked userapi List <Scrobble> expected = new List <Scrobble> { new Scrobble("TestArtist", "TestAlbum", "TestTrack", DateTime.Now) { Duration = TimeSpan.FromSeconds(30) }, new Scrobble("TestArtist2", "TestAlbum2", "TestTrack2", DateTime.Now.AddSeconds(1)) { Duration = TimeSpan.FromSeconds(30) }, new Scrobble("TestArtist3", "TestAlbum3", "TestTrack3", DateTime.Now.AddSeconds(2)) { Duration = TimeSpan.FromSeconds(30) } }; 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); Mock <IUserApi> userApiMock = new Mock <IUserApi>(); userApiMock.Setup(i => i.GetRecentScrobbles(It.IsAny <string>(), It.IsAny <DateTimeOffset?>(), It.IsAny <int>(), It.IsAny <int>())).Returns(() => Task.Run(() => PageResponse <LastTrack> .CreateSuccessResponse(expected.ToLastTracks()))); FriendScrobbleViewModel vm = new FriendScrobbleViewModel(null, userApiMock.Object) { Scrobbler = scrobblerMock.Object, Username = "******" }; await vm.FetchScrobbles(); vm.SelectAll(); // when: scrobbling the fetched tracks. await vm.Scrobble(); // we add 1 second to each TimePlayed of the expected because the vm does this too so you can scrobble from yourself... for (int i = 0; i < expected.Count; i++) { expected[i] = expected[i].CloneWithAddedSecond(); } // then: scrobbled tracks should be equal to the given tracks. Assert.That(actual.IsEqualScrobble(expected), Is.True); }
public async Task ScrobbleTest() { //given: FriendScrobbleViewModel with mocked userapi var expected = TestHelper.CreateGenericScrobbles(3); 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); Mock <IUserApi> userApiMock = new Mock <IUserApi>(); userApiMock.Setup(i => i.GetRecentScrobbles(It.IsAny <string>(), It.IsAny <DateTimeOffset?>(), It.IsAny <DateTimeOffset?>(), It.IsAny <bool>(), It.IsAny <int>(), It.IsAny <int>())).Returns(() => Task.Run(() => PageResponse <LastTrack> .CreateSuccessResponse(expected.ToLastTracks()))); Mock <IExtendedWindowManager> windowManagerMock = new Mock <IExtendedWindowManager>(MockBehavior.Strict); FriendScrobbleViewModel vm = new FriendScrobbleViewModel(windowManagerMock.Object, userApiMock.Object) { Scrobbler = scrobblerMock.Object, Username = "******" }; await vm.FetchScrobbles(); vm.CheckAll(); // when: scrobbling the fetched tracks. await vm.Scrobble(); // we add 1 second to each TimePlayed of the expected because the vm does this too so you can scrobble from yourself... for (int i = 0; i < expected.Length; i++) { expected[i] = expected[i].CloneWithAddedTime(TimeSpan.FromSeconds(1)); } // then: scrobbled tracks should be equal to the given tracks. Assert.That(actual.IsEqualScrobble(expected), Is.True); }