Exemplo n.º 1
0
        public void UpdateOrderFeeValidationTests()
        {
            _webContainerFixture.ExecuteScope(serviceProvider =>
            {
                var actionStepService             = new TestActionstepService();
                var mediator                      = serviceProvider.GetService <IMediator>();
                var dbContext                     = serviceProvider.GetService <WCADbContext>();
                var telemetryLogger               = serviceProvider.GetService <ITelemetryLogger>();
                var mapper                        = serviceProvider.GetService <IMapper>();
                var infoTrackCredentialRepository = new TestInfoTrackCredentialRepository();
                var loggerFactory                 = serviceProvider.GetService <ILoggerFactory>();
                var appSettings                   = serviceProvider.GetService <IOptions <WCACoreSettings> >();
                var tokenSetRepository            = serviceProvider.GetService <ITokenSetRepository>();

                var handler = new UpdateOrder.Handler(
                    actionStepService,
                    mediator,
                    dbContext,
                    mapper,
                    telemetryLogger,
                    infoTrackCredentialRepository,
                    loggerFactory,
                    appSettings,
                    tokenSetRepository);

                var updateMessage = new InfoTrackOrderUpdateMessage
                {
                    InfoTrackRetailerFee      = 1.0m,
                    InfoTrackRetailerFeeGST   = 1.0m,
                    InfoTrackRetailerFeeTotal = 2.0m,
                    InfoTrackSupplierFee      = 1.5m,
                    InfoTrackSupplierFeeGST   = 1.0m,
                    InfoTrackSupplierFeeTotal = 2.5m,
                    InfoTrackTotalFee         = 2.5m,
                    InfoTrackTotalFeeGST      = 2.0m,
                    InfoTrackTotalFeeTotal    = 4.5m
                };

                var handleMethod = handler.GetType().GetMethod("ValidateFees", BindingFlags.NonPublic | BindingFlags.Instance);

                // Initial data valid
                Assert.True(InvokeFeeValidation(handleMethod, handler, updateMessage));

                updateMessage.InfoTrackRetailerFeeTotal = 2.1m;
                Assert.False(InvokeFeeValidation(handleMethod, handler, updateMessage));

                updateMessage.InfoTrackRetailerFeeTotal = 2.0m;
                updateMessage.InfoTrackSupplierFeeTotal = 2.4m;
                Assert.False(InvokeFeeValidation(handleMethod, handler, updateMessage));

                updateMessage.InfoTrackSupplierFeeTotal = 2.5m;
                updateMessage.InfoTrackTotalFeeTotal    = 4.6m;
                Assert.False(InvokeFeeValidation(handleMethod, handler, updateMessage));

                // Reverted all values, should be valid again
                updateMessage.InfoTrackTotalFeeTotal = 4.5m;
                Assert.True(InvokeFeeValidation(handleMethod, handler, updateMessage));
            });
        }
        public async void CredentialsCanBeStored()
        {
            await _containerFixture.ExecuteScopeAsync(async serviceProvider =>
            {
                var mockEmailSender = new Mock <IEmailSender>();
                var db = serviceProvider.GetService <WCADbContext>();

                // Prepare test data
                var testUser = db.GetTestUser();
                var testOrg  = db.ActionstepOrgs.Add(new ActionstepOrg()
                {
                    Key            = "CredentialsCanBeStored",
                    Title          = "CredentialsCanBeStored",
                    CreatedBy      = testUser,
                    UpdatedBy      = testUser,
                    DateCreatedUtc = DateTime.Parse("2018-10-06", CultureInfo.InvariantCulture),
                    LastUpdatedUtc = DateTime.Parse("2018-10-06", CultureInfo.InvariantCulture),
                }).Entity;
                await db.SaveChangesAsync();

                var startTime = DateTime.UtcNow;

                // Store test data
                var testCredential = db.ActionstepCredentials.Add(new ActionstepCredential()
                {
                    AccessToken          = "CredentialsCanBeStored-AccessToken",
                    AccessTokenExpiryUtc = startTime.AddHours(1),
                    Owner                 = testUser,
                    ActionstepOrg         = testOrg,
                    RefreshToken          = "CredentialsCanBeStored-RefreshToken",
                    RefreshTokenExpiryUtc = startTime.AddMinutes(5),
                    TokenType             = "CredentialsCanBeStored-TokenType",
                    ApiEndpoint           = new Uri("https://api.endpoint/api/"),
                    ExpiresIn             = 3600,
                    ReceivedAtUtc         = startTime,
                    CreatedBy             = testUser,
                    UpdatedBy             = testUser,
                    DateCreatedUtc        = DateTime.Parse("2018-10-06", CultureInfo.InvariantCulture),
                    LastUpdatedUtc        = DateTime.Parse("2018-10-06", CultureInfo.InvariantCulture)
                }).Entity;

                await db.SaveChangesAsync();

                var coreOptions = Options.Create(new WCACoreSettings()
                {
                    ActionstepSettings = new ActionstepSettings()
                    {
                        ApiClientId     = "ApiClientId",
                        ApiClientSecret = "ApiClientSecret"
                    },
                    InfoTrackSettings = new InfoTrackSettings()
                    {
                        NewInfoTrackEmailNotifications = "infotrackemail@test"
                    },
                    WCANotificationEmail = "wcanotifications@test"
                });


                var testInfoTrackCredentialService = new TestInfoTrackCredentialRepository();

                var handler = (IRequestHandler <StoreInfoTrackCredentialsForOrgCommand>) new StoreInfoTrackCredentialsForOrg.Handler(
                    db,
                    new Validator(),
                    coreOptions,
                    testInfoTrackCredentialService,
                    mockEmailSender.Object);

                // Act
                var expectedUsername = "******";
                var expectedPassword = "******";
                await handler.Handle(new StoreInfoTrackCredentialsForOrgCommand()
                {
                    ActionstepOrgKey  = testOrg.Key,
                    AuthenticatedUser = testUser,
                    InfoTrackUsername = expectedUsername,
                    InfoTrackPassword = expectedPassword
                },
                                     new CancellationToken());

                // Assert
                mockEmailSender.Verify(s => s.SendEmailAsync(It.IsAny <EmailSenderRequest>()), Times.Once);
                var result = await testInfoTrackCredentialService.FindCredential(testOrg.Key);
                Assert.Equal(expectedUsername, result.Username);
                Assert.Equal(expectedPassword, result.Password);
            });
        }