public void EditingExistingBug_ShouldChangeOnlySentData_Moq()
        {
            var fakeBugs = this.mocks.BugRepositoryMock.Object.All();
            var mockContext = new Mock<IBugTrackerData>();
            mockContext.Setup(u => u.Bugs).Returns(mocks.BugRepositoryMock.Object);
            var bugsController = new BugsController(mockContext.Object);
            SetupController(bugsController);

            var newTitle = "Changed" + DateTime.Now.Ticks;
            var model = new EditBugBindingModel()
            {
                Title = newTitle
            };
            var unchangedBug = fakeBugs.First(b => b.Id == 1);
            var oldDescription = unchangedBug.Description;
            var oldStatus = unchangedBug.Status;

            var response = bugsController.EditBug(model, 1).ExecuteAsync(CancellationToken.None).Result;

            var changedBug = fakeBugs.First(b => b.Id == 1);

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            mockContext.Verify(c => c.SaveChanges(), Times.Once);
            Assert.AreEqual(oldDescription, changedBug.Description);
            Assert.AreEqual(oldStatus, changedBug.Status);
            Assert.AreEqual(newTitle, changedBug.Title);
        }
        public void Modify_Existing_Bug_With_Correct_Data_Should_Return_200OK_And_Modify_Bug_In_Repository()
        {
            // Arrange
            var fakeBugToModify = this.mock.BugRepositoryMock.Object.All().FirstOrDefault();
            var newBugData = new EditBugBindingModel
            {
                Title = "Modified title",
                Description = "Modified description",
                Status = "Closed"
            };

            var mockContext = new Mock<IBugTrackerData>();
            mockContext.Setup(c => c.Bugs)
                .Returns(this.mock.BugRepositoryMock.Object);

            var bugsController = new BugsController(mockContext.Object);
            this.SetupController(bugsController);

            // Act
            var response = bugsController.EditExistingBug(fakeBugToModify.Id, newBugData)
                .ExecuteAsync(CancellationToken.None).Result;

            // Assert
            var fakeBugAfterEditing = this.mock.BugRepositoryMock.Object.All().LastOrDefault();
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.AreEqual(newBugData.Title, fakeBugAfterEditing.Title);
            Assert.AreEqual(newBugData.Description, fakeBugAfterEditing.Description);
            Assert.AreEqual(newBugData.Status, fakeBugAfterEditing.Status.ToString());
        }
        public void Modify_Existing_Bug_With_InCorrect_Data_Should_Return_400BadRequest_And_Do_Not_Modify_Bug()
        {
            // Arrange
            var fakeBugToModify = this.mock.BugRepositoryMock.Object.All().FirstOrDefault();
            var newBugData = new EditBugBindingModel { };

            var mockContext = new Mock<IBugTrackerData>();
            mockContext.Setup(c => c.Bugs)
                .Returns(this.mock.BugRepositoryMock.Object);

            var bugsController = new BugsController(mockContext.Object);
            this.SetupController(bugsController);
            bugsController.ModelState.AddModelError("No data", "Empty binding model.");

            // Act
            var response = bugsController.EditExistingBug(fakeBugToModify.Id, newBugData)
                .ExecuteAsync(CancellationToken.None).Result;

            // Assert
            var fakeBugAfterEditing = this.mock.BugRepositoryMock.Object.All().FirstOrDefault();
            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
            Assert.AreEqual(fakeBugToModify.Title, fakeBugAfterEditing.Title);
            Assert.AreEqual(fakeBugToModify.Description, fakeBugAfterEditing.Description);
            Assert.AreEqual(fakeBugToModify.Status, fakeBugAfterEditing.Status);
        }
 public void EditingExistingBug_ShouldChangeOnlySentData()
 {
     var controller = new BugsController();
     var model = new EditBugBindingModel()
     {
         Title = "Changed"+DateTime.Now.Ticks
     };
     var response = controller.EditBug(model, 3).ExecuteAsync(CancellationToken.None).Result;
     Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
 }
        public void EditUnexistingBug_ShouldReturnNotFound()
        {
            var controller = new BugsController(dataMock.Object);
            SetupController(controller, "Bugs");

            dataMock.Setup(data => data.Bugs.Find(It.IsAny<object>())).Returns(null as Bug);

            var updatedBug = new EditBugInputModel { Title = "New Title" };
            var result = controller.EditBug(2, updatedBug).ExecuteAsync(new CancellationToken()).Result;
            Assert.AreEqual(HttpStatusCode.NotFound, result.StatusCode);
        }
        public void EditExistingBug_NoDataSend_ShouldReturn400BadRequest()
        {
            // Arrange -> create a new bug
            var data = new BugTrackerDataMock();
            var bug = new Bug() { Id = 1, Title = "test", Status = Status.Open };
            data.Bugs.Add(bug);

            var controller = new BugsController(data);
            this.SetupControllerForTesting(controller, "bugs");

            // Act -> edit the above created bug
            var httpResponse = controller.PatchEditBug(1, null)
              .ExecuteAsync(new CancellationToken()).Result;

            // Assert -> 404 Not found
            Assert.AreEqual(HttpStatusCode.BadRequest, httpResponse.StatusCode);
        }
        public void EditingNonExistingBug_ShouldreturnNotFound_Moq()
        {
            var fakeBugs = this.mocks.BugRepositoryMock.Object.All();
            var mockContext = new Mock<IBugTrackerData>();
            mockContext.Setup(u => u.Bugs).Returns(mocks.BugRepositoryMock.Object);
            var bugsController = new BugsController(mockContext.Object);
            SetupController(bugsController);

            var newTitle = "Changed" + DateTime.Now.Ticks;
            var model = new EditBugBindingModel()
            {
                Title = newTitle
            };
            var response = bugsController.EditBug(model, 100).ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode);
            mockContext.Verify(c => c.SaveChanges(), Times.Never);
        }
        public void EditBugNoInputModel_ShouldReturnBadRequest()
        {
            var controller = new BugsController(dataMock.Object);
            SetupController(controller, "Bugs");

            var bugToEdit = new Bug
            {
                Title = "Bug4e Tuka",
                Description = "ne6to ne e nared",
                Status = BugStatus.InProgress,
                DateCreated = DateTime.Now
            };

            dataMock.Setup(data => data.Bugs.Find(It.IsAny<object>())).Returns(bugToEdit);

            var result = controller.EditBug(2, null).ExecuteAsync(new CancellationToken()).Result;
            Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode);
        }
        public void EditBug_InvalidBugData_ShouldReturn400BadRequest()
        {
            // Arrange -> create a few bugs
            var dataLayerMock = new BugTrackerDataMock();
            var bugsMock = dataLayerMock.Bugs;
            bugsMock.Add(new Bug() { Id = 1, Title = "Bug #1" });
            bugsMock.Add(new Bug() { Id = 2, Title = "Bug #2" });

            // Act -> edit bug data
            var bugsController = new BugsController(dataLayerMock);
            this.SetupControllerForTesting(bugsController, "bugs");
            EditBugBindingModel editBugData = null;
            var httpResponse = bugsController.EditBug(1, editBugData)
                .ExecuteAsync(new CancellationToken()).Result;

            // Assert -> HTTP status code 400 (BadRequest)
            Assert.AreEqual(HttpStatusCode.BadRequest, httpResponse.StatusCode);
        }
        public void EditBug_NonExistingBug_ShouldReturn404NotFound()
        {
            // Arrange -> create a few bugs
            var dataLayerMock = new BugTrackerDataMock();
            var bugsMock = dataLayerMock.Bugs;
            bugsMock.Add(new Bug() { Id = 1, Title = "Bug #1" });
            bugsMock.Add(new Bug() { Id = 2, Title = "Bug #2" });

            // Act -> edit bug data
            var bugsController = new BugsController(dataLayerMock);
            this.SetupControllerForTesting(bugsController, "bugs");
            var editBugData = new EditBugInputModel() { Title = "new title" };
            var httpResponse = bugsController.EditBug(1234, editBugData)
                .ExecuteAsync(new CancellationToken()).Result;

            // Assert -> HTTP status code 404 (Not Found)
            Assert.AreEqual(HttpStatusCode.NotFound, httpResponse.StatusCode);
        }
        public void EditExistingBugTitle_ShouldReturn200OK_Modify()
        {
            // Arrange -> create a new bug
            var data = new BugTrackerDataMock();
            var bug = new Bug() { Id = 1, Title = "test", Status = Status.Open };
            data.Bugs.Add(bug);

            var controller = new BugsController(data);
            this.SetupControllerForTesting(controller, "bugs");

            // Act -> edit the above created bug
            var httpResponse = controller.PatchEditBug(1, new BugBindingEditBugModel() { Title = "test1" })
              .ExecuteAsync(new CancellationToken()).Result;

            // Assert -> 200 OK
            Assert.AreEqual(HttpStatusCode.OK, httpResponse.StatusCode);

            // Assert the service holds the modified bug
            Assert.AreEqual("test1", bug.Title);
            Assert.AreEqual(Status.Open, bug.Status);
        }
        public void EditBug_ExistingBug_ShouldReturn200OK_CorrectBugData()
        {
            // Arrange -> create a few bugs
            var dataLayerMock = new BugTrackerDataMock();
            var bugsMock = dataLayerMock.Bugs;
            bugsMock.Add(new Bug() { Id = 1, Title = "Bug #1" });
            bugsMock.Add(new Bug()
            {
                Id = 2,
                Title = "Bug #2 for edit ...",
                Description = "Description for edit ...",
                Status = BugStatus.Fixed
            });
            bugsMock.Add(new Bug() { Id = 3, Title = "Bug #3" });
            var newTitle = "new title";
            var newDescription = "new description";
            var newStatus = BugStatus.Closed;

            // Act -> edit bug data
            var bugsController = new BugsController(dataLayerMock);
            this.SetupControllerForTesting(bugsController, "bugs");
            var editBugData = new EditBugBindingModel()
            {
                Title = newTitle,
                Description = newDescription,
                Status = newStatus
            };
            var httpResponse = bugsController.EditBug(2, editBugData)
                .ExecuteAsync(new CancellationToken()).Result;

            // Assert -> HTTP status code 200 (OK) + bug data changed
            Assert.AreEqual(HttpStatusCode.OK, httpResponse.StatusCode);

            Assert.AreEqual(2, bugsMock.Find(2).Id);
            Assert.AreEqual(newTitle, bugsMock.Find(2).Title);
            Assert.AreEqual(newDescription, bugsMock.Find(2).Description);
            Assert.AreEqual(newStatus, bugsMock.Find(2).Status);
        }
        public void EditingExistingBug_ShouldChangeOnlySentData()
        {
            var fakeBugs = new List<Bug>
            {
                new Bug()
                {
                    Id = 1,
                    Title = "Bug 1",
                    Description = "bug 1 description"
                },
                new Bug()
                {
                    Id = 2,
                    Title = "Bug 2",
                    Description = "bug 2 description"
                }
            };
            var fakeRepo = new FakeBugsRepository(fakeBugs);
            var fakeUnitOfWork = new FakeUnitOfWork(fakeRepo);
            var newTitle = "Changed" + DateTime.Now.Ticks;
            var model = new EditBugBindingModel()
            {
                Title = newTitle
            };
            var oldDescription = fakeBugs[0].Description;
            var oldStatus = fakeBugs[0].Status;

            var controller = new BugsController(fakeUnitOfWork);
            SetupController(controller);
            var response = controller.EditBug(model, 1).ExecuteAsync(CancellationToken.None).Result;

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.AreEqual(1, fakeUnitOfWork.SaveChangesCallCount);
            Assert.AreEqual(oldDescription, fakeBugs[0].Description);
            Assert.AreEqual(oldStatus, fakeBugs[0].Status);
            Assert.AreEqual(newTitle, fakeBugs[0].Title);
        }
 private void SetupController(BugsController newsController)
 {
     newsController.Request = new HttpRequestMessage();
     newsController.Configuration = new HttpConfiguration();
 }
        public void EditNonExistingBug_ShouldReturn404NotFound()
        {
            // Arrange -> create a new bug
            var data = new BugTrackerDataMock();

            var controller = new BugsController(data);
            this.SetupControllerForTesting(controller, "bugs");

            // Act -> edit the above created bug
            var httpResponse = controller.PatchEditBug(1, new BugBindingEditBugModel() { Description = "Bomba", Status = "Closed" })
              .ExecuteAsync(new CancellationToken()).Result;

            // Assert -> 404 Not found
            Assert.AreEqual(HttpStatusCode.NotFound, httpResponse.StatusCode);
        }
        public void Modify_NonExisting_Bug_With_Correct_Data_Should_Return_404NotFound()
        {
            // Arrange
            var newBugData = new EditBugBindingModel
            {
                Title = "Modified title",
                Description = "Modified description",
                Status = "Closed"
            };

            var mockContext = new Mock<IBugTrackerData>();
            mockContext.Setup(c => c.Bugs)
                .Returns(this.mock.BugRepositoryMock.Object);

            var bugsController = new BugsController(mockContext.Object);
            this.SetupController(bugsController);

            // Act
            var response = bugsController.EditExistingBug(int.MaxValue, newBugData)
                .ExecuteAsync(CancellationToken.None).Result;

            // Assert
            Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode);
        }
        public void EditBugStatusOnly()
        {
            var controller = new BugsController(dataMock.Object);
            SetupController(controller, "Bugs");

            var bugToEdit = new Bug
            {
                Id = 22,
                Title = "Bug4e Tuka",
                Description = "ne6to ne e nared",
                Status = BugStatus.InProgress,
                DateCreated = DateTime.Now
            };

            dataMock.Setup(data => data.Bugs.Find(It.IsAny<object>())).Returns(bugToEdit);

            var updatedBug = new EditBugInputModel { Status = "Closed" };
            var result = controller.EditBug(2, updatedBug).ExecuteAsync(new CancellationToken()).Result;
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
            var resultContent = result.Content.ReadAsStringAsync().Result;
            Assert.IsTrue(resultContent.Contains("Bug #" + bugToEdit.Id + " patched."));
        }