public void TestUpdateAccountIdValidationError()
        {
            // arrange
            var context    = CreateDbContext();
            var controller = new TradesController(context);

            var trade = new PutTradeParameter
            {
                Id        = 2,
                AccountId = 1,
                Action    = TradeActions.Sell,
                Quantity  = 10,
                Symbol    = "GE"
            };

            // act
            var result    = controller.Put(2, trade);
            var brRequest = result as BadRequestObjectResult;
            var data      = (brRequest.Value as IEnumerable <ValidationResult>).ToArray();

            // assert
            Assert.IsNotNull(brRequest);
            Assert.AreEqual(400, brRequest.StatusCode);

            Assert.AreEqual("AccountId cannot be modified", data[0].ErrorMessage);
            Assert.AreEqual(2, trade.Id);
        }
        public void TestAdd()
        {
            // arrange
            var context    = CreateDbContext();
            var controller = new TradesController(context);

            var trade = new Trade()
            {
                Id        = 4,
                AccountId = 1,
                Action    = TradeActions.Buy,
                Quantity  = 1,
                Symbol    = "MSFT"
            };

            // act
            var result   = controller.Post(trade);
            var okResult = result as OkObjectResult;
            var data     = (okResult.Value as Trade);

            // assert
            Assert.IsNotNull(okResult);
            Assert.AreEqual(200, okResult.StatusCode);
            Assert.IsNotNull(data);
            Assert.AreEqual(4, trade.Id);
        }
Beispiel #3
0
        public TradesControllerTest()
        {
            MapperConfig mapperConfig = new MapperConfig();

            _mapper            = mapperConfig.MapperConfiguration();
            _tradesServiceMock = new Mock <ITradesService>();
            _tradesController  = new TradesController(_mapper, _tradesServiceMock.Object);
        }
Beispiel #4
0
        public void TestTraderGet()
        {
            // Test method that returns a string
            var controller = new TradesController();

            var response = controller.Get("fred");

            Assert.AreEqual("GET for trader fred", response);
        }
 public TradesControllerTests()
 {
     this.optionsBuilder = new DbContextOptionsBuilder <ApplicationDbContext>()
                           .UseInMemoryDatabase("tradesDatabase");
     this.db               = new ApplicationDbContext(this.optionsBuilder.Options);
     this.repo             = new EfDeletableEntityRepository <Company>(this.db);
     this.companiesService = new CompaniesService(this.repo);
     this.tradesService    = new TradesService(this.db, this.companiesService);
     this.userManager      = new FakeUserManager();
     this.controller       = new TradesController(this.companiesService, this.tradesService, this.userManager);
 }
Beispiel #6
0
        public void TestResponse()
        {
            // Test a method that returns an IHttpActionResult
            var controller = new TradesController();

            // OkNegotiatedContentResult is used to handle a 200 OK with content
            var response = controller.Get(3);
            var result   = response as OkNegotiatedContentResult <Trade>;

            Assert.IsNotNull(result);
            Assert.IsNotNull(result.Content);
            Assert.AreEqual(1000, result.Content.Volume);
        }
        public void TestToCheckErrorIsReturnedWhenNoTradeCanBeExecutedOnAStock()
        {
            var tradesController = new TradesController();

            var trade = new Trade()
            {
                Name     = "GOOGL",
                Type     = "BUY",
                Quantity = 50,
                Price    = 100
            };
            var submitTradeResponse = tradesController.Post(trade).Result;

            Assert.IsNotNull(submitTradeResponse);
            Assert.IsNull(submitTradeResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Success");
            Assert.IsNotNull(submitTradeResponse.TradeId);

            trade = new Trade()
            {
                Name     = "GOOGL",
                Type     = "BUY",
                Quantity = 100,
                Price    = 101
            };
            submitTradeResponse = tradesController.Post(trade).Result;
            Assert.IsNotNull(submitTradeResponse);
            Assert.IsNull(submitTradeResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Success");
            Assert.IsNotNull(submitTradeResponse.TradeId);

            trade = new Trade()
            {
                Name     = "GOOGL",
                Type     = "BUY",
                Quantity = 150,
                Price    = 100
            };
            submitTradeResponse = tradesController.Post(trade).Result;
            Assert.IsNotNull(submitTradeResponse);
            Assert.IsNull(submitTradeResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Success");
            Assert.IsNotNull(submitTradeResponse.TradeId);

            var executionResponse = tradesController.Get("GOOGL").Result;

            Assert.IsNotNull(executionResponse);
            Assert.IsNotNull(executionResponse.Error);
            Assert.AreEqual(executionResponse.Status, "Failure");
            Assert.AreEqual(executionResponse.TradeExecutions.Count, 0);
        }
        public void TestGetById()
        {
            // arrange
            var context    = CreateDbContext();
            var controller = new TradesController(context);

            // act
            var okResult = controller.Get(1) as OkObjectResult;
            var data     = (okResult.Value as Trade);

            // assert
            Assert.IsNotNull(data);
            Assert.AreEqual(1, data.Id);
        }
Beispiel #9
0
        public TradesIntegrationTest()
        {
            _httpRequestHandlerMock = new Mock <IHttpRequestHandler>();

            var services = new StartupHelper().BuildService();

            services.AddSingleton <ITradesService, TradesService>();
            services.AddSingleton(_httpRequestHandlerMock.Object);

            var serviceProvider = services.BuildServiceProvider();
            var tradeService    = serviceProvider.GetService <ITradesService>();
            var mapper          = serviceProvider.GetService <IMapper>();

            _tradesController = new TradesController(mapper, tradeService);
        }
        public void TestToCheckErrorIsReturnedWhenTradeTypeIsInvalid()
        {
            var tradesController = new TradesController();

            var trade = new Trade()
            {
                Name     = "APPL",
                Type     = "HOLD",
                Quantity = 50,
                Price    = 100
            };
            var submitTradeResponse = tradesController.Post(trade).Result;

            Assert.IsNotNull(submitTradeResponse);
            Assert.IsNotNull(submitTradeResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Failure");
            Assert.IsNull(submitTradeResponse.TradeId);
        }
        public void TestToCheckWhetherAStockIsSuccessFullyAddedInTheTradingQueue()
        {
            var tradesController = new TradesController();

            var trade = new Trade()
            {
                Name     = "GOOGL",
                Type     = "BUY",
                Quantity = 50,
                Price    = 100
            };
            var submitTradeResponse = tradesController.Post(trade).Result;

            Assert.IsNotNull(submitTradeResponse);
            Assert.IsNull(submitTradeResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Success");
            Assert.IsNotNull(submitTradeResponse.TradeId);
        }
        public async Task CreateWithNullAndBadRequestObjectResult()
        {
            // Arrange & Act
            var mockRepo   = new Mock <IRepository>();
            var controller = new TradesController(mockRepo.Object, _logger);

            controller.ModelState.AddModelError("Error", "Null job object inputted");
            mockRepo.Setup(repo => repo.Create <Trade>(null));

            // Act
            var result = await controller.CreateTrade(null);

            // Assert
            var badRequestResult = Assert.IsType <BadRequestObjectResult>(result);

            Assert.IsType <SerializableError>(badRequestResult.Value);

            _logger.Log(LogLevel.Debug, 0, "Logging exeution of method CreateWithNullAndBadRequestObjectResult", null, null);
        }
        public void TestGetSkip0Take1()
        {
            // arrange
            var context    = CreateDbContext();
            var controller = new TradesController(context);
            var p          = new TradeQueryParameter()
            {
                Skip = 0,
                Take = 1
            };

            // act
            var okResult = controller.Get(p) as OkObjectResult;
            var data     = (okResult.Value as IEnumerable <Trade>).ToArray();

            // assert
            Assert.AreEqual(1, data.Count());
            Assert.AreEqual(1, data[0].Id);
            Assert.AreEqual(1, data[0].AccountId);
        }
        public async Task CreateTradeValidModelWithOkResult()
        {
            // Arrange & Act
            var mockRepo   = new Mock <IRepository>();
            var controller = new TradesController(mockRepo.Object, _logger);

            var automotiveTrade = new Trade {
                TradeId = 17123, Name = "Automotive and Other Vehicle Maintenance"
            };

            mockRepo.Setup(repo => repo.Create(automotiveTrade)).Returns(Task.FromResult(automotiveTrade));

            // Act
            var autoTradeModel = JobAssistantMapper.Map <TradeModel>(automotiveTrade);
            var result         = await controller.CreateTrade(autoTradeModel);

            // Assert
            Assert.IsType <OkResult>(result);

            _logger.Log(LogLevel.Debug, 0, "Logging exeution of method CreateTradeValidModelWithOkResult", null, null);
        }
        public void TestDelete()
        {
            // arrange
            var context    = CreateDbContext();
            var controller = new TradesController(context);

            // act
            var result = controller.Delete(2);

            var okResult = result as OkObjectResult;
            var trade    = (okResult.Value as Trade);

            // assert
            Assert.IsNotNull(okResult);
            Assert.AreEqual(200, okResult.StatusCode);

            Assert.IsNotNull(trade);
            Assert.AreEqual(2, trade.Id);

            Assert.IsTrue(!context.Trades.Any(x => x.Id == 2));
        }
        public void TestGetAll()
        {
            // arrange
            var context    = CreateDbContext();
            var controller = new TradesController(context);

            // act
            var result = controller.Get(new Data.Models.TradeQueryParameter()
            {
            });
            var okResult = result as OkObjectResult;
            var data     = (okResult.Value as IEnumerable <Trade>).ToArray();

            // assert
            Assert.IsNotNull(okResult);
            Assert.AreEqual(200, okResult.StatusCode);

            Assert.IsNotNull(data);
            Assert.IsTrue(data.Length > 2);
            Assert.AreEqual(1, data[0].Id);
        }
        public void TestUpdate()
        {
            // arrange
            var context    = CreateDbContext();
            var controller = new TradesController(context);

            var trade = ((controller.Get(2) as OkObjectResult).Value as Trade);

            trade.Quantity = 15;

            // act
            var result   = controller.Put(2, trade);
            var okResult = result as OkObjectResult;
            var data     = (okResult.Value as Trade);

            // assert
            Assert.IsNotNull(okResult);
            Assert.AreEqual(200, okResult.StatusCode);

            Assert.IsNotNull(data);
            Assert.AreEqual(2, trade.Id);
        }
Beispiel #18
0
        public async Task <IHttpActionResult> DeleteTrader(string traderId)
        {
            TradesController trdCon = new TradesController();

            string          message = string.Empty;
            ApplicationUser trader  = db.Users.Find(traderId);

            if (trader == null)
            {
                // prepare the message
                ModelState.AddModelError("Message", "The author account can not be found!");
                // TODO logging here an unexpected error has occured
                return(BadRequest(ModelState));
            }
            try
            {
                // Business Rule: Remove the trader role of the account
                IdentityResult resultRole = await UserManager.RemoveFromRoleAsync(traderId, "Trader");

                if (!resultRole.Succeeded)
                {
                    foreach (string err in resultRole.Errors)
                    {
                        message += err;
                    }
                    ModelState.AddModelError("Message", "Trader Role Error: " + message + " Please contact the app admin!");
                    return(BadRequest(ModelState));
                }
                // Bussiness Rule: Remove the password when removing the trader role
                IdentityResult resultPassword = await UserManager.RemovePasswordAsync(traderId);

                if (!resultPassword.Succeeded)
                {
                    foreach (string err in resultPassword.Errors)
                    {
                        message += err;
                    }
                    ModelState.AddModelError("Message", "Trader Password Error: " + message + " Please contact the app admin!");
                    return(BadRequest(ModelState));
                }

                // deletion of trades will not delete the physical files
                var arts = from art in db.Trades
                           where (art.traderId == traderId)
                           select art;

                // the trade controller method will delete the physical uploaded trade images files
                foreach (Trade ar in arts)
                {
                    trdCon.DeletePhysicalImages(ar.tradeId);
                }

                // Business Rule: Remove the account and roles associcated when we have single role account
                // removing of trader will take care of removing the traders's trades and with that the images's
                // (multiple trades will remove multiple images from the tables)
                db.Users.Remove(trader);

                await db.SaveChangesAsync();

                return(Ok(trader));
            }
            catch (Exception Exc)
            {
                string error = Exc.InnerException.Message;

                // TODO // log the exception EXC on the server side
                RollBackDatabaseChanges();
                // prepare the message
                ModelState.AddModelError("Message", "An unexpected error occured during deleting the author account!");
                // TODO logging here an unexpected error has occured
                return(BadRequest(ModelState));
            }
        }
        public void TestToGetTradeExecutionsOnAStockWhenThereAreValidTradeRequests()
        {
            // Arrange
            var tradesController = new TradesController();

            var trade = new Trade()
            {
                Name     = "GOOGL",
                Type     = "BUY",
                Quantity = 50,
                Price    = 100
            };
            var submitTradeResponse = tradesController.Post(trade).Result;

            Assert.IsNotNull(submitTradeResponse);
            Assert.IsNull(submitTradeResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Success");
            Assert.IsNotNull(submitTradeResponse.TradeId);

            trade = new Trade()
            {
                Name     = "GOOGL",
                Type     = "BUY",
                Quantity = 100,
                Price    = 101
            };
            submitTradeResponse = tradesController.Post(trade).Result;
            Assert.IsNotNull(submitTradeResponse);
            Assert.IsNull(submitTradeResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Success");
            Assert.IsNotNull(submitTradeResponse.TradeId);

            trade = new Trade()
            {
                Name     = "GOOGL",
                Type     = "BUY",
                Quantity = 150,
                Price    = 100
            };
            submitTradeResponse = tradesController.Post(trade).Result;
            Assert.IsNotNull(submitTradeResponse);
            Assert.IsNull(submitTradeResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Success");
            Assert.IsNotNull(submitTradeResponse.TradeId);

            trade = new Trade()
            {
                Name     = "GOOGL",
                Type     = "SELL",
                Quantity = 100,
                Price    = 102
            };
            submitTradeResponse = tradesController.Post(trade).Result;
            Assert.IsNotNull(submitTradeResponse);
            Assert.IsNull(submitTradeResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Success");
            Assert.IsNotNull(submitTradeResponse.TradeId);

            trade = new Trade()
            {
                Name     = "GOOGL",
                Type     = "SELL",
                Quantity = 200,
                Price    = 100
            };
            submitTradeResponse = tradesController.Post(trade).Result;
            Assert.IsNotNull(submitTradeResponse);
            Assert.IsNull(submitTradeResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Success");
            Assert.IsNotNull(submitTradeResponse.TradeId);

            var executionResponse = tradesController.Get("GOOGL").Result;

            Assert.IsNotNull(executionResponse);
            Assert.IsNull(executionResponse.Error);
            Assert.AreEqual(submitTradeResponse.Status, "Success");
            Assert.IsNotNull(executionResponse.TradeExecutions);
            Assert.IsTrue(executionResponse.TradeExecutions.Count > 0);
        }