public async Task DoesNotSaveIfEventIsMissing() { var entity = new AddStatusMessageManualChangeEntity("path", new DateTime(2018, 8, 21), "message", false) { Timestamp = new DateTimeOffset(2018, 8, 21, 0, 0, 0, TimeSpan.Zero) }; var time = entity.Timestamp.UtcDateTime; var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); _table .Setup(x => x.RetrieveAsync <EventEntity>(eventRowKey)) .Returns(Task.FromResult <EventEntity>(null)); _table .Setup(x => x.InsertAsync(It.IsAny <MessageEntity>())) .Returns(Task.CompletedTask); _table .Setup(x => x.InsertAsync(It.IsAny <EventEntity>())) .Returns(Task.CompletedTask); await Assert.ThrowsAsync <ArgumentException>(() => _handler.Handle(entity)); _table.Verify(x => x.InsertAsync(It.IsAny <MessageEntity>()), Times.Never()); _table.Verify(x => x.InsertAsync(It.IsAny <EventEntity>()), Times.Never()); }
public async Task ThrowsArgumentExceptionIfMissingEvent() { var entity = new EditStatusMessageManualChangeEntity("path", new DateTime(2018, 8, 20), new DateTime(2018, 8, 21), "message"); var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); _table .Setup(x => x.RetrieveAsync <EventEntity>(eventRowKey)) .Returns(Task.FromResult <EventEntity>(null)); await Assert.ThrowsAsync <ArgumentException>(() => _handler.Handle(entity)); }
public async Task Handle(EditStatusEventManualChangeEntity entity) { var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); var eventEntity = await _table.RetrieveAsync <EventEntity>(eventRowKey); if (eventEntity == null) { throw new ArgumentException("Cannot edit an event that does not exist."); } eventEntity.AffectedComponentStatus = entity.EventAffectedComponentStatus; ManualStatusChangeUtility.UpdateEventIsActive(eventEntity, entity.EventIsActive, entity.Timestamp.UtcDateTime); await _table.ReplaceAsync(eventEntity); }
public async Task Handle(DeleteStatusMessageManualChangeEntity entity) { var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); var messageEntity = await _table.RetrieveAsync <MessageEntity>(MessageEntity.GetRowKey(eventRowKey, entity.MessageTimestamp)); if (messageEntity == null) { throw new ArgumentException("Cannot delete a message that does not exist."); } messageEntity.Contents = ""; messageEntity.Type = (int)MessageType.Manual; await _table.ReplaceAsync(messageEntity); }
public async Task DeletesEvent() { var entity = new DeleteStatusEventManualChangeEntity("path", new DateTime(2018, 8, 21)); var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); _table .Setup(x => x.DeleteAsync(EventEntity.DefaultPartitionKey, eventRowKey)) .Returns(Task.CompletedTask) .Verifiable(); await _handler.Handle(entity); _table.Verify(); }
public async Task ThrowsArgumentExceptionIfMissingEvent() { var entity = new EditStatusEventManualChangeEntity("path", ComponentStatus.Degraded, new DateTime(2018, 8, 20), false) { Timestamp = new DateTimeOffset(2018, 8, 21, 0, 0, 0, TimeSpan.Zero) }; var time = entity.Timestamp.UtcDateTime; var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); _table .Setup(x => x.RetrieveAsync <EventEntity>(eventRowKey)) .Returns(Task.FromResult <EventEntity>(null)); await Assert.ThrowsAsync <ArgumentException>(() => _handler.Handle(entity)); }
public async Task EditsMessage(MessageType type) { var entity = new EditStatusMessageManualChangeEntity("path", new DateTime(2018, 8, 20), new DateTime(2018, 8, 21), "message"); var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); var messageRowKey = MessageEntity.GetRowKey(eventRowKey, entity.MessageTimestamp); var existingEntity = new EventEntity( entity.EventAffectedComponentPath, entity.EventStartTime, ComponentStatus.Up, null); _table .Setup(x => x.RetrieveAsync <EventEntity>(eventRowKey)) .Returns(Task.FromResult(existingEntity)); var existingMessage = new MessageEntity( existingEntity, entity.MessageTimestamp, "old message", type); _table .Setup(x => x.RetrieveAsync <MessageEntity>(messageRowKey)) .Returns(Task.FromResult(existingMessage)); _table .Setup(x => x.ReplaceAsync( It.Is <MessageEntity>(messageEntity => messageEntity.PartitionKey == MessageEntity.DefaultPartitionKey && messageEntity.RowKey == messageRowKey && messageEntity.ParentRowKey == eventRowKey && messageEntity.Time == existingMessage.Time && messageEntity.Contents == entity.MessageContents && messageEntity.Type == (int)MessageType.Manual ))) .Returns(Task.CompletedTask) .Verifiable(); await _handler.Handle(entity); _table.Verify(); }
public async Task Handle(AddStatusMessageManualChangeEntity entity) { var time = entity.Timestamp.UtcDateTime; var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); var eventEntity = await _table.RetrieveAsync <EventEntity>(eventRowKey); if (eventEntity == null) { throw new ArgumentException("Cannot create a message for an event that does not exist."); } var messageEntity = new MessageEntity(eventEntity, time, entity.MessageContents, MessageType.Manual); await _table.InsertAsync(messageEntity); if (ManualStatusChangeUtility.UpdateEventIsActive(eventEntity, entity.EventIsActive, time)) { await _table.ReplaceAsync(eventEntity); } }
public async Task EditsEvent(bool eventIsActive, bool shouldEventBeActive) { var entity = new EditStatusEventManualChangeEntity("path", ComponentStatus.Degraded, new DateTime(2018, 8, 20), shouldEventBeActive) { Timestamp = new DateTimeOffset(2018, 8, 21, 0, 0, 0, TimeSpan.Zero) }; var time = entity.Timestamp.UtcDateTime; var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); var existingEntity = new EventEntity( entity.EventAffectedComponentPath, entity.EventStartTime, ComponentStatus.Up, eventIsActive ? (DateTime?)null : new DateTime(2018, 8, 19)); _table .Setup(x => x.RetrieveAsync <EventEntity>(eventRowKey)) .Returns(Task.FromResult(existingEntity)); var shouldUpdateEndTime = ManualStatusChangeUtility.ShouldEventBeActive(existingEntity, shouldEventBeActive, time); _table .Setup(x => x.ReplaceAsync( It.Is <EventEntity>(eventEntity => eventEntity.PartitionKey == EventEntity.DefaultPartitionKey && eventEntity.RowKey == eventRowKey && eventEntity.AffectedComponentPath == existingEntity.AffectedComponentPath && eventEntity.AffectedComponentStatus == entity.EventAffectedComponentStatus && eventEntity.StartTime == existingEntity.StartTime && eventEntity.EndTime == (shouldUpdateEndTime ? time : existingEntity.EndTime) ))) .Returns(Task.CompletedTask) .Verifiable(); await _handler.Handle(entity); _table.Verify(); }
public async Task SavesMessageAndEvent(bool eventIsActive) { var entity = new AddStatusEventManualChangeEntity("path", ComponentStatus.Up, "message", eventIsActive) { Timestamp = new DateTimeOffset(2018, 8, 21, 0, 0, 0, TimeSpan.Zero) }; var time = entity.Timestamp.UtcDateTime; var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, time); _table.Setup(x => x.InsertAsync( It.Is <MessageEntity>(messageEntity => messageEntity.PartitionKey == MessageEntity.DefaultPartitionKey && messageEntity.RowKey == MessageEntity.GetRowKey(eventRowKey, time) && messageEntity.ParentRowKey == eventRowKey && messageEntity.Time == time && messageEntity.Contents == entity.MessageContents ))) .Returns(Task.CompletedTask) .Verifiable(); _table.Setup(x => x.InsertAsync( It.Is <EventEntity>(eventEntity => eventEntity.PartitionKey == EventEntity.DefaultPartitionKey && eventEntity.RowKey == eventRowKey && eventEntity.AffectedComponentPath == entity.EventAffectedComponentPath && eventEntity.AffectedComponentStatus == entity.EventAffectedComponentStatus && eventEntity.StartTime == time && eventEntity.EndTime == (entity.EventIsActive ? (DateTime?)null : time) ))) .Returns(Task.CompletedTask) .Verifiable(); await _handler.Handle(entity); _table.Verify(); }
public Task Handle(DeleteStatusEventManualChangeEntity entity) { var eventRowKey = EventEntity.GetRowKey(entity.EventAffectedComponentPath, entity.EventStartTime); return(_table.DeleteAsync(EventEntity.DefaultPartitionKey, eventRowKey)); }