Ejemplo n.º 1
0
        public async Task WhenAccountSettingsHasAProfileImageFileId_ItShouldReturnTheBlobInformation()
        {
            const string ContainerName = "containerName";

            this.getAccountSettings.Setup(v => v.ExecuteAsync(UserId, FreePostTimestamp, PostConstants.MaximumFreePostsPerInterval))
            .ReturnsAsync(new GetAccountSettingsDbResult(Username, Email, FileId, AccountBalance, PaymentStatus, HasPaymentInformation, null, FreePostsRemaining));

            this.fileInformationAggregator.Setup(v => v.GetFileInformationAsync(null, FileId, FilePurposes.ProfileImage))
            .ReturnsAsync(new FileInformation(FileId, ContainerName));

            var result = await this.target.HandleAsync(new GetAccountSettingsQuery(Requester, UserId, Now));

            var expectedResult = new GetAccountSettingsResult(
                Username,
                Email,
                new FileInformation(FileId, ContainerName),
                AccountBalance,
                PaymentStatus,
                HasPaymentInformation,
                Payments.Constants.DefaultCreatorPercentage,
                null,
                FreePostsRemaining);

            Assert.AreEqual(expectedResult, result);
        }
Ejemplo n.º 2
0
        public async Task WhenCreatorPercentageIsSetWithExpiredExpiry_ItShouldReturnTheCreatorPercentageWithNumberOfWeeks1()
        {
            var paymentProcessingStartDateInclusive = PaymentProcessingUtilities.GetPaymentProcessingStartDate(Now);
            var creatorPercentageOverride           = new CreatorPercentageOverrideData(0.9m, paymentProcessingStartDateInclusive.AddDays(7).AddTicks(-1));

            this.getAccountSettings.Setup(v => v.ExecuteAsync(UserId, FreePostTimestamp, PostConstants.MaximumFreePostsPerInterval))
            .ReturnsAsync(new GetAccountSettingsDbResult(
                              Username, Email, null, AccountBalance, PaymentStatus, HasPaymentInformation, creatorPercentageOverride, FreePostsRemaining))
            .Verifiable();

            var result = await this.target.HandleAsync(new GetAccountSettingsQuery(Requester, UserId, Now));

            this.getAccountSettings.Verify();

            var expectedResult = new GetAccountSettingsResult(
                Username,
                Email,
                null,
                AccountBalance,
                PaymentStatus,
                HasPaymentInformation,
                Payments.Constants.DefaultCreatorPercentage,
                null,
                FreePostsRemaining);

            Assert.AreEqual(expectedResult, result);
        }
        public async Task WhenCalledAsACreatorWithNoBlog_ItShouldReturnUserStateWithoutABlog()
        {
            this.requesterSecurity.SetupFor(Requester);

            this.requesterSecurity.Setup(v => v.IsInRoleAsync(Requester, FifthweekRole.Creator)).ReturnsAsync(true);

            var creatorStatus   = new CreatorStatus(null, true);
            var accountSettings = new GetAccountSettingsResult(new Username("username"), new Email("*****@*****.**"), null, 10, PaymentStatus.Retry1, true, 1m, null, 1);

            this.getUserAccessSignatures.Setup(v => v.HandleAsync(new GetUserAccessSignaturesQuery(Requester, UserId, null, new List <ChannelId> {
                UserSubscriptions.Blogs[0].Channels[0].ChannelId, UserSubscriptions.Blogs[1].Channels[0].ChannelId
            }, UserSubscriptions.FreeAccessChannelIds)))
            .ReturnsAsync(UserAccessSignatures);
            this.getBlogSubscriptions.Setup(v => v.HandleAsync(new GetUserSubscriptionsQuery(Requester, UserId)))
            .ReturnsAsync(UserSubscriptions);
            this.getAccountSettings.Setup(v => v.HandleAsync(new GetAccountSettingsQuery(Requester, UserId, Now)))
            .ReturnsAsync(accountSettings);
            this.getBlogChannelsAndCollections.Setup(v => v.HandleAsync(new GetBlogChannelsAndQueuesQuery(UserId)))
            .ReturnsAsync(null);

            var result = await this.target.HandleAsync(new GetUserStateQuery(Requester, UserId, false, Now));

            Assert.IsNotNull(result);
            Assert.AreEqual(UserAccessSignatures, result.AccessSignatures);
            Assert.AreEqual(UserSubscriptions, result.Subscriptions);
            Assert.AreEqual(accountSettings, result.AccountSettings);
            Assert.IsNull(result.Blog);
        }
Ejemplo n.º 4
0
        public async Task WhenCreatorPercentageIsSetWithNoExpiry_ItShouldReturnTheCreatorPercentage()
        {
            var creatorPercentageOverride = new CreatorPercentageOverrideData(0.9m, null);

            this.getAccountSettings.Setup(v => v.ExecuteAsync(UserId, FreePostTimestamp, PostConstants.MaximumFreePostsPerInterval))
            .ReturnsAsync(new GetAccountSettingsDbResult(
                              Username, Email, null, AccountBalance, PaymentStatus, HasPaymentInformation, creatorPercentageOverride, FreePostsRemaining))
            .Verifiable();

            var result = await this.target.HandleAsync(new GetAccountSettingsQuery(Requester, UserId, Now));

            this.getAccountSettings.Verify();

            var expectedResult = new GetAccountSettingsResult(
                Username,
                Email,
                null,
                AccountBalance,
                PaymentStatus,
                HasPaymentInformation,
                creatorPercentageOverride.Percentage,
                null,
                FreePostsRemaining);

            Assert.AreEqual(expectedResult, result);
        }
        public async Task WhenCalledAsAUser_AndImpersonationRequestedButNotRequired_ItShouldReturnRegisteredUserStateWithoutCreatorState()
        {
            this.requesterSecurity.SetupFor(Requester);

            var accountSettings = new GetAccountSettingsResult(new Username("username"), new Email("*****@*****.**"), null, 10, PaymentStatus.Retry1, true, 1m, null, 1);

            this.getUserAccessSignatures.Setup(v => v.HandleAsync(new GetUserAccessSignaturesQuery(Requester, UserId, null, new List <ChannelId> {
                UserSubscriptions.Blogs[0].Channels[0].ChannelId, UserSubscriptions.Blogs[1].Channels[0].ChannelId
            }, UserSubscriptions.FreeAccessChannelIds)))
            .ReturnsAsync(UserAccessSignatures);
            this.getAccountSettings.Setup(v => v.HandleAsync(new GetAccountSettingsQuery(Requester, UserId, Now)))
            .ReturnsAsync(accountSettings);
            this.getBlogSubscriptions.Setup(v => v.HandleAsync(new GetUserSubscriptionsQuery(Requester, UserId)))
            .ReturnsAsync(UserSubscriptions);

            this.impersonateIfRequired.Setup(v => v.ExecuteAsync(Requester, UserId))
            .ReturnsAsync(null);

            var result = await this.target.HandleAsync(
                new GetUserStateQuery(Requester, UserId, true, Now));

            Assert.IsNotNull(result);
            Assert.AreEqual(UserAccessSignatures, result.AccessSignatures);
            Assert.AreEqual(UserSubscriptions, result.Subscriptions);
            Assert.AreEqual(accountSettings, result.AccountSettings);

            Assert.IsNull(result.Blog);
        }
        public async Task WhenCalledAsAUser_WithNonAcceptedPrice_ItShouldNotRequestAccessSignaturesForNonAcceptedSubscription()
        {
            this.requesterSecurity.SetupFor(Requester);

            var accountSettings = new GetAccountSettingsResult(new Username("username"), new Email("*****@*****.**"), null, 10, PaymentStatus.Retry1, true, 1m, null, 1);

            GetUserAccessSignaturesQuery actual = null;
            var expected = new GetUserAccessSignaturesQuery(Requester, UserId, null, new List <ChannelId> {
                UserSubscriptionsWithNonAcceptedPrice.Blogs[1].Channels[0].ChannelId
            }, UserSubscriptionsWithNonAcceptedPrice.FreeAccessChannelIds);

            this.getUserAccessSignatures.Setup(v => v.HandleAsync(It.IsAny <GetUserAccessSignaturesQuery>()))
            .Callback <GetUserAccessSignaturesQuery>(v => actual = v)
            .ReturnsAsync(UserAccessSignatures);
            this.getAccountSettings.Setup(v => v.HandleAsync(new GetAccountSettingsQuery(Requester, UserId, Now)))
            .ReturnsAsync(accountSettings);
            this.getBlogSubscriptions.Setup(v => v.HandleAsync(new GetUserSubscriptionsQuery(Requester, UserId)))
            .ReturnsAsync(UserSubscriptionsWithNonAcceptedPrice);

            var result = await this.target.HandleAsync(new GetUserStateQuery(Requester, UserId, false, Now));

            Assert.IsNotNull(result);
            Assert.AreEqual(expected, actual);
            Assert.AreEqual(UserAccessSignatures, result.AccessSignatures);
            Assert.AreEqual(UserSubscriptionsWithNonAcceptedPrice, result.Subscriptions);
            Assert.AreEqual(accountSettings, result.AccountSettings);

            Assert.IsNull(result.Blog);
        }
Ejemplo n.º 7
0
        public async Task WhenCalled_ItShouldCallTheAccountRepository()
        {
            this.getAccountSettings.Setup(v => v.ExecuteAsync(UserId, FreePostTimestamp, PostConstants.MaximumFreePostsPerInterval))
            .ReturnsAsync(new GetAccountSettingsDbResult(Username, Email, null, AccountBalance, PaymentStatus, HasPaymentInformation, null, FreePostsRemaining))
            .Verifiable();

            var result = await this.target.HandleAsync(new GetAccountSettingsQuery(Requester, UserId, Now));

            this.getAccountSettings.Verify();

            var expectedResult = new GetAccountSettingsResult(Username, Email, null, AccountBalance, PaymentStatus, HasPaymentInformation, Payments.Constants.DefaultCreatorPercentage, null, FreePostsRemaining);

            Assert.AreEqual(expectedResult, result);
        }
        public async Task WhenGetIsCalled_ItShouldCallTheQueryHandler()
        {
            var query = new GetAccountSettingsQuery(Requester, RequestedUserId, Now);

            var expectedResult = new GetAccountSettingsResult(Username, Email, FileInformation, AccountBalance, PaymentStatus, HasPaymentInformation, 1m, null, FreePostsRemaining);

            this.getAccountSettings.Setup(v => v.HandleAsync(query))
            .ReturnsAsync(expectedResult)
            .Verifiable();

            var result = await this.target.Get(RequestedUserId.Value.EncodeGuid());

            this.getAccountSettings.Verify();

            Assert.AreEqual(expectedResult, result);
        }
        public async Task WhenCalledAsAUser_WithNoAccountBalanceAndNotRetryingPayment_ItNotRequestAccessSignaturesForSubscribedPosts()
        {
            this.requesterSecurity.SetupFor(Requester);

            var accountSettings = new GetAccountSettingsResult(new Username("username"), new Email("*****@*****.**"), null, 0, PaymentStatus.None, true, 1m, null, 1);

            this.getUserAccessSignatures.Setup(v => v.HandleAsync(new GetUserAccessSignaturesQuery(Requester, UserId, null, null, UserSubscriptions.FreeAccessChannelIds)))
            .ReturnsAsync(UserAccessSignatures);
            this.getAccountSettings.Setup(v => v.HandleAsync(new GetAccountSettingsQuery(Requester, UserId, Now)))
            .ReturnsAsync(accountSettings);
            this.getBlogSubscriptions.Setup(v => v.HandleAsync(new GetUserSubscriptionsQuery(Requester, UserId)))
            .ReturnsAsync(UserSubscriptions);

            var result = await this.target.HandleAsync(new GetUserStateQuery(Requester, UserId, false, Now));

            Assert.IsNotNull(result);
            Assert.AreEqual(UserAccessSignatures, result.AccessSignatures);
            Assert.AreEqual(UserSubscriptions, result.Subscriptions);
            Assert.AreEqual(accountSettings, result.AccountSettings);

            Assert.IsNull(result.Blog);
        }
        public async Task WhenCalledAsACreator_ItShouldReturnUserStateWithCreatorState()
        {
            this.requesterSecurity.SetupFor(Requester);

            this.requesterSecurity.Setup(v => v.IsInRoleAsync(Requester, FifthweekRole.Creator)).ReturnsAsync(true);

            var creatorStatus              = new CreatorStatus(new BlogId(Guid.NewGuid()), true);
            var accountSettings            = new GetAccountSettingsResult(new Username("username"), new Email("*****@*****.**"), null, 10, PaymentStatus.Retry1, true, 1m, null, 1);
            var blogChannelsAndCollections = new GetBlogChannelsAndQueuesResult(
                new BlogWithFileInformation(new BlogId(Guid.NewGuid()), new BlogName("My Subscription"), new Introduction("Once upon a time there was an intro."), DateTime.UtcNow, null, null, null,
                                            new List <ChannelResult> {
                new ChannelResult(new ChannelId(Guid.NewGuid()), "name", 10, true)
            },
                                            new List <QueueResult> {
                new QueueResult(new QueueId(Guid.NewGuid()), "name", new List <HourOfWeek>())
            }));

            this.getUserAccessSignatures.Setup(v => v.HandleAsync(new GetUserAccessSignaturesQuery(Requester, UserId, new List <ChannelId> {
                blogChannelsAndCollections.Blog.Channels[0].ChannelId
            }, new List <ChannelId> {
                UserSubscriptions.Blogs[0].Channels[0].ChannelId, UserSubscriptions.Blogs[1].Channels[0].ChannelId
            }, UserSubscriptions.FreeAccessChannelIds)))
            .ReturnsAsync(UserAccessSignatures);
            this.getBlogSubscriptions.Setup(v => v.HandleAsync(new GetUserSubscriptionsQuery(Requester, UserId)))
            .ReturnsAsync(UserSubscriptions);
            this.getAccountSettings.Setup(v => v.HandleAsync(new GetAccountSettingsQuery(Requester, UserId, Now)))
            .ReturnsAsync(accountSettings);
            this.getBlogChannelsAndCollections.Setup(v => v.HandleAsync(new GetBlogChannelsAndQueuesQuery(UserId)))
            .ReturnsAsync(blogChannelsAndCollections);

            var result = await this.target.HandleAsync(new GetUserStateQuery(Requester, UserId, false, Now));

            Assert.IsNotNull(result);
            Assert.AreEqual(UserAccessSignatures, result.AccessSignatures);
            Assert.AreEqual(UserSubscriptions, result.Subscriptions);
            Assert.AreEqual(accountSettings, result.AccountSettings);
            Assert.AreEqual(blogChannelsAndCollections.Blog, result.Blog);
        }
Ejemplo n.º 11
0
        public async Task <UserState> HandleAsync(GetUserStateQuery query)
        {
            query.AssertNotNull("query");

            GetUserSubscriptionsResult userSubscriptions = null;
            GetAccountSettingsResult   accountSettings   = null;
            BlogWithFileInformation    blog = null;

            if (query.RequestedUserId != null)
            {
                if (query.Impersonate)
                {
                    var impersonatingRequester = await this.impersonateIfRequired.ExecuteAsync(query.Requester, query.RequestedUserId);

                    if (impersonatingRequester != null)
                    {
                        query = new GetUserStateQuery(impersonatingRequester, query.RequestedUserId, false, query.Now);
                    }
                }

                await this.requesterSecurity.AuthenticateAsAsync(query.Requester, query.RequestedUserId);

                var isCreator = await this.requesterSecurity.IsInRoleAsync(query.Requester, FifthweekRole.Creator);

                var blogSubscriptionsTask = this.getBlogSubscriptions.HandleAsync(new GetUserSubscriptionsQuery(query.Requester, query.RequestedUserId));
                var accountSettingsTask   = this.getAccountSettings.HandleAsync(new GetAccountSettingsQuery(
                                                                                    query.Requester, query.RequestedUserId, query.Now));

                if (isCreator)
                {
                    var blogChannelsAndCollections = await this.getBlogChannelsAndQueues.HandleAsync(new GetBlogChannelsAndQueuesQuery(query.RequestedUserId));

                    if (blogChannelsAndCollections != null)
                    {
                        blog = blogChannelsAndCollections.Blog;
                    }
                }

                accountSettings   = await accountSettingsTask;
                userSubscriptions = await blogSubscriptionsTask;
            }

            List <ChannelId> creatorChannelIds = null;

            if (blog != null)
            {
                creatorChannelIds = blog.Channels.Select(v => v.ChannelId).Distinct().ToList();
            }

            List <ChannelId> subscribedChannelIds = null;
            List <ChannelId> freeAccessChannelIds = null;

            if (userSubscriptions != null)
            {
                bool hasFunds = accountSettings != null && (accountSettings.AccountBalance > 0 || accountSettings.IsRetryingPayment);
                if (hasFunds)
                {
                    subscribedChannelIds =
                        userSubscriptions.Blogs.SelectMany(v => v.Channels)
                        .Where(v => v.AcceptedPrice >= v.Price)
                        .Select(v => v.ChannelId)
                        .Distinct()
                        .ToList();
                }

                freeAccessChannelIds = userSubscriptions.FreeAccessChannelIds.Distinct().ToList();
            }

            var userAccessSignatures = await this.getUserAccessSignatures.HandleAsync(
                new GetUserAccessSignaturesQuery(query.Requester, query.RequestedUserId, creatorChannelIds, subscribedChannelIds, freeAccessChannelIds));

            return(new UserState(
                       userAccessSignatures,
                       accountSettings,
                       blog,
                       userSubscriptions));
        }