using Moq; using Newtonsoft.Json; using NUnit.Framework; using SpotifyAPI.Web; using SpotifyAPI.Web.Models; using System; using System.IO; using System.Linq; namespace SpotifyAPI.Tests { [TestFixture] public class TestClass { private Mock _mock; private SpotifyWebAPI _spotify; [SetUp] public void SetUp() { _mock = new Mock(); _spotify = new SpotifyWebAPI() { WebClient = _mock.Object, UseAuth = false }; } private static T GetFixture(string file) { return JsonConvert.DeserializeObject(File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "../../../fixtures/", file))); } private static bool ContainsValues(string str, params string[] values) { return values.All(str.Contains); } [Test] public void ShouldGetPrivateProfile_WithoutAuth() { _spotify.UseAuth = false; Assert.Throws(() => _spotify.GetPrivateProfile()); } [Test] public void ShouldGetPrivateProfile_WithAuth() { PrivateProfile profile = GetFixture("private-user.json"); _mock.Setup(client => client.DownloadJson(It.IsAny())).Returns(profile); _spotify.UseAuth = true; Assert.AreEqual(profile, _spotify.GetPrivateProfile()); _mock.Verify(client => client.DownloadJson(It.Is(str => ContainsValues(str, "/me"))), Times.Exactly(1)); } [Test] public void ShouldGetPublicProfile() { PublicProfile profile = GetFixture("public-user.json"); _mock.Setup(client => client.DownloadJson(It.IsAny())).Returns(profile); Assert.AreEqual(profile, _spotify.GetPublicProfile("wizzler")); _mock.Verify(client => client.DownloadJson(It.Is(str => ContainsValues(str, "/users/wizzler"))), Times.Exactly(1)); } //Will add more tests once I decided if this is worth the effort (propably not?) } }