Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 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;
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
            }
        }
Exemplo n.º 9
0
        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}"));
            }
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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);
        }