public async Task <IActionResult> Patch(Guid signalId, [FromBody] JsonPatchDocument <SignalWriteModel> request)
        {
            var privateKey = Request.Headers["private-key"];

            if (!string.IsNullOrEmpty(privateKey))
            {
                var publicKey = await _mediator.Send(new GetSettingRequest
                {
                    Name = GenerateKeysRequestHandler.PublicKeySettingName
                });

                if (publicKey == null)
                {
                    return(StatusCode(500, "No Public Key found."));
                }
            }

            var patchSignalRequest = new PatchSignalRequest
            {
                Id         = signalId,
                PrivateKey = privateKey,
                Patch      = request
            };

            if (!TryValidateModel(patchSignalRequest))
            {
                return(BadRequest(ModelState));
            }

            await _mediator.Send(patchSignalRequest);

            return(Ok());
        }
示例#2
0
        public async Task Should_Update_Signal_With_New_Encrypted_Object()
        {
            // Arrange
            _mediatorMock.Setup(x => x.Send(It.IsAny <EncryptionRequest>(), It.IsAny <CancellationToken>())).ReturnsAsync((EncryptionRequest encryptionRequest, CancellationToken token)
                                                                                                                          => Convert.ToBase64String(Encoding.UTF8.GetBytes(encryptionRequest.ToEncrypt)));
            _mediatorMock.Setup(x => x.Send(It.IsAny <GetSettingRequest>(), It.IsAny <CancellationToken>())).ReturnsAsync(Convert.ToBase64String(Encoding.UTF8.GetBytes("Test Public Key")));

            var          id       = Guid.NewGuid();
            const string oldValue = "Test Value";
            var          newValue = new SignalWriteModel {
                Name = "Test Name"
            };

            await _context.Signals.AddAsync(new Signal
            {
                Id              = 1,
                DateCreated     = DateTime.UtcNow,
                DateLastUpdated = DateTime.UtcNow,
                IsBaseType      = true,
                Name            = "Test",
                ResourceId      = id,
                Value           = oldValue,
                ValueType       = typeof(string).FullName,
                Tags            = Constants.EncryptedTag
            }).ConfigureAwait(false);

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

            var request = new PatchSignalRequest
            {
                Id    = id,
                Patch = new JsonPatchDocument <SignalWriteModel>()
                        .Replace(x => x.Tags, new List <string> {
                    "Tag1", "Tag2"
                })
                        .Replace(x => x.Value, newValue)
            };

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

            // Assert
            var signal = await _context.Signals.FirstOrDefaultAsync(s => s.ResourceId == id).ConfigureAwait(false);

            signal.Value.ShouldNotBe(JsonConvert.SerializeObject(newValue));
            signal.Value.ShouldNotBe(oldValue);
            signal.Tags.ShouldNotBeNull();
            signal.Tags.ShouldContain(Constants.EncryptedTag);
        }
示例#3
0
        public async Task Should_Update_Signal_With_New_Unencrypted_Base_Object()
        {
            // Arrange
            var          id       = Guid.NewGuid();
            const string newValue = "New Test Value";

            await _context.Signals.AddAsync(new Signal
            {
                Id              = 1,
                DateCreated     = DateTime.UtcNow,
                DateLastUpdated = DateTime.UtcNow,
                IsBaseType      = true,
                Name            = "Test",
                ResourceId      = id,
                Value           = "Test Value",
                ValueType       = typeof(string).FullName
            }).ConfigureAwait(false);

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

            var request = new PatchSignalRequest
            {
                Id    = id,
                Patch = new JsonPatchDocument <SignalWriteModel>()
                        .Replace(x => x.Tags, new List <string> {
                    "Tag1", "Tag2"
                })
                        .Replace(x => x.Value, newValue)
            };

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

            // Assert
            var signal = await _context.Signals.FirstOrDefaultAsync(s => s.ResourceId == id).ConfigureAwait(false);

            signal.Value.ShouldBe(newValue);
            signal.Tags.ShouldNotBeNull();
        }