public async Task DataSubscriptionStatus()

in DeviceBridgeTests/Services/SubscriptionSchedulerTests.cs [457:493]


        public async Task DataSubscriptionStatus()
        {
            using (ShimsContext.Create())
            {
                _storageProviderMock.Setup(p => p.ListAllSubscriptionsOrderedByDeviceId(It.IsAny<Logger>())).Returns(Task.FromResult(new List<DeviceSubscription>() { }));
                _connectionManagerMock.Setup(p => p.GetDeviceStatus(It.IsAny<string>())).Returns((ConnectionStatus.Connected, ConnectionStatusChangeReason.Connection_Ok));

                // If the registered callbacks don't match the desired ones, the subscription is still starting.
                _connectionManagerMock.Setup(p => p.GetCurrentMessageCallbackId(It.IsAny<string>())).Returns("http://another-callback-url");
                _connectionManagerMock.Setup(p => p.GetCurrentMethodCallbackId(It.IsAny<string>())).Returns("http://another-callback-url");
                _connectionManagerMock.Setup(p => p.GetCurrentDesiredPropertyUpdateCallbackId(It.IsAny<string>())).Returns("http://another-callback-url");
                var subscriptionScheduler = new SubscriptionScheduler(LogManager.GetCurrentClassLogger(), _connectionManagerMock.Object, _storageProviderMock.Object, _subscriptionCallbackFactoryMock.Object, 2, 10);

                var result = subscriptionScheduler.ComputeDataSubscriptionStatus("test-device-id", DeviceSubscriptionType.C2DMessages, "http://abc");
                Assert.AreEqual("Starting", result);
                result = subscriptionScheduler.ComputeDataSubscriptionStatus("test-device-id", DeviceSubscriptionType.Methods, "http://abc");
                Assert.AreEqual("Starting", result);
                result = subscriptionScheduler.ComputeDataSubscriptionStatus("test-device-id", DeviceSubscriptionType.DesiredProperties, "http://abc");
                Assert.AreEqual("Starting", result);

                // If the callback matches and the device is connected, the subscription is running.
                _connectionManagerMock.Setup(p => p.GetCurrentDesiredPropertyUpdateCallbackId(It.IsAny<string>())).Returns("http://abc");
                _connectionManagerMock.Setup(p => p.GetDeviceStatus(It.IsAny<string>())).Returns((ConnectionStatus.Connected, ConnectionStatusChangeReason.Connection_Ok));
                result = subscriptionScheduler.ComputeDataSubscriptionStatus("test-device-id", DeviceSubscriptionType.DesiredProperties, "http://abc");
                Assert.AreEqual("Running", result);

                // If the device is connected, the subscription is stopped.
                _connectionManagerMock.Setup(p => p.GetDeviceStatus(It.IsAny<string>())).Returns((ConnectionStatus.Disconnected, ConnectionStatusChangeReason.Retry_Expired));
                result = subscriptionScheduler.ComputeDataSubscriptionStatus("test-device-id", DeviceSubscriptionType.DesiredProperties, "http://abc");
                Assert.AreEqual("Stopped", result);

                // If the device is not connected or disconnected, the subscription is starting.
                _connectionManagerMock.Setup(p => p.GetDeviceStatus(It.IsAny<string>())).Returns((ConnectionStatus.Disconnected_Retrying, ConnectionStatusChangeReason.Communication_Error));
                result = subscriptionScheduler.ComputeDataSubscriptionStatus("test-device-id", DeviceSubscriptionType.DesiredProperties, "http://abc");
                Assert.AreEqual("Starting", result);
            }
        }