public async Task trying_to_register_investor_related_with_fake_user_exception_is_thrown()
        {
            //Given
            var investor = GetDefaultInvestor();

            var userRepositoryMock = new Mock <IUserRepository>();

            userRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult((User)null));

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult(investor));


            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            Task act() => investorService.RegisterAsync(investor.UserId);

            //Then
            await Assert.ThrowsAsync <UserNotFoundSerExc>(act);
        }
        public async Task get_async_should_invoke_get_async_on_repository()
        {
            //Given
            var investor = GetDefaultInvestor();

            var userRepositoryMock = new Mock <IUserRepository>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult(investor));

            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            await investorService.GetAsync(investor.UserId);

            //Then
            investorRepositoryMock.Verify(x => x.GetAsync(investor.UserId), Times.Once);
        }
        public async Task remove_from_favourite_companies_invokes_update_async_on_investors_repo()
        {
            //Given
            string companySymbol = "AAPL";
            var    investor      = GetDefaultInvestor();

            investor.AddToFavouriteCompanies(companySymbol);

            var userRepositoryMock = new Mock <IUserRepository>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult(investor));


            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            await investorService.RemoveFromFavouriteCompaniesAsync(investor.UserId, companySymbol);

            //Then
            investorRepositoryMock.Verify(x => x.UpdateAsync(investor), Times.Once);
        }
        /*
         * [ActionName("Delete")]
         * public async Task<ActionResult> Delete(int id)
         * {
         *  var svc = CreateInvestorService();
         *  var model = await svc.GetInvestorByID(id);
         *
         *  return View(model);
         * }
         * [HttpPost]
         * [ActionName("Delete")]
         * [ValidateAntiForgeryToken]
         * public async Task<ActionResult> DeleteInvestor(int id)
         * {
         *  var service = CreateInvestorService();
         *
         *  await service.DeleteInvestor(id);
         *
         *  TempData["SaveResult"] = "The Investor was deleted";
         *
         *  return RedirectToAction("Index");
         * }
         */
        private InvestorService CreateInvestorService()
        {
            var userId  = Guid.Parse(User.Identity.GetUserId());
            var service = new InvestorService(userId);

            return(service);
        }
        public async Task add_to_favourite_companies_invokes_update_async_on_investors_repo()
        {
            //Given
            var company  = GetDefaultCompany();
            var investor = GetDefaultInvestor();

            var userRepositoryMock = new Mock <IUserRepository>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult(investor));


            var companyRepositoryMock = new Mock <ICompanyRepository>();

            companyRepositoryMock.Setup(x => x.BrowseAsync())
            .ReturnsAsync(new List <Company>()
            {
                company
            });

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            await investorService.AddToFavouriteCompaniesAsync(investor.UserId, company.Symbol);

            //Then
            investorRepositoryMock.Verify(x => x.UpdateAsync(investor), Times.Once);
        }
        public async Task register_async_should_invoke_add_async_on_repository()
        {
            //Given
            var user     = GetDefaultUser();
            var investor = new Investor(user);

            var userRepositoryMock = new Mock <IUserRepository>();

            userRepositoryMock.Setup(x => x.GetAsync(user.Id))
            .Returns(Task.FromResult(user));

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult((Investor)null));

            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            await investorService.RegisterAsync(investor.UserId);

            //Then
            investorRepositoryMock.Verify(x => x.AddAsync(It.IsAny <Investor>()), Times.Once);
        }
        public async Task get_async_returns_null_if_repo_does_not_contain_proper_investor()
        {
            //Given
            var userId = Guid.NewGuid();

            var userRepositoryMock = new Mock <IUserRepository>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(userId))
            .Returns(Task.FromResult((Investor)null));


            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            var investor = await investorService.GetAsync(userId);

            //Then
            investor.Should().BeNull();
        }
        public async Task remove_async_throws_exception_if_investor_does_not_exist()
        {
            //Given
            var investor = GetDefaultInvestor();

            var userRepoMock = new Mock <IUserRepository>();

            userRepoMock.Setup(x => x.GetAsync(investor.UserId))
            .ReturnsAsync((User)null);

            var investorRepoMock      = new Mock <IInvestorRepository>();
            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepoMock.Object,
                                                      investorRepoMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            Task act() => investorService.RemoveAsync(investor.UserId);

            //Then
            await Assert.ThrowsAsync <InvestorNotFoundSerExc>(act);
        }
        public async Task remove_async_calls_remove_async_on_investor_repo()
        {
            //Given
            var investor = GetDefaultInvestor();

            var userRepoMock = new Mock <IUserRepository>();

            var investorRepoMock = new Mock <IInvestorRepository>();

            investorRepoMock.Setup(x => x.GetAsync(investor.UserId))
            .ReturnsAsync(investor);

            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepoMock.Object,
                                                      investorRepoMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            await investorService.RemoveAsync(investor.UserId);

            //Then
            investorRepoMock.Verify(x => x.RemoveAsync(investor.UserId), Times.Once);
        }
        public async Task get_async_using_mail_returns_null_if_related_investor_does_not_exist()
        {
            //Given
            var user     = GetDefaultUser();
            var investor = new Investor(user);

            var userRepositoryMock = new Mock <IUserRepository>();

            userRepositoryMock.Setup(x => x.GetAsync(user.Email))
            .Returns(Task.FromResult(user));

            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(user.Id))
            .Returns(Task.FromResult((Investor)null));

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            var returnedInvestorDto = await investorService.GetAsync(user.Email);

            //Then
            userRepositoryMock.Verify(x => x.GetAsync(user.Email), Times.Once);
            investorRepositoryMock.Verify(x => x.GetAsync(user.Id), Times.Once);
            returnedInvestorDto.Should().BeNull();
        }
        public async Task exception_is_thrown_if_related_investor_does_not_exist_while_adding_to_favourite_companies()
        {
            //Given
            var company = GetDefaultCompany();
            var user    = GetDefaultUser();

            var userRepositoryMock = new Mock <IUserRepository>();

            userRepositoryMock.Setup(x => x.GetAsync(user.Id))
            .Returns(Task.FromResult(user));

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(user.Id))
            .Returns(Task.FromResult((Investor)null));


            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            Task act() =>
            investorService.AddToFavouriteCompaniesAsync(user.Id, company.Symbol);

            //Then
            await Assert.ThrowsAsync <InvestorNotFoundSerExc>(act);
        }
        public async Task browse_async_returns_mapping_result()
        {
            //Given
            IEnumerable <InvestorDto> investors = new List <InvestorDto>();

            var userRepositoryMock = new Mock <IUserRepository>();

            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            mapperMock.Setup(x =>
                             x.Map <IEnumerable <InvestorDto> >(It.IsAny <IEnumerable <Investor> >()))
            .Returns(investors);

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            var returnedInvestors = await investorService.BrowseAsync();

            //Then
            returnedInvestors.Should().BeSameAs(investors);
        }
        public async Task exception_is_thrown_if_related_company_symbol_does_not_exist_while_removing_from_favourite_companies()
        {
            //Given
            string companySymbol = "AAPL";
            var    investor      = GetDefaultInvestor();

            var userRepositoryMock = new Mock <IUserRepository>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult(investor));


            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            Task act()
            => investorService.RemoveFromFavouriteCompaniesAsync(investor.UserId,
                                                                 companySymbol);

            //Then
            await Assert.ThrowsAsync <WrongCompanySymbolSerExc>(act);
        }
        public async Task removing_from_favourite_companies_removes_company_from_investors_set()
        {
            //Given
            string companySymbol = "AAPL";
            var    investor      = GetDefaultInvestor();

            investor.AddToFavouriteCompanies(companySymbol);
            var favouriteComapniesBeforeAdd = new List <string>(investor.FavouriteCompanies);

            var userRepositoryMock = new Mock <IUserRepository>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult(investor));


            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            await investorService.RemoveFromFavouriteCompaniesAsync(investor.UserId, companySymbol);

            //Then
            favouriteComapniesBeforeAdd.Should().Contain(companySymbol);
            investor.FavouriteCompanies.Should().NotContain(companySymbol);
        }
        public async Task GetByIdAsyncWhenNoInvestorFoundReturnsInvestorNotFoundResponse()
        {
            // Arrange
            var mockInvestorRepository = GetDefaultIInvestorRepositoryInstance();
            var mockUnitOfWork         = GetDefaultIUnitOfWorkInstance();
            var investorId             = 1;

            mockInvestorRepository.Setup(r => r.FindById(investorId))
            .Returns(Task.FromResult <Investor>(null));

            var service = new InvestorService(mockInvestorRepository.Object, mockUnitOfWork.Object);

            // Act
            InvestorResponse result = await service.GetByIdAsync(investorId);

            var message = result.Message;

            // Assert
            message.Should().Be("Investor not found");
        }
        public async Task get_async_returns_mapped_investor_if_it_exists()
        {
            //Given
            var investor = GetDefaultInvestor();

            investor.AddToFavouriteCompanies("AAPL");
            investor.AddToFavouriteCompanies("MSFN");

            var expectedInvestorDto = new InvestorDto()
            {
                UserId             = investor.UserId,
                UpdatedAt          = investor.UpdatedAt,
                FavouriteCompanies = new List <string>(investor.FavouriteCompanies)
            };

            var userRepositoryMock = new Mock <IUserRepository>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult(investor));


            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            mapperMock.Setup(x => x.Map <InvestorDto>(It.IsAny <Investor>()))
            .Returns(expectedInvestorDto);

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            var occuredInvestorDto = await investorService.GetAsync(investor.UserId);

            //Then
            occuredInvestorDto.Should().BeEquivalentTo(expectedInvestorDto);
            mapperMock.Verify(x => x.Map <InvestorDto>(It.IsAny <Investor>()), Times.Once);
        }
        public async Task browse_async_invokes_browseasync_on_repo()
        {
            //Given
            var userRepositoryMock = new Mock <IUserRepository>();

            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            var returnedInvestors = await investorService.BrowseAsync();

            //Then
            investorRepositoryMock.Verify(x => x.BrowseAsync(), Times.Once);
        }
        public async Task add_to_favourite_companies_throws_exception_if_given_company_symbol_is_invalid()
        {
            // invalid means related company symbol is not in repo.
            //Given
            var company = GetDefaultCompany();

            var investor = GetDefaultInvestor();

            var userRepositoryMock = new Mock <IUserRepository>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult(investor));

            var companyRepositoryMock = new Mock <ICompanyRepository>();

            companyRepositoryMock.Setup(x => x.BrowseAsync())
            .ReturnsAsync(new List <Company>()
            {
                company
            });

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            Task act() =>
            investorService.AddToFavouriteCompaniesAsync(investor.UserId, "BAD_COMPANY_SYMBOL");

            //Then
            await Assert.ThrowsAsync <InvalidCompanySymbolSerExc>(act);

            companyRepositoryMock.Verify(x => x.BrowseAsync(), Times.Once);
        }
        public async Task browse_async_invokes_map_on_mapper()
        {
            //Given
            var userRepositoryMock = new Mock <IUserRepository>();

            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            var returnedInvestors = await investorService.BrowseAsync();

            //Then
            mapperMock.Verify(x =>
                              x.Map <IEnumerable <InvestorDto> >(It.IsAny <IEnumerable <Investor> >()),
                              Times.Once);
        }
        public async Task get_async_using_mail_returns_mapping_result()
        {
            //Given
            var user        = GetDefaultUser();
            var investor    = new Investor(user);
            var investorDto = new InvestorDto();

            var userRepositoryMock = new Mock <IUserRepository>();

            userRepositoryMock.Setup(x => x.GetAsync(user.Email))
            .Returns(Task.FromResult(user));

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(user.Id))
            .Returns(Task.FromResult(investor));

            var companyRepositoryMock = new Mock <ICompanyRepository>();

            var mapperMock = new Mock <IMapper>();

            mapperMock.Setup(x => x.Map <InvestorDto>(investor))
            .Returns(investorDto);

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            var returnedInvestorDto = await investorService.GetAsync(user.Email);

            //Then
            userRepositoryMock.Verify(x => x.GetAsync(user.Email), Times.Once);
            investorRepositoryMock.Verify(x => x.GetAsync(user.Id), Times.Once);
            mapperMock.Verify(x => x.Map <InvestorDto>(investor), Times.Once);
            returnedInvestorDto.Should().BeSameAs(investorDto);
        }
        public async Task add_to_favourite_companies_throws_exception_if_given_symbol_is_present()
        {
            //Given
            var company = GetDefaultCompany();

            var investor = GetDefaultInvestor();

            investor.AddToFavouriteCompanies(company.Symbol);

            var userRepositoryMock = new Mock <IUserRepository>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult(investor));

            var companyRepositoryMock = new Mock <ICompanyRepository>();

            companyRepositoryMock.Setup(x => x.BrowseAsync())
            .ReturnsAsync(new List <Company>()
            {
                company
            });

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            Task act() =>
            investorService.AddToFavouriteCompaniesAsync(investor.UserId, company.Symbol);

            //Then
            await Assert.ThrowsAsync <CompanySymbolInUseSerExc>(act);
        }
        public async Task adding_new_favourite_company_adds_company_to_set()
        {
            //Given
            var company  = GetDefaultCompany();
            var investor = GetDefaultInvestor();
            var favouriteComapniesBeforeAdd = new List <string>(investor.FavouriteCompanies);

            var userRepositoryMock = new Mock <IUserRepository>();

            var investorRepositoryMock = new Mock <IInvestorRepository>();

            investorRepositoryMock.Setup(x => x.GetAsync(investor.UserId))
            .Returns(Task.FromResult(investor));


            var companyRepositoryMock = new Mock <ICompanyRepository>();

            companyRepositoryMock.Setup(x => x.BrowseAsync())
            .ReturnsAsync(new List <Company>()
            {
                company
            });

            var mapperMock = new Mock <IMapper>();

            var investorService = new InvestorService(userRepositoryMock.Object,
                                                      investorRepositoryMock.Object, companyRepositoryMock.Object,
                                                      mapperMock.Object);

            //When
            await investorService.AddToFavouriteCompaniesAsync(investor.UserId, company.Symbol);

            //Then
            favouriteComapniesBeforeAdd.Should().NotContain(company.Symbol);
            investor.FavouriteCompanies.Should().Contain(company.Symbol);
        }
Beispiel #23
0
 public InvestorController()
 {
     accountService = new AccountService(db);
     investorService = new InvestorService(db);
     investmentService = new InvestmentService(db);
 }
Beispiel #24
0
 public AuctionController()
 {
     investorService = new InvestorService(db);
     investmentService = new InvestmentService(db);
 }