Пример #1
0
        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)));
        }
Пример #2
0
        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());
        }
Пример #3
0
        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 }));
        }
Пример #4
0
        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();
        }
Пример #5
0
        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();
        }
Пример #6
0
        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();
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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();
        }
Пример #10
0
        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"));
        }
Пример #11
0
        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();
        }
Пример #12
0
        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();
        }