public async Task <bool> CompleteExperiment(Guid participantId, string key) { bool success = false; if (!participantId.Equals(Guid.Empty) && !String.IsNullOrEmpty(key)) { try { ExperimentRequest model = new ExperimentRequest() { ApiKey = key, ParticipantId = participantId }; using (HttpClient client = new HttpClient()) { string url = $"{ApiHost}/api/experiment"; string json = JsonConvert.SerializeObject(model, Formatting.Indented); var response = await client.PostAsync(url, new StringContent(json, Encoding.UTF8, "application/json")); if (response.StatusCode == HttpStatusCode.OK) { success = JsonConvert.DeserializeObject <bool>(await response.Content.ReadAsStringAsync()); } } } catch (Exception ex) { // _failures.Add(ex); } } return(success); }
public void Create_GoodWeather() { HttpContext.Current = MockHelper.FakeHttpContext("experiments"); _context.Users.Add(new UserEntity() { Name = "Bobby", Email = "*****@*****.**" }); _context.Companies.Add(new CompanyEntity() { Name = "Some crazy company", Description = "That is the most crazy company" }); var experimentToCreate = new ExperimentRequest() { Name = "Some amazing experiment", Description = "The most crazy cells you can find out there" }; var res = _controller.Create(experimentToCreate) as OkNegotiatedContentResult <bool>; Assert.NotNull(res); Assert.IsTrue(res.Content); Assert.AreEqual(1, _context.Experiments.ToList()[0].Id); Assert.AreEqual("Some amazing experiment", _context.Experiments.ToList()[0].Name); Assert.AreEqual("The most crazy cells you can find out there", _context.Experiments.ToList()[0].Description); }
public void Update_BadWeather() { // #1 - Try updating an experiment with empty/null body var res = _controller.Update(1, null) as BadRequestErrorMessageResult; Assert.NotNull(res); Assert.AreEqual("Empty request body!", res.Message); // #2 - Try updating a non-existing company var updatedExperiment = new ExperimentRequest() { Name = "MySuccessfulExperiment", Description = "Some new crazy description" }; var res1 = _controller.Update(1, updatedExperiment); Assert.IsNotNull(res1); Assert.IsInstanceOf <NotFoundResult>(res1); // #3 - Try updating a company without providing a company name _controller.ModelState.AddModelError("error", "An experiment name must be provided!"); updatedExperiment = new ExperimentRequest() { Description = "The most crazy experiment you can find out there" }; res = _controller.Update(1, updatedExperiment) as BadRequestErrorMessageResult; Assert.NotNull(res); Assert.AreEqual("An experiment name must be provided!", res.Message); }
public void Model_Validation() { var experimentToCreate = new ExperimentRequest() { Description = "An experiment without a name shouldn't pass" }; var context = new ValidationContext(experimentToCreate, null, null); var results = new List <ValidationResult>(); var isModelStateValid = Validator.TryValidateObject(experimentToCreate, context, results, true); Assert.IsFalse(isModelStateValid); }
public IHttpActionResult Create(ExperimentRequest experimentRequest) { if (experimentRequest == null) { return(BadRequest("Empty request body!")); } if (!ModelState.IsValid) { return(BadRequest(ControllerHelper.GetModelStateErrorMessages(ModelState))); } var result = _experimentService.Create(experimentRequest, HttpContext.Current); return(Ok(result)); }
public void Create_BadWeather() { // #1 - Try creating an experiment with empty/null body var res = _controller.Create(null) as BadRequestErrorMessageResult; Assert.NotNull(res); Assert.AreEqual("Empty request body!", res.Message); // #2 - Try creating an experiment without providing an experiment name _controller.ModelState.AddModelError("error", "An experiment name must be provided!"); var experimentRequest = new ExperimentRequest() { Description = "The most crazy experiment you can find out there" }; res = _controller.Create(experimentRequest) as BadRequestErrorMessageResult; Assert.NotNull(res); Assert.AreEqual("An experiment name must be provided!", res.Message); }
public IHttpActionResult Update(int id, ExperimentRequest experimentRequest) { if (experimentRequest == null) { return(BadRequest("Empty request body!")); } if (!ModelState.IsValid) { return(BadRequest(ControllerHelper.GetModelStateErrorMessages(ModelState))); } var experiment = _experimentService.GetById(id); if (experiment == null) { return(NotFound()); } var result = _experimentService.Update(id, experimentRequest, HttpContext.Current); return(Ok(result)); }
public ExperimentResult Generate(ExperimentRequest request) { _logger.LogInformation("Incoming experimet request: {0}", request); var result = new ExperimentResult(); if (request.TraySize != (int)TraySizes.Small && request.TraySize != (int)TraySizes.Large) { result.Message = "Invalid tray size"; return(result); } try { var wells = request.Experiments.SelectMany(e => e.GetWells()); if (wells.Count() > request.TraySize * request.AllowedPlates) { result.Message = "Unable to fulfill experiment (too few plates)"; return(result); } wells = wells.OrderByDescending(w => w.GroupingPriority); //sort is important to have similar together var groups = wells.GroupBy(w => w.GroupingKey); //group by most numerous (set internally in preparation part) result.Trays = new Tray[request.AllowedPlates]; //for (var trayIndex = 0; trayIndex < result.Trays.Length; trayIndex++) //{ var trayIndex = 0; result.Trays[trayIndex] = new Tray { TraySize = request.TraySize }; var rowIndex = 0; foreach (var group in groups) { var columnIndex = 0; var groupingKey = group.Key; foreach (var well in group) { well.Row = rowIndex + 1; well.Column = columnIndex + 1; result.Trays[trayIndex].Wells.Add(well); columnIndex++; if (columnIndex % result.Trays[trayIndex].Columns == 0 || //new row if current row is filled groupingKey != well.GroupingKey) //or sample changed { columnIndex = 0; rowIndex++; groupingKey = well.GroupingKey; } if (rowIndex >= result.Trays[trayIndex].Rows) //new tray (should break if allowed trays is breached) { if (trayIndex++ == request.AllowedPlates) { throw new ArgumentOutOfRangeException("AllowedPlates", "Number of allowed plates has been breached"); } result.Trays[trayIndex] = new Tray { TraySize = request.TraySize }; rowIndex = 0; columnIndex = 0; } } rowIndex++; } //} result.Message = "OK"; } catch (Exception ex) { result.Message = string.Concat("Error generating experiments: ", ex.Message); _logger.LogError(ex, "Error generating experiment"); } return(result); }