public async Task Get_given_id_that_does_not_exist_returns_404()
        {
            repository.Setup(r => r.GetPlacementDescriptionAsync(100)).ThrowsAsync(new ArgumentException());
            var controller = new PlacementDescriptionRepositoryController(repository.Object);

            var actual = await controller.Get(100, true);

            var actionResult = Assert.IsType <ActionResult <PlacementDescriptionDetailsDTO> >(actual);
            var code         = Assert.IsType <StatusCodeResult>(actionResult.Result);

            Assert.Equal(404, code.StatusCode);
        }
        public async Task Get_returns_500_on_internal_error()
        {
            repository.Setup(r => r.GetPlacementDescriptionsAsync()).ThrowsAsync(new Exception());
            var controller = new PlacementDescriptionRepositoryController(repository.Object);

            var actual = await controller.Get(true);

            var actionResult = Assert.IsType <ActionResult <IEnumerable <PlacementDescriptionDetailsDTO> > >(actual);
            var code         = Assert.IsType <StatusCodeResult>(actionResult.Result);

            Assert.Equal(500, code.StatusCode);
        }
        public async Task Delete_returns_500_on_internal_error()
        {
            repository.Setup(r => r.DeletePlacementDescriptionAsync(1)).ThrowsAsync(new Exception());
            var controller = new PlacementDescriptionRepositoryController(repository.Object);

            var actual = await controller.Delete(1, true);

            var actionResult = Assert.IsType <ActionResult <bool> >(actual);
            var code         = Assert.IsType <StatusCodeResult>(actionResult.Result);

            Assert.Equal(500, code.StatusCode);
        }
        public async Task Delete_returns_404_on_not_found()
        {
            repository.Setup(r => r.DeletePlacementDescriptionAsync(10)).ThrowsAsync(new ArgumentException());
            var controller = new PlacementDescriptionRepositoryController(repository.Object);

            var actual = await controller.Delete(10, true);

            var actionResult = Assert.IsType <ActionResult <bool> >(actual);
            var code         = Assert.IsType <StatusCodeResult>(actionResult.Result);

            Assert.Equal(404, code.StatusCode);
        }
        public async Task Delete_returns_200_and_true()
        {
            repository.Setup(r => r.DeletePlacementDescriptionAsync(1)).ReturnsAsync(true);
            var controller = new PlacementDescriptionRepositoryController(repository.Object);

            var actual = await controller.Delete(1, true);

            var actionResult   = Assert.IsType <ActionResult <bool> >(actual);
            var okResult       = Assert.IsType <OkObjectResult>(actionResult.Result);
            var hasBeenDeleted = Assert.IsType <bool>(okResult.Value);

            Assert.Equal(200, okResult.StatusCode);
            Assert.True(hasBeenDeleted);
        }
        public async Task Update_returns_500_on_internal_error()
        {
            var description = new UpdatePlacementDescriptionDTO {
                Degree = Degree.Bachelor
            };

            repository.Setup(r => r.UpdatePlacementDescriptionAsync(description)).ThrowsAsync(new Exception());
            var controller = new PlacementDescriptionRepositoryController(repository.Object);

            var actual = await controller.Update(description, true);

            var actionResult = Assert.IsType <ActionResult <bool> >(actual);
            var code         = Assert.IsType <StatusCodeResult>(actionResult.Result);

            Assert.Equal(500, code.StatusCode);
        }
        public async Task Create_returns_200_and_id_of_created_student()
        {
            var nextMockedId = 10;
            var description  = new CreatePlacementDescriptionDTO();

            repository.Setup(r => r.CreatePlacementDescriptionAsync(description)).ReturnsAsync(nextMockedId);
            var controller = new PlacementDescriptionRepositoryController(repository.Object);

            var actual = await controller.Create(description, true);

            var actionResult = Assert.IsType <ActionResult <int> >(actual);
            var okResult     = Assert.IsType <OkObjectResult>(actionResult.Result);
            var actualId     = Assert.IsType <int>(okResult.Value);

            Assert.Equal(200, okResult.StatusCode);
            Assert.Equal(nextMockedId, actualId);
        }
        public async Task Update_returns_200_and_true()
        {
            var description = new UpdatePlacementDescriptionDTO {
                Degree = Degree.Bachelor
            };

            repository.Setup(r => r.UpdatePlacementDescriptionAsync(description)).ReturnsAsync(true);
            var controller = new PlacementDescriptionRepositoryController(repository.Object);

            var actual = await controller.Update(description, true);

            var actionResult   = Assert.IsType <ActionResult <bool> >(actual);
            var okResult       = Assert.IsType <OkObjectResult>(actionResult.Result);
            var hasBeenUpdated = Assert.IsType <bool>(okResult.Value);

            Assert.Equal(200, okResult.StatusCode);
            Assert.True(hasBeenUpdated);
        }
        public async Task Get_given_id_returns_200_and_student()
        {
            var description = new PlacementDescriptionDetailsDTO {
                Id = 1, KeywordNames = new []   {
                    "UML"
                }, Degree = Degree.Bachelor, MinSalary = 100, MinWorkingHours = 5, MaxWorkingHours = 20, Agreement = false, Location = "Nowhere"
            };

            repository.Setup(r => r.GetPlacementDescriptionAsync(description.Id)).ReturnsAsync(description);
            var controller = new PlacementDescriptionRepositoryController(repository.Object);

            var actual = await controller.Get(1, true);

            var actionResult      = Assert.IsType <ActionResult <PlacementDescriptionDetailsDTO> >(actual);
            var okResult          = Assert.IsType <OkObjectResult>(actionResult.Result);
            var actualDescription = Assert.IsType <PlacementDescriptionDetailsDTO>(okResult.Value);

            Assert.Equal(200, okResult.StatusCode);
            Assert.Equal(description, actualDescription);
        }
        public async Task Get_returns_200_and_students()
        {
            var descriptions = new []
            {
                new PlacementDescriptionDetailsDTO {
                    Id = 1
                },
                new PlacementDescriptionDetailsDTO {
                    Id = 2
                }
            };

            repository.Setup(r => r.GetPlacementDescriptionsAsync()).ReturnsAsync(descriptions);
            var controller = new PlacementDescriptionRepositoryController(repository.Object);

            var actual = await controller.Get(true);

            var actionResult       = Assert.IsType <ActionResult <IEnumerable <PlacementDescriptionDetailsDTO> > >(actual);
            var okResult           = Assert.IsType <OkObjectResult>(actionResult.Result);
            var actualDescriptions = Assert.IsType <List <PlacementDescriptionDetailsDTO> >(okResult.Value);

            Assert.Equal(200, okResult.StatusCode);
            Assert.Equal(descriptions.Length, actualDescriptions.Count());
        }