public async Task SendMessageAsync_WithStoreManagerTest() { var amazonSQS = Substitute.For <IAmazonSQS>(); var storeManager = Substitute.For <IStorageManager>(); SQSManager subscriber = Substitute.ForPartsOf <SQSManager>(amazonSQS, storeManager); var document = new byte[700000]; for (int j = 0; j < document.Length; j++) { document[j] = 0x20; } var content = new LoanMessage { LoanID = 1, LoanNumber = System.Text.Encoding.Default.GetString(document), Amount = 1000 }; var serializedContent = JsonConvert.SerializeObject(content); var expectedRef = new S3StorageReference("ValidKey"); storeManager.PutDataAsync(Arg.Any <string>()).ReturnsForAnyArgs(info => expectedRef); amazonSQS.CreateQueueAsync(Arg.Any <string>()) .ReturnsForAnyArgs(info => new CreateQueueResponse { QueueUrl = TestQueueURL, HttpStatusCode = HttpStatusCode.OK }); amazonSQS.SendMessageAsync(Arg.Any <SendMessageRequest>()) .ReturnsForAnyArgs(new SendMessageResponse() { HttpStatusCode = HttpStatusCode.OK }); await subscriber.SendMessageAsync(QueueName, content); //if storemanager was called, pass await storeManager.ReceivedWithAnyArgs().PutDataAsync(serializedContent); await amazonSQS.Received() .SendMessageAsync(Arg.Is <SendMessageRequest>(x => x.MessageBody == JsonConvert.SerializeObject(expectedRef))); }
public void ReceiveMessage_WithStoreManagerTest() { var amazonSQS = Substitute.For <IAmazonSQS>(); var storeManager = Substitute.For <IStorageManager>(); _logger = Substitute.For <ILogger>(); storeManager.StorageReferenceType.Returns(typeof(S3StorageReference)); storeManager.When(x => x.DeleteData(Arg.Any <S3StorageReference>())).DoNotCallBase(); SQSManager subscriber = new SQSManager(amazonSQS, storeManager); var content = new LoanMessage { LoanID = 1, LoanNumber = "067", Amount = 1000 }; var serializedContent = JsonConvert.SerializeObject(content); var expectedRef = new S3StorageReference("ValidKey"); //storeManager.PutData(serializedContent).Returns(info => expectedRef); storeManager.GetData(Arg.Any <S3StorageReference>()).ReturnsForAnyArgs(info => serializedContent); var message = new Message { Body = JsonConvert.SerializeObject(expectedRef), ReceiptHandle = "Test_ReceiptHandle" }; message.MessageAttributes.Add("SQSLargePayloadSize", new MessageAttributeValue { DataType = "Number", StringValue = "123456" }); amazonSQS.ReceiveMessageAsync(Arg.Any <ReceiveMessageRequest>()).ReturnsForAnyArgs( info => new ReceiveMessageResponse { HttpStatusCode = HttpStatusCode.OK, Messages = new AutoConstructedList <Message> { message } }); amazonSQS.CreateQueueAsync(Arg.Any <string>()) .ReturnsForAnyArgs(info => new CreateQueueResponse { QueueUrl = TestQueueURL, HttpStatusCode = HttpStatusCode.OK }); amazonSQS.DeleteMessageAsync(Arg.Any <DeleteMessageRequest>()).ReturnsForAnyArgs( info => new DeleteMessageResponse { HttpStatusCode = HttpStatusCode.OK, } ); subscriber.ReceiveMessage <LoanMessage>(QueueName, Handler, default(CancellationToken)); storeManager.Received().GetData(Arg.Is <S3StorageReference>(x => x.GetStorageKey() == expectedRef.GetStorageKey())); }