public IActionResult Put(int id, [FromBody] ClusterRequest clusterRequest) { if (clusterRepository.GetClusterById(id) == null) { return(NotFound()); } if (clusterRequest == null) { return(StatusCode(400, ModelState)); } var statusCode = ValidateCluster(clusterRequest, false); if (!ModelState.IsValid) { return(StatusCode(statusCode.StatusCode)); } var cluster = clusterRepository.UpdateCluster(id, clusterRequest); if (cluster == null) { var error = new Error() { message = "Cluster went oopsie when updating" }; return(StatusCode(400, error)); } return(Ok(new ClusterDTO(cluster))); }
private StatusCodeResult ValidateCluster(ClusterRequest clusterRequest, bool fromCreating) { if (clusterRequest == null || !ModelState.IsValid) { return(BadRequest()); } int?managerId = clusterRequest.ManagerId; if (managerId != null) { if (userRepository.GetUserById(managerId.GetValueOrDefault()) == null) { ModelState.AddModelError("", $"UserId {managerId} not found"); return(StatusCode(404)); } else if (fromCreating && clusterRepository.GetClusterByManagerId(managerId.GetValueOrDefault()) != null) { ModelState.AddModelError("", $"UserId {managerId} is already associated with another cluster"); return(StatusCode(400)); } } return(NoContent()); }
public IActionResult Post([FromBody] ClusterRequest clusterRequest) { if (clusterRequest == null) { return(StatusCode(400, ModelState)); } var statusCode = ValidateCluster(clusterRequest, true); if (!ModelState.IsValid) { return(StatusCode(statusCode.StatusCode)); } //var room = roomRepository.CreateRoom(roomRequest); var cluster = clusterRepository.CreateCluster(clusterRequest); if (cluster == null) { var error = new Error() { message = "Cluster went oopsie when creating" }; return(StatusCode(400, error)); } return(RedirectToRoute("GetCluster", new { id = cluster.Id })); }
public void TestUpdateMissingId() { long id = 12345; var request = new ClusterRequest() { name = "name", ips = new[] { "localhost" }, }; Mock.Reset(); Mock.Setup(srv => srv.Update(It.IsAny <ClusterModel>())).Returns(0); Mock.Setup(srv => srv.Get(id, "Test User")).Returns(new ClusterModel() { Id = id, }); MockUser.Reset(); var result = Browser.Put($"/clusters/{id}", ctx => { ctx.JsonBody(request); }).Result; Assert.AreEqual(HttpStatusCode.NotFound, result.StatusCode); Assert.That(result.ContentType.StartsWith("application/json")); Mock.Verify(srv => srv.Update(It.Is <ClusterModel>(c => c.Name == request.name)), Times.Once); Mock.Verify(srv => srv.Get(id, "Test User"), Times.Once); Mock.VerifyNoOtherCalls(); MockUser.VerifyNoOtherCalls(); }
public void TestUpdateMultipleIds() { long id = 12345; var request = new ClusterRequest() { name = "name", ips = new[] { "localhost" }, }; Mock.Reset(); Mock.Setup(srv => srv.Update(It.IsAny <ClusterModel>())).Returns(2); Mock.Setup(srv => srv.Get(id, "Test User")).Returns(new ClusterModel() { Id = id, }); MockUser.Reset(); LogAssert.Expect(LogType.Exception, new Regex("^Exception: More than one cluster has")); var result = Browser.Put($"/clusters/{id}", ctx => { ctx.JsonBody(request); }).Result; Assert.AreEqual(HttpStatusCode.InternalServerError, result.StatusCode); Assert.That(result.ContentType.StartsWith("application/json")); Mock.Verify(srv => srv.Update(It.Is <ClusterModel>(c => c.Name == request.name)), Times.Once); Mock.Verify(srv => srv.Get(id, "Test User"), Times.Once); Mock.VerifyNoOtherCalls(); MockUser.VerifyNoOtherCalls(); }
public void TestAddDuplcateIps() { var request = new ClusterRequest() { name = "name", ips = new[] { "localhost", "localhost" }, }; // long id = 12345; Mock.Reset(); MockUser.Reset(); var result = Browser.Post($"/clusters", ctx => { ctx.JsonBody(request); }).Result; Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode); Assert.That(result.ContentType.StartsWith("application/json")); Mock.VerifyNoOtherCalls(); MockUser.VerifyNoOtherCalls(); }
public Cluster UpdateCluster(int id, ClusterRequest clusterRequest) { Cluster cluster = dbContext.Clusters.Where(c => c.Id == id).FirstOrDefault(); List <ClusterUser> clusterUsersToDelete = dbContext.ClusterUsers.Where(cu => cu.ClusterId == id).ToList(); if (clusterUsersToDelete != null) { dbContext.RemoveRange(clusterUsersToDelete); } cluster.Name = clusterRequest.Name; cluster.Address = clusterRequest.Address; User manager = dbContext.Users.Where(u => u.Id == clusterRequest.ManagerId).FirstOrDefault(); if (manager != null) { ClusterUser clusterUser = new ClusterUser() { Cluster = cluster, User = manager, }; dbContext.Add(clusterUser); } dbContext.Update(cluster); bool isSuccess = Save(); if (!isSuccess) { return(null); } return(cluster); }
public Cluster CreateCluster(ClusterRequest clusterRequest) { Cluster cluster = new Cluster(); cluster.Name = clusterRequest.Name; cluster.Address = clusterRequest.Address; User manager = dbContext.Users.Where(u => u.Id == clusterRequest.ManagerId).FirstOrDefault(); if (manager != null) { ClusterUser clusterUser = new ClusterUser() { Cluster = cluster, User = manager, }; dbContext.Add(clusterUser); } dbContext.Add(cluster); bool isSuccess = Save(); if (!isSuccess) { return(null); } return(cluster); }
public void TestAdd() { long id = 12345; var request = new ClusterRequest() { name = "name", ips = new[] { "localhost" }, }; Mock.Reset(); Mock.Setup(srv => srv.Add(It.IsAny <ClusterModel>())) .Callback <ClusterModel>(req => { Assert.AreEqual(request.name, req.Name); Assert.AreEqual(request.ips.Length, req.Ips.Split(',').Length); }) .Returns(id); MockUser.Reset(); var result = Browser.Post($"/clusters", ctx => { ctx.JsonBody(request); }).Result; Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); Assert.That(result.ContentType.StartsWith("application/json")); var cluster = result.Body.DeserializeJson <ClusterResponse>(); Assert.AreEqual(id, cluster.Id); Assert.AreEqual(request.name, cluster.Name); Assert.AreEqual(request.ips.Length, cluster.Ips.Length); for (int i = 0; i < request.ips.Length; i++) { Assert.AreEqual(request.ips[i], cluster.Ips[i]); } Mock.Verify(srv => srv.Add(It.Is <ClusterModel>(c => c.Name == request.name)), Times.Once); Mock.VerifyNoOtherCalls(); MockUser.VerifyNoOtherCalls(); }
public void TestUpdateDefault() { long id = 0; var request = new ClusterRequest() { name = "name", ips = new[] { "localhost" }, }; LogAssert.Expect(LogType.Exception, new Regex("^Exception: Cannot edit default cluster")); var result = Browser.Put($"/clusters/{id}", ctx => { ctx.JsonBody(request); }).Result; Assert.AreEqual(HttpStatusCode.InternalServerError, result.StatusCode); Assert.That(result.ContentType.StartsWith("application/json")); }
public void TestUpdateEmptyIps() { long id = 12345; var request = new ClusterRequest() { name = "name", ips = Array.Empty <string>(), }; Mock.Reset(); MockUser.Reset(); var result = Browser.Put($"/clusters/{id}", ctx => { ctx.JsonBody(request); }).Result; Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode); Assert.That(result.ContentType.StartsWith("application/json")); Mock.VerifyNoOtherCalls(); MockUser.VerifyNoOtherCalls(); }
public void TestAddEmptyName() { // long id = 12345; var request = new ClusterRequest() { name = string.Empty, ips = new[] { "127.0.0.1" }, }; Mock.Reset(); MockUser.Reset(); var result = Browser.Post($"/clusters", ctx => { ctx.JsonBody(request); }).Result; Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode); Assert.That(result.ContentType.StartsWith("application/json")); Mock.VerifyNoOtherCalls(); MockUser.VerifyNoOtherCalls(); }