// ReSharper disable All using System; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using Sony.ChartBot.Entities.Storage; using Sony.ChartBot.Repository; namespace Sony.ChartBot.Tests { [TestClass] public class SubscriptionsIntegrationTests { [TestMethod] public void Test_Save_And_Retreive_Subscription() { // Arrange var userId = Guid.NewGuid().ToString(); var trackReference = Guid.NewGuid().ToString(); // Act var repo = new SubscriptionRepository("sonychartbot_tests"); repo.AddSubscriptionAsync(userId, trackReference).Wait(); // Assert var userSubscriptions = repo.GetSubscriptionsAsync(userId).Result; Assert.IsNotNull(userSubscriptions); Assert.AreEqual(1, userSubscriptions.Count()); var fetched = userSubscriptions.Single(); Assert.AreEqual(userId, fetched.UserId); Assert.AreEqual(trackReference, fetched.TrackReference); // Clean up repo.RemoveSubscriptionAsync(userId, trackReference).Wait(); } [TestMethod] public void Test_Get_Due_Subscriptions() { // Arrange var userId = Guid.NewGuid().ToString(); var trackReference = Guid.NewGuid().ToString(); var currentUtcHour = DateTime.UtcNow.Hour; if (DateTime.Now.IsDaylightSavingTime()) { currentUtcHour = currentUtcHour + 1; } // Act var repo = new SubscriptionRepository("sonychartbot_tests"); repo.AddSubscriptionAsync(userId, trackReference, currentUtcHour).Wait(); // Assert var userSubscriptions = repo.GetSubscriptionsAsync(userId).Result; Assert.IsNotNull(userSubscriptions); Assert.AreEqual(1, userSubscriptions.Count()); var fetched = userSubscriptions.Single(); Assert.AreEqual(userId, fetched.UserId); Assert.AreEqual(trackReference, fetched.TrackReference); var dueSubscriptions = repo.GetDueSubscriptionsAsync().Result; Assert.IsNotNull(dueSubscriptions); Assert.AreEqual(1, dueSubscriptions.Count(s => s.UserId == userId)); var fetchedDue = dueSubscriptions.Single(s => s.UserId == userId); Assert.AreEqual(userId, fetchedDue.UserId); Assert.AreEqual(trackReference, fetchedDue.TrackReference); // Act ... again fetchedDue.LatestSendoutDay = DateTime.Today; repo.UpdateSubscriptionAsync(fetchedDue).Wait(); // Assert ... again userSubscriptions = repo.GetSubscriptionsAsync(userId).Result; Assert.IsNotNull(userSubscriptions); Assert.AreEqual(1, userSubscriptions.Count()); fetched = userSubscriptions.Single(); Assert.AreEqual(userId, fetched.UserId); Assert.AreEqual(trackReference, fetched.TrackReference); dueSubscriptions = repo.GetDueSubscriptionsAsync().Result; Assert.IsNotNull(dueSubscriptions); Assert.AreEqual(0, dueSubscriptions.Count(s => s.UserId == userId)); // Clean up repo.RemoveSubscriptionAsync(userId, trackReference).Wait(); } } }