public async Task GetUserExcludedSellerPreferences_Should_Return_List_Of_Sellers_User_Has_Excluded() { // Arrange await _dbContext.Database.EnsureDeletedAsync(); var listOfSellers = new List <tblSellers>(); listOfSellers.Add(new tblSellersBuilder().WithId(1).WithName("Amazon").WithUrl("https://www.amazon.co.uk").Build()); listOfSellers.Add(new tblSellersBuilder().WithId(2).WithName("Ebay").WithUrl("https://www.ebay.co.uk").Build()); listOfSellers.Add(new tblSellersBuilder().WithId(3).WithName("Currys PC World").WithUrl("https://www.currys.co.uk").Build()); _dbContext.tblSellers.AddRange(listOfSellers); var listOfExclSellers = new List <tblExcludedSellers>(); listOfExclSellers.Add(new tblExcludedSellersBuilder().WithUsername(_username).WithSellerId(2).Build()); listOfExclSellers.Add(new tblExcludedSellersBuilder().WithUsername(_username).WithSellerId(3).Build()); _dbContext.tblExcludedSellers.AddRange(listOfExclSellers); await _dbContext.SaveChangesAsync(); // Act var task = _userSettingsService.GetUserExcludedSellerPreferences(_username); var result = task.Result; Assert.IsAssignableFrom <IEnumerable <UserSeller> >(result); Assert.Equal(2, result.Count()); }
public async Task UpdateUserSellerPreferences_Updates_User_Settings_Two() { // Arrange await _dbContext.Database.EnsureDeletedAsync(); using (var seedingContext = new StockNotificationContext(_options)) { var listOfSellers = new List <tblSellers>(); listOfSellers.Add(new tblSellersBuilder().WithId(1).WithName("Amazon").WithUrl("https://www.amazon.co.uk").Build()); listOfSellers.Add(new tblSellersBuilder().WithId(2).WithName("Ebay").WithUrl("https://www.ebay.co.uk").Build()); listOfSellers.Add(new tblSellersBuilder().WithId(3).WithName("Currys PC World").WithUrl("https://www.currys.co.uk").Build()); listOfSellers.Add(new tblSellersBuilder().WithId(4).WithName("Argos").WithUrl("https://www.argos.co.uk").Build()); listOfSellers.Add(new tblSellersBuilder().WithId(5).WithName("Smyths").WithUrl("https://www.smythstoys.com").Build()); listOfSellers.Add(new tblSellersBuilder().WithId(6).WithName("Target").WithUrl("https://www.target.com").Build()); seedingContext.tblSellers.AddRange(listOfSellers); var listOfExclSellers = new List <tblExcludedSellers>(); listOfExclSellers.Add(new tblExcludedSellersBuilder().WithUsername(_username).WithSellerId(5).Build()); listOfExclSellers.Add(new tblExcludedSellersBuilder().WithUsername(_username).WithSellerId(6).Build()); seedingContext.tblExcludedSellers.AddRange(listOfExclSellers); await seedingContext.SaveChangesAsync(); } var newListOfSellers = new List <int>() { 1, 2, 3, 5 }; // Act var task = _userSettingsService.UpdateUserSellerPreferences(_username, newListOfSellers); await task; // Assert var updatedList = _dbContext.tblExcludedSellers.Where(x => x.Username == _username).Select(x => x.SellerId).ToList(); Assert.Equal(2, updatedList.Count); Assert.Contains(4, updatedList); Assert.Contains(6, updatedList); }
public async Task UpdateUserSellerPreferences(string username, IEnumerable <int> sellerIds) { if (string.IsNullOrEmpty(username)) { throw new ArgumentOutOfRangeException($"{nameof(username)} is required"); } // get all sellers var allSellerIds = await _dbContext.tblSellers.Select(x => x.Id).ToListAsync(); if (sellerIds.Except(allSellerIds).Any()) // Check if all provided ids map to sellers { throw new Exception("Seller not found"); } var currentExclusions = await _dbContext.tblExcludedSellers.Where(x => x.Username == username).Select(x => x.SellerId).ToListAsync(); // Determine insertions and removals based on provided ids and what's currently in db var correctExclusions = allSellerIds.Except(sellerIds); var removals = currentExclusions.Except(correctExclusions) .Select(x => new tblExcludedSellers { Username = username, SellerId = x, }); var insertions = correctExclusions.Except(currentExclusions) .Select(x => new tblExcludedSellers { Username = username, SellerId = x, }); _dbContext.tblExcludedSellers.AddRange(insertions); _dbContext.tblExcludedSellers.RemoveRange(removals); await _dbContext.SaveChangesAsync(); }