public async Task CreateSaleShouldCreateSale()
        {
            var release = new Release();

            var seller = new VinylExchangeUser();

            var address = new Address();

            this.releasesEntityRetrieverMock.Setup(x => x.GetRelease(It.IsAny <Guid?>())).ReturnsAsync(release);

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(seller);

            this.addressesEntityRetrieverMock.Setup(x => x.GetAddress(It.IsAny <Guid?>())).ReturnsAsync(address);

            var createdSaleModel = await this.salesService.CreateSale <CreateSaleResourceModel>(
                Condition.Fair,
                Condition.Mint,
                "ewewe",
                30,
                address.Id,
                release.Id,
                seller.Id);

            await this.dbContext.SaveChangesAsync();

            var createdSale = await this.dbContext.Sales.FirstOrDefaultAsync(s => s.Id == createdSaleModel.Id);

            Assert.NotNull(createdSale);
        }
        public async Task AddToCollectionShouldAddCollectionItemWithCorrectData()
        {
            var release = new Release();

            var user = new VinylExchangeUser();

            this.releasesEntityRetrieverMock.Setup(x => x.GetRelease(It.IsAny <Guid?>())).ReturnsAsync(release);

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            var createdCollectionItemModel =
                await this.collectionsService.AddToCollection <AddToCollectionResourceModel>(
                    Condition.Poor,
                    Condition.Mint,
                    "Description",
                    release.Id,
                    user.Id);

            var createdCollectionItem =
                await this.dbContext.Collections.FirstOrDefaultAsync(ci => ci.Id == createdCollectionItemModel.Id);

            Assert.Equal(Condition.Poor, createdCollectionItem.VinylGrade);
            Assert.Equal(Condition.Mint, createdCollectionItem.SleeveGrade);
            Assert.Equal("Description", createdCollectionItem.Description);
            Assert.Equal(release.Id, createdCollectionItem.ReleaseId);
            Assert.Equal(user.Id, createdCollectionItem.UserId);
        }
        public async Task GetUserCollectionShouldGetUserCollection()
        {
            var user = new VinylExchangeUser();

            var userTwo = new VinylExchangeUser();

            for (var i = 0; i < 6; i++)
            {
                var collectionItem = new CollectionItem {
                    UserId = user.Id
                };

                await this.dbContext.Collections.AddAsync(collectionItem);
            }

            for (var i = 0; i < 6; i++)
            {
                var collectionItem = new CollectionItem {
                    UserId = userTwo.Id
                };

                await this.dbContext.Collections.AddAsync(collectionItem);
            }

            await this.dbContext.SaveChangesAsync();

            var userCollectionModels =
                await this.collectionsService.GetUserCollection <GetCollectionItemUserIdResourceModel>(user.Id);

            Assert.True(userCollectionModels.Count == 6);
            Assert.True(userCollectionModels.All(ucm => ucm.UserId == user.Id));
        }
        public async Task PlaceOrderShouldSetShipsToAddress()
        {
            var sale = new Sale {
                Status = Status.Open
            };

            await this.dbContext.Sales.AddAsync(sale);

            await this.dbContext.SaveChangesAsync();

            var address = new Address();

            var user = new VinylExchangeUser();

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            this.addressesEntityRetrieverMock.Setup(x => x.GetAddress(It.IsAny <Guid?>())).ReturnsAsync(address);

            await this.salesService.PlaceOrder <SaleStatusResourceModel>(sale.Id, address.Id, user.Id);

            var changedSale = await this.dbContext.Sales.FirstOrDefaultAsync(s => s.Id == sale.Id);

            Assert.True(
                changedSale.ShipsTo
                == $"{address.Country} - {address.Town} - {address.PostalCode} - {address.FullAddress}");
        }
        public async Task PlaceOrderShouldThrowNullReferenceExceptionIfUserIsNull()
        {
            var sale = new Sale {
                Status = Status.Open
            };

            await this.dbContext.Sales.AddAsync(sale);

            await this.dbContext.SaveChangesAsync();

            var address = new Address();

            var user = new VinylExchangeUser();

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>()))
            .ReturnsAsync((VinylExchangeUser)null);

            this.addressesEntityRetrieverMock.Setup(x => x.GetAddress(It.IsAny <Guid?>())).ReturnsAsync(address);

            var exception = await Assert.ThrowsAsync <NullReferenceException>(
                async() => await this.salesService.PlaceOrder <SaleStatusResourceModel>(
                    sale.Id,
                    address.Id,
                    Guid.NewGuid()));

            Assert.Equal(UserNotFound, exception.Message);
        }
        public async Task GetUserSalesShouldGetUserSales()
        {
            var user = new VinylExchangeUser();

            for (var i = 0; i < 5; i++)
            {
                var sale = new Sale {
                    SellerId = user.Id
                };

                await this.dbContext.Sales.AddAsync(sale);
            }

            for (var i = 0; i < 5; i++)
            {
                var sale = new Sale {
                    SellerId = Guid.NewGuid()
                };

                await this.dbContext.Sales.AddAsync(sale);
            }

            await this.dbContext.SaveChangesAsync();

            var saleModels = await this.salesService.GetUserSales <GetSaleResourceModel>(user.Id);

            Assert.True(saleModels.All(sm => sm.SellerId == user.Id));
        }
Example #7
0
        private async Task <string> ConstructChangePasswordEmailContent(VinylExchangeUser user)
        {
            var changePasswordConfirmationToken = await this.userManager.GeneratePasswordResetTokenAsync(user);

            var changePasswordHtmlContent =
                $@"<h1>Change Your Vinyl Exchange Password</h1><h3>Your password change/reset token is: {changePasswordConfirmationToken}<h3>";

            return(changePasswordHtmlContent);
        }
        public async Task GetUserShouldGetUser()
        {
            var user = new VinylExchangeUser();

            this.userManagerMock.Setup(x => x.FindByIdAsync(It.IsAny <string>())).ReturnsAsync(user);

            var returnedUser = await this.usersService.GetUser(user.Id);

            Assert.NotNull(returnedUser);
        }
        public async Task CancelOrderShouldThrowNullReferenceExceptionIfSSaleIsNull()
        {
            var user = new VinylExchangeUser();

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            var exception = await Assert.ThrowsAsync <NullReferenceException>(
                async() => await this.salesService.CancelOrder <SaleStatusResourceModel>(
                    Guid.NewGuid(),
                    user.Id));

            Assert.Equal(SaleNotFound, exception.Message);
        }
        public async Task ConfirmEmailShouldReturnIdentityResultSuccess()
        {
            var user = new VinylExchangeUser();

            this.userManagerMock.Setup(x => x.FindByIdAsync(It.IsAny <string>())).ReturnsAsync(user);

            this.userManagerMock.Setup(x => x.ConfirmEmailAsync(It.IsAny <VinylExchangeUser>(), It.IsAny <string>()))
            .ReturnsAsync(IdentityResult.Success);

            var result = await this.usersService.ConfirmEmail("ewew", Guid.NewGuid());

            Assert.True(result.Succeeded);
        }
        public async Task EditSaleShouldEditSaleWithCorrectData()
        {
            var release = new Release();

            var user = new VinylExchangeUser();

            var updatedAddress = this.testAddress;

            this.releasesEntityRetrieverMock.Setup(x => x.GetRelease(It.IsAny <Guid?>())).ReturnsAsync(release);

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            this.addressesEntityRetrieverMock.Setup(x => x.GetAddress(It.IsAny <Guid?>())).ReturnsAsync(updatedAddress);

            var addressProperties = new List <string> {
                updatedAddress.Country, updatedAddress.Town
            };

            var sale = new Sale
            {
                VinylGrade  = Condition.Poor,
                SleeveGrade = Condition.NearMint,
                Description = "blbbebe",
                Price       = 50,
                ShipsFrom   = "Paris France"
            };

            await this.dbContext.Sales.AddAsync(sale);

            await this.dbContext.SaveChangesAsync();

            var editSaleInputModel = new EditSaleInputModel
            {
                VinylGrade  = Condition.Mint,
                SleeveGrade = Condition.Mint,
                Description = "updated description",
                Price       = 100,
                SaleId      = sale.Id
            };

            await this.salesService.EditSale <EditSaleResourceModel>(editSaleInputModel);

            var updatedSale = await this.dbContext.Sales.FirstOrDefaultAsync(s => s.Id == sale.Id);

            Assert.Equal(editSaleInputModel.SaleId, updatedSale.Id);
            Assert.Equal(editSaleInputModel.VinylGrade, updatedSale.VinylGrade);
            Assert.Equal(editSaleInputModel.SleeveGrade, updatedSale.SleeveGrade);
            Assert.Equal(editSaleInputModel.Description, updatedSale.Description);
            Assert.Equal(editSaleInputModel.Price, updatedSale.Price);
            Assert.True(addressProperties.Select(ap => updatedSale.ShipsFrom.Contains(ap)).All(x => x));
        }
        public async Task SendConfirmEmailShouldNotThrowAnyException()
        {
            var user = new VinylExchangeUser();

            this.userManagerMock.Setup(x => x.FindByIdAsync(It.IsAny <string>())).ReturnsAsync(user);

            this.emailSenderMock
            .Setup(x => x.SendEmailAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .Verifiable();

            var exception = await Record.ExceptionAsync(async() => await this.usersService.SendConfirmEmail(user.Id));

            Assert.Null(exception);
        }
        public async Task RegisterUserShouldReturnIdentityResultSuccess()
        {
            var user = new VinylExchangeUser();

            this.userManagerMock.Setup(x => x.CreateAsync(It.IsAny <VinylExchangeUser>()))
            .ReturnsAsync(IdentityResult.Success);

            this.userManagerMock.Setup(x => x.AddToRoleAsync(It.IsAny <VinylExchangeUser>(), It.IsAny <string>()))
            .Verifiable();

            var result = await this.usersService.RegisterUser("ewew", "3232", "eweqw");

            Assert.True(result.Succeeded);
        }
Example #14
0
        private async Task <string> ConstructChangeEmailEmailContent(VinylExchangeUser user, string newEmail)
        {
            var changeEmailConfirmationToken = await this.userManager.GenerateChangeEmailTokenAsync(user, newEmail);

            var request = this.contextAccessor.HttpContext.Request;

            var emailChangeUrl = request.Scheme + "://" + request.Host
                                 + $"/Authentication/ChangeEmail?cofirmToken={changeEmailConfirmationToken}";

            var changeEmailHtmlContent =
                $@"<h1>Change Your Vinyl Exchange Email</h1>.Follow This <a href=""{emailChangeUrl}"">Link</a>";

            return(changeEmailHtmlContent);
        }
Example #15
0
        public async Task <IdentityResult> RegisterUser(string username, string email, string password)
        {
            var user = new VinylExchangeUser {
                UserName = username, Email = email
            };

            user.PasswordHash = this.userManager.PasswordHasher.HashPassword(user, password);

            var identityResult = await this.userManager.CreateAsync(user);

            await this.userManager.AddToRoleAsync(user, Roles.User);

            return(identityResult);
        }
        public async Task LoginUserShouldReturnSignInResultSuccess()
        {
            var user = new VinylExchangeUser();

            this.signInManagerMock.Setup(x => x.GetExternalAuthenticationSchemesAsync())
            .ReturnsAsync(new List <AuthenticationScheme>());

            this.signInManagerMock
            .Setup(x => x.PasswordSignInAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>(),
                                              It.IsAny <bool>())).ReturnsAsync(SignInResult.Success);

            var result = await this.usersService.LoginUser("ewew", "3232", false);

            Assert.True(result.Succeeded);
        }
Example #17
0
        public async Task GetUserAvatarShouldGetUserAvatar()
        {
            var user = new VinylExchangeUser
            {
                Avatar = new byte[] { 188, 65, 69, 67, 44, 187, 37, 66, 2, 17, 210, 249, 100 }
            };

            await this.dbContext.Users.AddAsync(user);

            await this.dbContext.SaveChangesAsync();

            var userAvatar = (await this.dbContext.Users.FirstOrDefaultAsync(u => u.Id == user.Id)).Avatar;

            Assert.Equal(string.Join(",", user.Avatar), string.Join(",", userAvatar));
        }
        DoesUserCollectionContainReleaseShouldReturnTrueIfUserHasCollectionItemInCollectionWithTheProvidedReleaseId()
        {
            var release = new Release();

            var user = new VinylExchangeUser();

            var collectionItem = new CollectionItem {
                ReleaseId = release.Id, UserId = user.Id
            };

            await this.dbContext.Collections.AddAsync(collectionItem);

            await this.dbContext.SaveChangesAsync();

            Assert.True(await this.collectionsService.DoesUserCollectionContainRelease(release.Id, user.Id));
        }
        public async Task CancelShouldThrowInvalidSaleStatusExceptionIfStatusIsAfterPaymentPendingOrOpen(Status status)
        {
            var sale = new Sale {
                Status = status
            };

            await this.dbContext.Sales.AddAsync(sale);

            await this.dbContext.SaveChangesAsync();

            var user = new VinylExchangeUser();

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            await Assert.ThrowsAsync <InvalidSaleActionException>(
                async() => await this.salesService.CancelOrder <SaleStatusResourceModel>(sale.Id, user.Id));
        }
        public async Task AddMessageToSaleShouldThrowNullReferenceExceptionIfSaleIsNotInDb()
        {
            var user = new VinylExchangeUser();

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            this.salesEntityRetrieverMock.Setup(x => x.GetSale(It.IsAny <Guid?>())).ReturnsAsync((Sale)null);

            var exception = await Assert.ThrowsAsync <NullReferenceException>(
                async() => await this.saleMessagesService
                .AddMessageToSale <AddMessageToSaleResourceModel>(
                    Guid.NewGuid(),
                    user.Id,
                    "Test Message"));

            Assert.Equal(SaleNotFound, exception.Message);
        }
        public async Task AddToCollectionShouldThrowNullRefferenceExceptionIfProvidedReleaseIdIsNotInDb()
        {
            var user = new VinylExchangeUser();

            this.releasesEntityRetrieverMock.Setup(x => x.GetRelease(It.IsAny <Guid?>())).ReturnsAsync((Release)null);

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            var exception = await Assert.ThrowsAsync <NullReferenceException>(
                async() => await this.collectionsService.AddToCollection <AddToCollectionResourceModel>(
                    Condition.Poor,
                    Condition.Mint,
                    "Description",
                    Guid.NewGuid(),
                    user.Id));

            Assert.Equal(ReleaseNotFound, exception.Message);
        }
        public async Task GetUserSalesShouldReturnEmptyListIfUserHasNoSales()
        {
            var user = new VinylExchangeUser();

            for (var i = 0; i < 10; i++)
            {
                var sale = new Sale {
                    SellerId = Guid.NewGuid()
                };

                await this.dbContext.Sales.AddAsync(sale);
            }

            await this.dbContext.SaveChangesAsync();

            var salesModels = await this.salesService.GetUserPurchases <GetSaleResourceModel>(user.Id);

            Assert.True(salesModels.Count == 0);
        }
        public async Task AddMessageToSaleShouldAddMessageToSale()
        {
            var sale = new Sale();

            var user = new VinylExchangeUser();

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            this.salesEntityRetrieverMock.Setup(x => x.GetSale(It.IsAny <Guid?>())).ReturnsAsync(sale);

            await this.saleMessagesService.AddMessageToSale <AddMessageToSaleResourceModel>(
                sale.Id,
                user.Id,
                "Test Message");

            var message = await this.dbContext.SaleMessages.FirstOrDefaultAsync(sl => sl.SaleId == sale.Id);

            Assert.NotNull(message);
        }
        public async Task GetUserCollectionShouldReturnEmptyListIfUserHasEmptyCollection()
        {
            var user = new VinylExchangeUser();

            for (var i = 0; i < 6; i++)
            {
                var collectionItem = new CollectionItem {
                    UserId = user.Id
                };

                await this.dbContext.Collections.AddAsync(collectionItem);
            }

            await this.dbContext.SaveChangesAsync();

            var userCollectionModels =
                await this.collectionsService.GetUserCollection <GetCollectionItemUserIdResourceModel>(Guid.NewGuid());

            Assert.True(userCollectionModels.Count == 0);
        }
        public async Task CancelOrderShouldSetSaleStatusToOpen()
        {
            var user = new VinylExchangeUser();

            var sale = new Sale {
                Status = Status.PaymentPending, BuyerId = user.Id
            };

            await this.dbContext.Sales.AddAsync(sale);

            await this.dbContext.SaveChangesAsync();

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            await this.salesService.CancelOrder <SaleStatusResourceModel>(sale.Id, Guid.NewGuid());

            var saleFromDb = await this.dbContext.Sales.FirstOrDefaultAsync(s => s.Id == sale.Id);

            Assert.Equal(Status.Open, saleFromDb.Status);
        }
        public async Task PlaceOrderShouldThrowInvalidSaleStatusExceptionIfStatusIsNotOpen(Status status)
        {
            var sale = new Sale {
                Status = status
            };

            await this.dbContext.Sales.AddAsync(sale);

            await this.dbContext.SaveChangesAsync();

            var address = new Address();

            var user = new VinylExchangeUser();

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            this.addressesEntityRetrieverMock.Setup(x => x.GetAddress(It.IsAny <Guid?>())).ReturnsAsync(address);

            await Assert.ThrowsAsync <InvalidSaleActionException>(
                async() => await this.salesService.PlaceOrder <SaleStatusResourceModel>(sale.Id, address.Id, user.Id));
        }
Example #27
0
        private static async Task <VinylExchangeUser> CreateUserAsync(
            UserManager <VinylExchangeUser> userManager,
            string username,
            string password,
            string email)
        {
            var user = new VinylExchangeUser {
                UserName = username, Email = email
            };

            user.PasswordHash = userManager.PasswordHasher.HashPassword(user, password);

            var createUserResult = await userManager.CreateAsync(user);

            if (!createUserResult.Succeeded)
            {
                throw new Exception(
                          string.Join(Environment.NewLine, createUserResult.Errors.Select(e => e.Description)));
            }

            return(user);
        }
        public async Task AddToCollectionShouldAddToCollection()
        {
            var release = new Release();

            var user = new VinylExchangeUser();

            this.releasesEntityRetrieverMock.Setup(x => x.GetRelease(It.IsAny <Guid?>())).ReturnsAsync(release);

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            var createdCollectionItemModel =
                await this.collectionsService.AddToCollection <AddToCollectionResourceModel>(
                    Condition.Poor,
                    Condition.Mint,
                    "Description",
                    release.Id,
                    Guid.NewGuid());

            var createdCollectionItem =
                await this.dbContext.Collections.FirstOrDefaultAsync(ci => ci.Id == createdCollectionItemModel.Id);

            Assert.NotNull(createdCollectionItem);
        }
        public async Task CreateSaleShouldCreateSaleWithCorrectData()
        {
            var release = new Release();

            var seller = new VinylExchangeUser();

            var address = this.testAddress;

            this.releasesEntityRetrieverMock.Setup(x => x.GetRelease(It.IsAny <Guid?>())).ReturnsAsync(release);

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(seller);

            this.addressesEntityRetrieverMock.Setup(x => x.GetAddress(It.IsAny <Guid?>())).ReturnsAsync(address);

            var addressProperties = new List <string> {
                address.Country, address.Town
            };

            var createdSaleModel = await this.salesService.CreateSale <CreateSaleResourceModel>(
                VinylGrade,
                SleeveGrade,
                Description,
                Price,
                address.Id,
                release.Id,
                seller.Id);

            await this.dbContext.SaveChangesAsync();

            var createdSale = await this.dbContext.Sales.FirstOrDefaultAsync(s => s.Id == createdSaleModel.Id);

            Assert.Equal(VinylGrade, createdSale.VinylGrade);
            Assert.Equal(SleeveGrade, createdSale.SleeveGrade);
            Assert.Equal(release.Id, createdSale.ReleaseId);
            Assert.Equal(Price, createdSale.Price);
            Assert.True(addressProperties.Select(ap => createdSale.ShipsFrom.Contains(ap)).All(x => x));
        }
        public async Task PlaceOrderShouldChangeSaleStatusToShippingNegotiation()
        {
            var sale = new Sale {
                Status = Status.Open
            };

            await this.dbContext.Sales.AddAsync(sale);

            await this.dbContext.SaveChangesAsync();

            var address = new Address();

            var user = new VinylExchangeUser();

            this.usersEntityRetrieverMock.Setup(x => x.GetUser(It.IsAny <Guid?>())).ReturnsAsync(user);

            this.addressesEntityRetrieverMock.Setup(x => x.GetAddress(It.IsAny <Guid?>())).ReturnsAsync(address);

            await this.salesService.PlaceOrder <SaleStatusResourceModel>(sale.Id, address.Id, user.Id);

            var changedSale = await this.dbContext.Sales.FirstOrDefaultAsync(s => s.Id == sale.Id);

            Assert.True(Status.ShippingNegotiation == changedSale.Status);
        }