예제 #1
0
        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());
        }
예제 #2
0
        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);
        }
예제 #3
0
        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();
        }