Selector/Selector.Tests/Consumer/AudioInjector.cs

103 lines
3.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Xunit;
using Moq;
using FluentAssertions;
using SpotifyAPI.Web;
using Selector;
namespace Selector.Tests
{
public class AudioInjectorTests
{
[Fact]
public void Subscribe()
{
var watcherMock = new Mock<IPlayerWatcher>();
var spotifyMock = new Mock<ITracksClient>();
var featureInjector = new AudioFeatureInjector(watcherMock.Object, spotifyMock.Object);
featureInjector.Subscribe();
watcherMock.VerifyAdd(m => m.ItemChange += It.IsAny<EventHandler<ListeningChangeEventArgs>>());
}
[Fact]
public void Unsubscribe()
{
var watcherMock = new Mock<IPlayerWatcher>();
var spotifyMock = new Mock<ITracksClient>();
var featureInjector = new AudioFeatureInjector(watcherMock.Object, spotifyMock.Object);
featureInjector.Unsubscribe();
watcherMock.VerifyRemove(m => m.ItemChange -= It.IsAny<EventHandler<ListeningChangeEventArgs>>());
}
[Fact]
public void SubscribeFuncArg()
{
var watcherMock = new Mock<IPlayerWatcher>();
var watcherFuncArgMock = new Mock<IPlayerWatcher>();
var spotifyMock = new Mock<ITracksClient>();
var featureInjector = new AudioFeatureInjector(watcherMock.Object, spotifyMock.Object);
featureInjector.Subscribe(watcherFuncArgMock.Object);
watcherFuncArgMock.VerifyAdd(m => m.ItemChange += It.IsAny<EventHandler<ListeningChangeEventArgs>>());
watcherMock.VerifyNoOtherCalls();
}
[Fact]
public void UnsubscribeFuncArg()
{
var watcherMock = new Mock<IPlayerWatcher>();
var watcherFuncArgMock = new Mock<IPlayerWatcher>();
var spotifyMock = new Mock<ITracksClient>();
var featureInjector = new AudioFeatureInjector(watcherMock.Object, spotifyMock.Object);
featureInjector.Unsubscribe(watcherFuncArgMock.Object);
watcherFuncArgMock.VerifyRemove(m => m.ItemChange -= It.IsAny<EventHandler<ListeningChangeEventArgs>>());
watcherMock.VerifyNoOtherCalls();
}
[Fact]
public async void Callback()
{
var watcherMock = new Mock<IPlayerWatcher>();
var spotifyMock = new Mock<ITracksClient>();
var timelineMock = new Mock<AnalysedTrackTimeline>();
var eventArgsMock = new Mock<ListeningChangeEventArgs>();
var playingMock = new Mock<CurrentlyPlayingContext>();
var trackMock = new Mock<FullTrack>();
var featureMock = new Mock<TrackAudioFeatures>();
eventArgsMock.Object.Current = playingMock.Object;
playingMock.Object.Item = trackMock.Object;
spotifyMock.Setup(m => m.GetAudioFeatures(It.IsAny<string>()).Result).Returns(() => featureMock.Object);
var featureInjector = new AudioFeatureInjector(watcherMock.Object, spotifyMock.Object)
{
Timeline = timelineMock.Object
};
await featureInjector.AsyncCallback(eventArgsMock.Object);
spotifyMock.Verify(m => m.GetAudioFeatures(It.IsAny<string>()));
spotifyMock.VerifyNoOtherCalls();
timelineMock.Verify(m => m.Add(It.IsAny<AnalysedTrack>(), It.IsAny<DateTime>()), Times.Once);
timelineMock.VerifyNoOtherCalls();
}
}
}