public void Setup() { _options = new EasyMwsOptions(); var propertiesContainer = new FeedSubmissionPropertiesContainer("testFeedContent", "testFeedType", false, new List <string>(MwsMarketplaceGroup.AmazonEurope().Select(m => m.Id))); var serializedPropertiesContainer = JsonConvert.SerializeObject(propertiesContainer); _feedSubmissionEntries = new List <FeedSubmissionEntry> { new FeedSubmissionEntry(serializedPropertiesContainer) { Id = 2 }, new FeedSubmissionEntry(serializedPropertiesContainer) { Id = 1, AmazonRegion = AmazonRegion.Europe, TargetHandlerId = "TargetHandlerId", TargetHandlerArgs = JsonConvert.SerializeObject(new Dictionary <string, object> { { "key1", "value1" } }), FeedType = propertiesContainer.FeedType, FeedSubmissionData = JsonConvert.SerializeObject(propertiesContainer) } }; _loggerMock = new Mock <IEasyMwsLogger>(); _feedSubmissionCallbackRepoMock = new Mock <IFeedSubmissionEntryRepository>(); _feedSubmissionCallbackRepoMock.Setup(x => x.GetAll()).Returns(_feedSubmissionEntries.AsQueryable()); _feedSubmissionEntryService = new FeedSubmissionEntryService(_feedSubmissionCallbackRepoMock.Object, _options, _loggerMock.Object); }
public void QueueFeed(FeedSubmissionPropertiesContainer feedSubmissionContainer, string targetEventId = null, Dictionary <string, object> targetEventArgs = null) { using (var feedSubmissionService = new FeedSubmissionEntryService(_options, _easyMwsLogger)) { _feedProcessor.QueueFeed(feedSubmissionService, feedSubmissionContainer, targetEventId, targetEventArgs); } }
public void QueueFeed_WithNullFeedSubmissionPropertiesContainerArgument_ThrowsArgumentNullException() { FeedSubmissionPropertiesContainer propertiesContainer = null; var callbackMethod = new Action <Stream, object>((stream, o) => { _called = true; }); _feedProcessor.QueueFeed(_feedSubmissionServiceMock.Object, propertiesContainer); _loggerMock.Verify(lm => lm.Error(It.IsAny <string>(), It.IsAny <Exception>()), Times.Once); }
public FeedRequestFailedEventArgs(FeedRequestFailureReasonType requestFailureReason, AmazonRegion amazonRegion, DateTime lastAmazonRequestTimestamp, string lastAmazonStatus, string feedSubmissionId, FeedSubmissionPropertiesContainer feedSubmissionPropertiesContainer, string targetHandlerId, string targetHandlerArgs, string feedContent, string feedType) { RequestFailureReason = requestFailureReason; AmazonRegion = amazonRegion; LastAmazonRequestTimestamp = lastAmazonRequestTimestamp; LastAmazonStatus = lastAmazonStatus; FeedSubmissionId = feedSubmissionId; FeedSubmissionPropertiesContainer = feedSubmissionPropertiesContainer; TargetHandlerId = targetHandlerId; TargetHandlerArgs = targetHandlerArgs; FeedContent = feedContent; FeedType = feedType; }
public void QueueFeed_WithNullTargetEventId_SavesFeedEntry_NeverCallsLogError() { var propertiesContainer = new FeedSubmissionPropertiesContainer("testFeedContent", "testFeedType"); var callbackMethod = (Action <Stream, object>)null; _feedProcessor.QueueFeed(_feedSubmissionServiceMock.Object, propertiesContainer, null, new Dictionary <string, object> { { "key", "value" } }); _feedSubmissionServiceMock.Verify(rrcs => rrcs.Create(It.IsAny <FeedSubmissionEntry>()), Times.Once); _feedSubmissionServiceMock.Verify(rrcs => rrcs.SaveChanges(), Times.Once); _loggerMock.Verify(lm => lm.Error(It.IsAny <string>(), It.IsAny <ArgumentNullException>()), Times.Never); }
public void GetNextFromQueueOfFeedsToSubmit_ReturnsFirstFeedSubmissionFromQueueForGivenRegionAndMerchantId() { var propertiesContainer = new FeedSubmissionPropertiesContainer("testFeedContent", "testFeedType"); var serializedPropertiesContainer = JsonConvert.SerializeObject(propertiesContainer); var merchantId1 = "test merchant id 1"; var feedSubmissionWithDifferentRegion = new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = merchantId1, Id = 2, FeedSubmissionId = null, FeedSubmissionRetryCount = 0 }; var feedSubmissionWithSameRegionButDifferentMerchantId = new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Australia, MerchantId = merchantId1, Id = 2, FeedSubmissionId = null, FeedSubmissionRetryCount = 0 }; var feedSubmissionWithSameRegionAndMerchantId1 = new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Australia, MerchantId = _merchantId, Id = 3, FeedSubmissionId = null, FeedSubmissionRetryCount = 0 }; var feedSubmissionWithSameRegionAndMerchantId2 = new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Australia, MerchantId = _merchantId, Id = 4, FeedSubmissionId = null, FeedSubmissionRetryCount = 0 }; _feedSubmissionEntries.Add(feedSubmissionWithDifferentRegion); _feedSubmissionEntries.Add(feedSubmissionWithSameRegionButDifferentMerchantId); _feedSubmissionEntries.Add(feedSubmissionWithSameRegionAndMerchantId1); _feedSubmissionEntries.Add(feedSubmissionWithSameRegionAndMerchantId2); var feedSubmissionCallback = _feedSubmissionEntryService.GetNextFromQueueOfFeedsToSubmit(_merchantId, AmazonRegion.Australia); Assert.IsNotNull(feedSubmissionCallback); Assert.AreEqual(feedSubmissionWithSameRegionAndMerchantId1.Id, feedSubmissionCallback.Id); }
public void Poll_WithGetNextFeedToSubmitFromQueueReturningNotNull_DoesSubmitFeedToAmazon() { var propertiesContainer = new FeedSubmissionPropertiesContainer("testFeedContent", "testFeedType"); var serializedPropertiesContainer = JsonConvert.SerializeObject(propertiesContainer); _feedSubmissionServiceMock .Setup(rrp => rrp.GetNextFromQueueOfFeedsToSubmit(It.IsAny <string>(), It.IsAny <AmazonRegion>(), MarkEntryAsHandled)) .Returns(new FeedSubmissionEntry(serializedPropertiesContainer)); _feedProcessor.PollFeeds(_feedSubmissionServiceMock.Object); _feedSubmissionProcessorMock.Verify( rrp => rrp.SubmitFeedToAmazon(It.IsAny <IFeedSubmissionEntryService>(), It.IsAny <FeedSubmissionEntry>()), Times.Once); }
public void QueueFeed(IFeedSubmissionEntryService feedSubmissionService, FeedSubmissionPropertiesContainer propertiesContainer, string targetEventId = null, Dictionary <string, object> targetEventArgs = null) { try { if (propertiesContainer == null) { throw new ArgumentNullException(); } var serializedPropertiesContainer = JsonConvert.SerializeObject(propertiesContainer); var feedSubmission = new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = _region, MerchantId = _merchantId, LastSubmitted = DateTime.MinValue, DateCreated = DateTime.UtcNow, IsProcessingComplete = false, HasErrors = false, SubmissionErrorData = null, FeedSubmissionRetryCount = 0, FeedSubmissionId = null, FeedType = propertiesContainer.FeedType, TargetHandlerId = targetEventId, TargetHandlerArgs = targetEventArgs == null ? null : JsonConvert.SerializeObject(targetEventArgs), InstanceId = _options?.EventPublishingOptions?.RestrictInvocationToOriginatingInstance?.HashedInstanceId, Details = new FeedSubmissionDetails { FeedContent = ZipHelper.CreateArchiveFromContent(propertiesContainer.FeedContent) } }; feedSubmissionService.Unlock(feedSubmission, "Unlocking single feed submission entry - newly created, ready for processing."); feedSubmissionService.Create(feedSubmission); feedSubmissionService.SaveChanges(); _logger.Debug($"The following feed was queued for submission to Amazon {feedSubmission.EntryIdentityDescription}."); } catch (Exception e) { _logger.Error(e.Message, e); } }
public void GetAllPendingReportFromQueue_When_ReturnMoreThan20ValidEntriesExist_Then_Only20EntriesAreReturned() { var propertiesContainer = new FeedSubmissionPropertiesContainer("testFeedContent", "testFeedType"); var serializedPropertiesContainer = JsonConvert.SerializeObject(propertiesContainer); var merchantIdToRequest = $"{_merchantId}_valid"; for (int i = 0; i < 50; i++) { _feedSubmissionEntries.Add(new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = merchantIdToRequest, Id = i, FeedSubmissionId = $"FeedSubmissionId{i}", IsProcessingComplete = false }); } for (int i = 50; i < 100; i++) { _feedSubmissionEntries.Add(new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.NorthAmerica, MerchantId = _merchantId, Id = i, FeedSubmissionId = $"FeedSubmissionId{i}", IsProcessingComplete = false }); } var expectedNumberOfEntriesToBeReturned = 20; // Act var listPendingReports = _feedSubmissionEntryService.GetIdsForSubmittedFeedsFromQueue(merchantIdToRequest, AmazonRegion.Europe).ToList(); // Assert Assert.AreEqual(expectedNumberOfEntriesToBeReturned, listPendingReports.Count()); for (int i = 0; i < expectedNumberOfEntriesToBeReturned; i++) { Assert.IsTrue(listPendingReports.Contains($"FeedSubmissionId{i}")); } }
public void QueueFeed_WithNonEmptyArguments_CallsFeedSubmissionEntryServiceCreateOnceWithCorrectData() { var propertiesContainer = new FeedSubmissionPropertiesContainer("testFeedContent", "testFeedType"); var callbackMethod = new Action <Stream, object>((stream, o) => { _called = true; }); FeedSubmissionEntry feedSubmissionEntry = null; _feedSubmissionServiceMock.Setup(rrcsm => rrcsm.Create(It.IsAny <FeedSubmissionEntry>())) .Callback <FeedSubmissionEntry>((p) => { feedSubmissionEntry = p; }); _feedProcessor.QueueFeed(_feedSubmissionServiceMock.Object, propertiesContainer, "TargetHandlerId", new Dictionary <string, object> { { "k1", "v1" }, { "k2", "v2" } }); _feedSubmissionServiceMock.Verify(rrcsm => rrcsm.Create(It.IsAny <FeedSubmissionEntry>()), Times.Once); Assert.AreEqual(JsonConvert.SerializeObject(propertiesContainer), feedSubmissionEntry.FeedSubmissionData); Assert.AreEqual(AmazonRegion.Europe, feedSubmissionEntry.AmazonRegion); Assert.AreEqual("TargetHandlerId", feedSubmissionEntry.TargetHandlerId); Assert.AreEqual("{\"k1\":\"v1\",\"k2\":\"v2\"}", feedSubmissionEntry.TargetHandlerArgs); }
GetNextFromQueueOfFeedsToSubmit_ReturnsFirstFeedSubmissionFromQueueWithNullFeedSubmissionId_AndSkipsEntriesWithNonNullFeedSubmissionId() { var propertiesContainer = new FeedSubmissionPropertiesContainer("testFeedContent", "testFeedType"); var serializedPropertiesContainer = JsonConvert.SerializeObject(propertiesContainer); var feedSubmissionWithNonNullFeedSubmissionId1 = new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 2, FeedSubmissionId = "testSubmissionId2", FeedSubmissionRetryCount = 0 }; var feedSubmissionWithNullFeedSubmissionId1 = new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 3, FeedSubmissionId = null, FeedSubmissionRetryCount = 0 }; var feedSubmissionWithNullFeedSubmissionId2 = new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 4, FeedSubmissionId = null, FeedSubmissionRetryCount = 0 }; _feedSubmissionEntries.Add(feedSubmissionWithNonNullFeedSubmissionId1); _feedSubmissionEntries.Add(feedSubmissionWithNullFeedSubmissionId1); _feedSubmissionEntries.Add(feedSubmissionWithNullFeedSubmissionId2); var feedSubmissionCallback = _feedSubmissionEntryService.GetNextFromQueueOfFeedsToSubmit(_merchantId, _region); Assert.IsNotNull(feedSubmissionCallback); Assert.AreEqual(feedSubmissionWithNullFeedSubmissionId1.Id, feedSubmissionCallback.Id); }
public void GetAllSubmittedFeedsFromQueue_ReturnsListOfSubmittedFeeds_ForGivenMerchant() { // Arrange var propertiesContainer = new FeedSubmissionPropertiesContainer("testFeedContent", "testFeedType"); var serializedPropertiesContainer = JsonConvert.SerializeObject(propertiesContainer); var testMerchantId2 = "test merchant id 2"; var data = new List <FeedSubmissionEntry> { new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = testMerchantId2, Id = 2, FeedSubmissionId = "FeedSubmissionId2", IsProcessingComplete = false }, new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = testMerchantId2, Id = 3, FeedSubmissionId = "FeedSubmissionId3", IsProcessingComplete = false }, new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 4, FeedSubmissionId = "FeedSubmissionId4", IsProcessingComplete = false }, new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 5, FeedSubmissionId = "FeedSubmissionId5", IsProcessingComplete = false }, new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 6, FeedSubmissionId = null, IsProcessingComplete = false }, new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.Europe, MerchantId = _merchantId, Id = 7, FeedSubmissionId = "FeedSubmissionId7", IsProcessingComplete = true }, new FeedSubmissionEntry(serializedPropertiesContainer) { AmazonRegion = AmazonRegion.NorthAmerica, MerchantId = _merchantId, Id = 8, FeedSubmissionId = "FeedSubmissionId8", IsProcessingComplete = false } }; _feedSubmissionEntries.AddRange(data); // Act var listSubmittedFeeds = _feedSubmissionEntryService.GetIdsForSubmittedFeedsFromQueue(_merchantId, _region); // Assert Assert.AreEqual(2, listSubmittedFeeds.Count()); Assert.IsTrue(listSubmittedFeeds.Count(sf => sf == "FeedSubmissionId4" || sf == "FeedSubmissionId5") == 2); }