public async Task Should_Get_Object_Signal_By_Name_And_Tag()
        {
            // Arrange
            var value = new TestObject {
                Value = Value
            };

            await _context.Signals.AddAsync(new Signal
            {
                Id              = 2,
                ResourceId      = Guid.NewGuid(),
                Name            = $"{Name}_object",
                Value           = JsonConvert.SerializeObject(value),
                ValueType       = value.GetSignalValueType(),
                IsBaseType      = value.IsBaseType(),
                Tags            = Tags,
                DateCreated     = DateTime.Now,
                DateLastUpdated = DateTime.Now
            }).ConfigureAwait(false);

            await _context.SaveChangesAsync().ConfigureAwait(false);

            var request = new GetSignalByNameAndTagRequest
            {
                Name = $"{Name}_object",
                Tag  = "Test"
            };

            // Act
            var result = await _sut.Handle(request, CancellationToken.None).ConfigureAwait(false);

            // Assert
            result.ShouldNotBeNull();
            result.Value.ShouldBeOfType <TestObject>();
        }
        public async Task Should_Get_Signal_By_Name_And_Tag()
        {
            // Arrange
            _context.Signals.Add(new Signal
            {
                Id              = 1,
                ResourceId      = _resourceId,
                Name            = Name,
                Value           = Value,
                ValueType       = Value.GetSignalValueType(),
                IsBaseType      = Value.IsBaseType(),
                Tags            = Tags,
                DateCreated     = DateTime.Now,
                DateLastUpdated = DateTime.Now
            });
            _context.SaveChanges();

            var request = new GetSignalByNameAndTagRequest
            {
                Name = Name,
                Tag  = "Test"
            };

            // Act
            var result = await _sut.Handle(request, CancellationToken.None).ConfigureAwait(false);

            // Assert
            result.ShouldNotBeNull();
            result.ResourceId.ShouldBe(_resourceId);
            result.Name.ShouldBe(Name);
            result.Value.ShouldBe(Value);
        }
        public async Task Should_Get_Encrypted_Object_Signal_With_No_PrivateKey()
        {
            // Arrange
            var value = new TestObject {
                Value = Value
            };
            await _context.Signals.AddAsync(new Signal
            {
                Id              = 3,
                ResourceId      = Guid.NewGuid(),
                Name            = $"{Name}_object_encrypted",
                Value           = Convert.ToBase64String(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value))),
                ValueType       = value.GetSignalValueType(),
                IsBaseType      = value.IsBaseType(),
                Tags            = $"{Tags},{Constants.EncryptedTag}",
                DateCreated     = DateTime.Now,
                DateLastUpdated = DateTime.Now
            }).ConfigureAwait(false);

            await _context.SaveChangesAsync().ConfigureAwait(false);

            var request = new GetSignalByNameAndTagRequest
            {
                Name = $"{Name}_object_encrypted",
                Tag  = "Test"
            };

            // Act
            var result = await _sut.Handle(request, CancellationToken.None).ConfigureAwait(false);

            // Assert
            result.ShouldNotBeNull();
            result.Value.ShouldBeOfType <string>();
        }
        public async Task Should_Only_Call_For_Decryption_If_Signal_Is_Marked_As_Encrypted(bool isEncrypted)
        {
            // Arrange
            var value = new TestObject {
                Value = Value
            };
            await _context.Signals.AddAsync(new Signal
            {
                Id         = 4,
                ResourceId = Guid.NewGuid(),
                Name       = $"{Name}_object_encrypted",
                Value      = isEncrypted
                    ? Convert.ToBase64String(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)))
                    : JsonConvert.SerializeObject(value),
                ValueType       = value.GetSignalValueType(),
                IsBaseType      = value.IsBaseType(),
                Tags            = $"{Tags}{(isEncrypted ? $",{Constants.EncryptedTag}" : string.Empty)}",
                DateCreated     = DateTime.Now,
                DateLastUpdated = DateTime.Now
            }).ConfigureAwait(false);

            await _context.SaveChangesAsync().ConfigureAwait(false);

            _mediatorMock.Setup(x => x.Send(It.IsAny <DecryptionRequest>(), It.IsAny <CancellationToken>())).ReturnsAsync(JsonConvert.SerializeObject(value));

            var request = new GetSignalByNameAndTagRequest
            {
                Name       = $"{Name}_object_encrypted",
                Tag        = "Test",
                PrivateKey = "Private Key"
            };

            // Act
            await _sut.Handle(request, CancellationToken.None).ConfigureAwait(false);

            // Assert
            _mediatorMock.Verify(x => x.Send(It.IsAny <DecryptionRequest>(), It.IsAny <CancellationToken>()), () => isEncrypted ? Times.Once() : Times.Never());
        }