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());
        }
Exemple #2
0
        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());
            }
        }
Exemple #3
0
 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();
     }
 }
Exemple #4
0
        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));
            }
        }
Exemple #5
0
        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
            });
        }
Exemple #7
0
 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
            });
        }
Exemple #9
0
        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);
        }