DeviceBridgeTests/Services/DataSubscriptionServiceTests.cs (58 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All rights reserved. using System.Threading; using System.Threading.Tasks; using DeviceBridge.Models; using DeviceBridge.Providers; using DeviceBridgeTests.Common; using Moq; using NLog; using NUnit.Framework; namespace DeviceBridge.Services.Tests { [TestFixture] public class DataSubscriptionServiceTests { private Mock<IStorageProvider> _storageProviderMock = new Mock<IStorageProvider>(); private Mock<ISubscriptionScheduler> _subscriptionSchedulerMock = new Mock<ISubscriptionScheduler>(); [Test] [Description("Gets the specified subscription for the specified device from the DB, with the correct status")] public async Task GetDataSubscription() { var testSub = TestUtils.GetTestSubscription("test-device-id", DeviceSubscriptionType.C2DMessages); _storageProviderMock.Setup(p => p.GetDeviceSubscription(It.IsAny<Logger>(), "test-device-id", DeviceSubscriptionType.C2DMessages, It.IsAny<CancellationToken>())).Returns(Task.FromResult(testSub)); _subscriptionSchedulerMock.Setup(p => p.ComputeDataSubscriptionStatus("test-device-id", DeviceSubscriptionType.C2DMessages, "http://abc")).Returns("Starting"); var subscriptionService = new DataSubscriptionService(LogManager.GetCurrentClassLogger(), _storageProviderMock.Object, _subscriptionSchedulerMock.Object); var result = await subscriptionService.GetDataSubscription(LogManager.GetCurrentClassLogger(), "test-device-id", DeviceSubscriptionType.C2DMessages, default); Assert.AreEqual("test-device-id", result.DeviceId); Assert.AreEqual("http://abc", result.CallbackUrl); Assert.AreEqual(DeviceSubscriptionType.C2DMessages, result.SubscriptionType); Assert.AreEqual("Starting", result.Status); } [Test] [Description("Creates a subscription, triggers a resync and returns the subscription with the correct status")] public async Task CreateOrUpdateDataSubscription() { _subscriptionSchedulerMock.Invocations.Clear(); var testSub = TestUtils.GetTestSubscription("test-device-id", DeviceSubscriptionType.Methods); _storageProviderMock.Setup(p => p.CreateOrUpdateDeviceSubscription(It.IsAny<Logger>(), "test-device-id", DeviceSubscriptionType.Methods, "http://abc", It.IsAny<CancellationToken>())).Returns(Task.FromResult(testSub)); _subscriptionSchedulerMock.Setup(p => p.ComputeDataSubscriptionStatus("test-device-id", DeviceSubscriptionType.Methods, "http://abc")).Returns("Stopped"); var subscriptionService = new DataSubscriptionService(LogManager.GetCurrentClassLogger(), _storageProviderMock.Object, _subscriptionSchedulerMock.Object); var result = await subscriptionService.CreateOrUpdateDataSubscription(LogManager.GetCurrentClassLogger(), "test-device-id", DeviceSubscriptionType.Methods, "http://abc", default); Assert.AreEqual("test-device-id", result.DeviceId); Assert.AreEqual("http://abc", result.CallbackUrl); Assert.AreEqual(DeviceSubscriptionType.Methods, result.SubscriptionType); Assert.AreEqual("Stopped", result.Status); _subscriptionSchedulerMock.Verify(p => p.SynchronizeDeviceDbAndEngineDataSubscriptionsAsync("test-device-id", false), Times.Once); } [Test] [Description("Deletes a subscription and triggers a resync")] public async Task DeleteDataSubscription() { _subscriptionSchedulerMock.Invocations.Clear(); _storageProviderMock.Setup(p => p.DeleteDeviceSubscription(It.IsAny<Logger>(), "test-device-id", DeviceSubscriptionType.DesiredProperties, It.IsAny<CancellationToken>())).Returns(Task.CompletedTask); var subscriptionService = new DataSubscriptionService(LogManager.GetCurrentClassLogger(), _storageProviderMock.Object, _subscriptionSchedulerMock.Object); await subscriptionService.DeleteDataSubscription(LogManager.GetCurrentClassLogger(), "test-device-id", DeviceSubscriptionType.DesiredProperties, default); _subscriptionSchedulerMock.Verify(p => p.SynchronizeDeviceDbAndEngineDataSubscriptionsAsync("test-device-id", false), Times.Once); } } }