public void GetImageAsByteArray_WhenCannotReadNewImageFromCacheAndCanReadFromWebCam_ReturnImageFromWebCam(int userId, int cacheUpdaterUserId)
        {
            // Arrange
            const string userUtc = "some_UTC_value";

            _dateTimeProvider.DateTimeNow.Returns(new DateTime(2019, 05, 01, 15, 30, 30, 100));
            (int waitTimeMilliSec, string reason)valueTuple = (0, "");
            _imageFromCacheService.WaitBeforeGettingNextImage(Arg.Any <int>(), Arg.Any <DateTime>()).Returns(valueTuple);

            _imageFromCacheService.GetNewImageAsByteArray(Arg.Any <int>(), Arg.Any <DateTime>()).Returns((byte[])null);

            _cacheUpdater.Update(userId: cacheUpdaterUserId, lastUpdate: DateTime.MinValue);

            var imageFromWebCam = new Bitmap(1, 1);

            byte[] imageArrayFromWebCam = ImageHelper.ConvertImageToByteArray(imageFromWebCam);
            _imageFromWebCamService.GetImage(Arg.Any <string>()).Returns(imageFromWebCam);

            IImageProviderService imageProviderService = CreateValidImageProviderService();


            // Act
            bool canReadImageFromWebCam = imageProviderService.CanReadImageFromWebCam(userId, _dateTimeProvider.DateTimeNow);

            byte[] imageAsByteArray = imageProviderService.GetImageAsByteArray(userId, userUtc);

            // Assert
            Assert.That(canReadImageFromWebCam, Is.True);
            Assert.That(imageAsByteArray, Is.Not.Null);

            Assert.That(imageAsByteArray.Length, Is.EqualTo(imageArrayFromWebCam.Length));

            Assert.That(_cacheUpdater.LastUpdate, Is.EqualTo(_dateTimeProvider.DateTimeNow));
            Assert.That(_cacheUpdater.UserId, Is.EqualTo(userId));
        }
        public void CanReadImageFromWebCam_SameUserIdAndAnyRequestTime_ReturnTrue(int userId, int requestDelayMilliSec)
        {
            // Arrange
            _dateTimeProvider.DateTimeNow.Returns(new DateTime(2019, 05, 01, 15, 30, 30, 100));
            _cacheUpdater.Update(userId, _dateTimeProvider.DateTimeNow);
            IImageProviderService imageProviderService = CreateValidImageProviderService();
            DateTime requestTime = RequestTime(requestDelayMilliSec);

            // Act
            bool canReadImageFromWebCam = imageProviderService.CanReadImageFromWebCam(userId, requestTime);

            // Assert
            Assert.That(canReadImageFromWebCam, Is.True);
        }
        public void CanReadImageFromWebCam_DifferentUserIdAndCacheUpdaterIsGiven_ReturnExpectedValue(int requestDelayMilliSec, bool expectedCanRead)
        {
            // Arrange
            _dateTimeProvider.DateTimeNow.Returns(new DateTime(2019, 05, 01, 15, 30, 30, 100));

            const int userId             = 1;
            const int cacheUpdaterUserId = userId + 10;

            _cacheUpdater.Update(userId: cacheUpdaterUserId, lastUpdate: _dateTimeProvider.DateTimeNow);

            IImageProviderService imageProviderService = CreateValidImageProviderService();
            DateTime requestTime = RequestTime(requestDelayMilliSec + _cacheUpdaterExpirationMilliSec);

            // Act
            bool canReadImageFromWebCam = imageProviderService.CanReadImageFromWebCam(userId, requestTime);

            // Assert
            Assert.That(canReadImageFromWebCam, Is.EqualTo(expectedCanRead));
        }