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()); }
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); }
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(); }