private async Task <List <DocumentDetails> > GetLettersWithStatus(LetterStatusEnum status) { var tableName = _documentsTable.TableName; var queryRequest = new QueryRequest { TableName = tableName, IndexName = "Status", ScanIndexForward = true, KeyConditionExpression = "#status = :value", ExpressionAttributeNames = new Dictionary <string, string> { { "#status", "Status" } }, ExpressionAttributeValues = new Dictionary <string, AttributeValue> { { ":value", new AttributeValue { S = status.ToString() } }, }, }; var results = await _databaseClient.QueryAsync(queryRequest); return(results.Items.Select(entry => new DocumentDetails { DocumentCreator = entry["DocumentCreatorUserName"].S?.ToString(), CominoDocumentNumber = entry["CominoDocumentNumber"].S?.ToString(), DocumentType = entry["DocumentType"].S?.ToString(), LetterType = entry["LetterType"].S?.ToString(), Id = entry["InitialTimestamp"].S?.ToString(), Date = entry["InitialTimestamp"].S?.ToString(), Status = Enum.Parse <LetterStatusEnum>(entry["Status"].S?.ToString()), GovNotifyNotificationId = entry.ContainsKey("GovNotifyNotificationId") ? entry["GovNotifyNotificationId"].S?.ToString() : null, }).ToList()); }
public static string PrettierStatusName(this LetterStatusEnum status) { switch (status) { case LetterStatusEnum.GovNotifyPendingVirusCheck: return("Pending Virus Check"); case LetterStatusEnum.GovNotifyVirusScanFailed: return("Virus Scan Failed"); case LetterStatusEnum.GovNotifyValidationFailed: return("Validation Failed"); case LetterStatusEnum.LetterSent: return("Letter Sent"); case LetterStatusEnum.ProcessingError: return("Processing Error"); case LetterStatusEnum.WaitingForApproval: return("Waiting for Approval"); case LetterStatusEnum.ReadyForGovNotify: return("Ready for Gov Notify"); case LetterStatusEnum.SentToGovNotify: return("Sent to Gov Notify"); case LetterStatusEnum.Cancelled: return("Cancelled"); default: return(status.ToString()); } }
private void SetupLocalDatabaseToUpdateStatus(List <DocumentDetails> letters, LetterStatusEnum status = LetterStatusEnum.GovNotifyPendingVirusCheck, bool statusUpdated = true) { foreach (var letter in letters) { _localDbGateway.Setup(x => x.UpdateStatus(letter.Id, status)) .ReturnsAsync(new UpdateStatusResponse { StatusUpdated = statusUpdated }).Verifiable(); } }
public async Task ItSendsTheNewStatusesToTheLocalDatabaseToUpdate(LetterStatusEnum newStatus) { var letters = SetupLocalDatabaseToGetLettersToCheck(); SetupGovNotifyToReturnStatus(letters, newStatus); SetupLocalDatabaseToUpdateStatus(letters, newStatus); await _subject.Execute(); foreach (var letter in letters) { _localDbGateway.Verify(x => x.UpdateStatus(letter.Id, newStatus)); } }
public async Task IfTheStatusHasChanged_LogsThisInTheDatabase(LetterStatusEnum status, string expectedMessage) { var letters = SetupLocalDatabaseToGetLettersToCheck(); SetupGovNotifyToReturnStatus(letters, status); SetupLocalDatabaseToUpdateStatus(letters, status); await _subject.Execute(); foreach (var letter in letters) { _logger.Verify(l => l.LogMessage(letter.Id, expectedMessage)); } }
public async Task <UpdateStatusResponse> UpdateStatus(string id, LetterStatusEnum newStatus) { var updateDoc = new Document { ["InitialTimestamp"] = id, ["Status"] = newStatus.ToString(), }; var oldAttributes = await _documentsTable.UpdateItemAsync(updateDoc, new UpdateItemOperationConfig { ReturnValues = ReturnValues.UpdatedOldAttributes }); var statusChange = oldAttributes["Status"].ToString() != newStatus.ToString(); if (statusChange) { await LogMessage(id, $"Status changed to {newStatus}"); } LambdaLogger.Log($"Status change: {statusChange}. New status {newStatus}, old status {oldAttributes["Status"]}"); return(new UpdateStatusResponse { StatusUpdated = statusChange }); }
private void SetupGovNotifyToReturnStatus(IEnumerable <DocumentDetails> letters, LetterStatusEnum status = LetterStatusEnum.GovNotifyPendingVirusCheck) { foreach (var letter in letters) { _govNotifyGateway.Setup(x => x.GetStatusForLetter(letter.Id, letter.GovNotifyNotificationId)) .Returns(new GovNotifyStatusResponse { Status = status, SentAt = null }).Verifiable(); } }
public void GetStatusForLetter_CallsGovNotifyWithTheCorrectIdAndReturnsStatusInformation(string govNotifyStatus, LetterStatusEnum expectedStatus) { var notificationId = _fixture.Create <string>(); var returnedNotification = _fixture.Create <Notification>(); returnedNotification.status = govNotifyStatus; returnedNotification.completedAt = null; _govNotifyMockClient.Setup(x => x.GetNotificationById(notificationId)).Returns(returnedNotification); var response = _subject.GetStatusForLetter("doc ID", notificationId); response.Should().BeEquivalentTo(new GovNotifyStatusResponse { Status = expectedStatus, SentAt = null }); }
private async Task <DocumentDetails> AddDocumentToDatabase(DocumentDetails document, string currentTimestamp = null, LetterStatusEnum status = LetterStatusEnum.Waiting) { var timestamp = currentTimestamp ?? GetCurrentTimestamp(); var documentItem = new Document { ["CominoDocumentNumber"] = document.CominoDocumentNumber, ["DocumentCreatorUserName"] = document.DocumentCreator, ["InitialTimestamp"] = document.Date, ["LetterType"] = document.LetterType, ["DocumentType"] = document.DocumentType, ["Status"] = status.ToString(), ["Id"] = document.Date }; await DatabaseClient.DocumentTable.PutItemAsync(documentItem); document.Status = status; document.Log = new Dictionary <string, string>(); return(document); }