103 lines
3.5 KiB
C#
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();
|
||
|
}
|
||
|
}
|
||
|
}
|