Example #1
0
        public async Task Create_Notification_For_Coupa_For_Non_NA_Non_Cyclone_Agency_When_Cost_Total_Amount_Decreased()
        {
            //Arrange
            decimal?previousPaymentAmount = 10.00M;
            decimal?latestPaymentAmount   = 5.00M; //Decreased from 10
            var     timestamp             = DateTime.UtcNow;

            var cost           = new Cost();
            var costOwner      = new CostUser();
            var latestRevision = new CostStageRevision();

            var previousRevisionId = Guid.NewGuid();
            var latestRevisionId   = Guid.NewGuid();

            SetupPurchaseOrderCost(cost, latestRevision, costOwner, previousRevisionId, latestRevisionId, PoNumber);

            var costUsers = new CostNotificationUsers
            {
                CostOwner = costOwner
            };

            var previousPaymentResult = new PaymentAmountResult
            {
                TotalCostAmount = previousPaymentAmount
            };
            var latestPaymentResult = new PaymentAmountResult
            {
                TotalCostAmount = latestPaymentAmount
            };

            PgPaymentServiceMock.Setup(ppsm => ppsm.GetPaymentAmount(previousRevisionId, false)).Returns(Task.FromResult(previousPaymentResult));
            PgPaymentServiceMock.Setup(ppsm => ppsm.GetPaymentAmount(latestRevisionId, false)).Returns(Task.FromResult(latestPaymentResult));

            //Act
            IEnumerable <EmailNotificationMessage <CostNotificationObject> > result = await EmailNotificationBuilder.BuildPendingBrandApprovalNotification(costUsers, cost,
                                                                                                                                                           latestRevision, timestamp);

            //Assert
            result.Should().NotBeNull();
            var notifications = result.ToArray();

            notifications.Should().HaveCount(1);
        }
        public void Init()
        {
            EFContext = EFContextFactory.CreateInMemoryEFContext();
            var configuration = new MapperConfiguration(config =>
                                                        config.AddProfiles(
                                                            typeof(NotificationProfile),
                                                            typeof(PgPurchaseOrderResponse)
                                                            )
                                                        );

            IMapper mapper        = new Mapper(configuration);
            var     mockUriHelper = new Mock <IApplicationUriHelper>();

            _appSettings = new AppSettings();
            var appSettingsMock = new Mock <IOptions <AppSettings> >();

            appSettingsMock.Setup(s => s.Value).Returns(_appSettings);

            mockUriHelper.Setup(u => u.GetLink(It.IsAny <ApplicationUriName>(), It.IsAny <string>(), It.IsAny <string>())).Returns(_costUrl);

            _costStageRevisionServiceMock = new Mock <ICostStageRevisionService>();
            _approvalServiceMock          = new Mock <IApprovalService>();

            _regionsServiceMock = new Mock <IRegionsService>();

            _regionsServiceMock.Setup(r => r.GetAsync(_northAmericanRegionId)).Returns(Task.FromResult(new RegionModel
            {
                Id   = _northAmericanRegionId,
                Name = "North America"
            }));
            _regionsServiceMock.Setup(r => r.GetAsync(_europeRegionId)).Returns(Task.FromResult(new RegionModel
            {
                Id   = _europeRegionId,
                Name = "Europe"
            }));
            _regionsServiceMock.Setup(r => r.GetAsync(_asiaRegionId)).Returns(Task.FromResult(new RegionModel
            {
                Id   = _asiaRegionId,
                Name = "Asia"
            }));
            _regionsServiceMock.Setup(r => r.GetGeoRegion(_northAmericanRegionId)).Returns(Task.FromResult(new RegionModel
            {
                Id   = _northAmericanRegionId,
                Name = "North America"
            }));
            _regionsServiceMock.Setup(r => r.GetGeoRegion(_europeRegionId)).Returns(Task.FromResult(new RegionModel
            {
                Id   = _europeRegionId,
                Name = "Europe"
            }));
            _regionsServiceMock.Setup(r => r.GetGeoRegion(_asiaRegionId)).Returns(Task.FromResult(new RegionModel
            {
                Id   = _asiaRegionId,
                Name = "Asia"
            }));

            _costFormServiceMock         = new Mock <ICostFormService>();
            _customObjectDataServiceMock = new Mock <ICustomObjectDataService>();
            _pgPaymentServiceMock        = new Mock <IPgPaymentService>();
            _costStageServiceMock        = new Mock <ICostStageService>();
            MetadataItems = new List <MetadataItem>();
            MetadataProviderServiceMock = new Mock <IMetadataProviderService>();
            MetadataProviderServiceMock.Setup(m => m.Provide(It.IsAny <Guid>())).Returns(Task.FromResult(MetadataItems));

            const string brandManagerRoleKey = "Brand Manager";
            var          brandManagerRole    = new BusinessRole
            {
                Key   = brandManagerRoleKey,
                Value = BrandManagerRoleValue
            };

            EFContext.BusinessRole.Add(brandManagerRole);
            EFContext.SaveChanges();

            _emailNotificationBuilder = new EmailNotificationBuilder(mapper,
                                                                     mockUriHelper.Object,
                                                                     _costStageRevisionServiceMock.Object,
                                                                     _approvalServiceMock.Object,
                                                                     _regionsServiceMock.Object,
                                                                     appSettingsMock.Object,
                                                                     _costFormServiceMock.Object,
                                                                     _customObjectDataServiceMock.Object,
                                                                     _pgPaymentServiceMock.Object,
                                                                     _costStageServiceMock.Object,
                                                                     MetadataProviderServiceMock.Object,
                                                                     EFContext);
        }