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); }
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); }
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); }
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); }
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)); }