public async Task Run_ShouldTerminateExecutionWhenItCantFindPost()
        {
            var fbIntegrationService = new Mock <IFacebookIntegration>();

            fbIntegrationService.Setup(x => x.GetPostById(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(null);
            ObjectFactory.Container.Inject(typeof(IFacebookIntegration), fbIntegrationService.Object);

            var activity = New <Monitor_Feed_Posts_v1>();
            //Arrage
            var activityContext = await ConfigureMonitorFeedPosts(activity);

            var fbEventCM = new FacebookUserEventCM
            {
                Id            = "123",
                ChangedFields = new string[] { "feed" },
                Time          = "123",
                UserId        = "123"
            };
            var eventReportCrate = new EventReportCM
            {
                EventNames   = "feed",
                EventPayload = new CrateStorage(Crate.FromContent("Facebook user event", fbEventCM))
            };
            var containerExecutionContext = new ContainerExecutionContext
            {
                PayloadStorage = new CrateStorage(Crate.FromContent(string.Empty, new OperationalStateCM()), Crate.FromContent("Facebook user event", eventReportCrate))
            };

            //Act
            containerExecutionContext = await RunMonitorFeedPosts(activity, activityContext, containerExecutionContext);

            var operationalStateCM = containerExecutionContext.PayloadStorage.CrateContentsOfType <OperationalStateCM>().Single();

            Assert.True(operationalStateCM.CurrentActivityResponse.Type == ActivityResponse.RequestTerminate.ToString(), "Monitor_Feed_Posts_v1 doesn't terminate container execution when activity can't find related post on facebook");
        }
Beispiel #2
0
        public async Task <List <Crate> > ProcessUserEvents(IContainer container, string curExternalEventPayload)
        {
            var notification = JsonConvert.DeserializeObject <UserNotification>(curExternalEventPayload);

            if (notification.Object != "user")
            {
                throw new Exception("Unknown event source");
            }
            var eventList = new List <Crate>();

            foreach (var entry in notification.Entry)
            {
                var fbEventCM = new FacebookUserEventCM
                {
                    Id            = entry.Id,
                    ChangedFields = entry.ChangedFields,
                    Time          = entry.Time,
                    UserId        = entry.Uid
                };
                var eventReportContent = new EventReportCM
                {
                    EventNames        = string.Join(",", fbEventCM.ChangedFields),
                    EventPayload      = new CrateStorage(Crate.FromContent("Facebook user event", fbEventCM)),
                    Manufacturer      = "Facebook",
                    ExternalAccountId = fbEventCM.UserId
                };
                ////prepare the event report
                var curEventReport = Crate.FromContent("Facebook user event", eventReportContent);
                eventList.Add(curEventReport);
            }
            return(eventList);
        }
        public async Task Run_ShouldTerminateExecutionWhenChangedFieldIsNotFeed()
        {
            var activity = New <Monitor_Feed_Posts_v1>();
            //Arrage
            var activityContext = await ConfigureMonitorFeedPosts(activity);

            var fbEventCM = new FacebookUserEventCM
            {
                Id            = "123",
                ChangedFields = new string[] { "test" },
                Time          = "123",
                UserId        = "123"
            };
            var eventReportCrate = new EventReportCM
            {
                EventNames   = "feed",
                EventPayload = new CrateStorage(Crate.FromContent("Facebook user event", fbEventCM))
            };
            var containerExecutionContext = new ContainerExecutionContext
            {
                PayloadStorage = new CrateStorage(Crate.FromContent(string.Empty, new OperationalStateCM()), Crate.FromContent("Facebook user event", eventReportCrate))
            };

            //Act
            containerExecutionContext = await RunMonitorFeedPosts(activity, activityContext, containerExecutionContext);

            var operationalStateCM = containerExecutionContext.PayloadStorage.CrateContentsOfType <OperationalStateCM>().Single();

            Assert.True(operationalStateCM.CurrentActivityResponse.Type == ActivityResponse.RequestTerminate.ToString(), "Monitor_Feed_Posts_v1 doesn't terminate container execution when changed field doesn't contain feed");
        }