예제 #1
0
        public async Task Should_Create_With_Minimum_Fields_Defined()
        {
            // Arrange
            var createDto = new ProjectCreateDto
            {
                Title      = "New Project",
                ShortTitle = "Shorty",
                Code       = "123XYZ,",
            };

            var expectedDto = new ProjectDto
            {
                Title       = createDto.Title,
                ShortTitle  = createDto.ShortTitle,
                Code        = createDto.Code,
                IsCompleted = false,
                CreatedBy   = _staff.DisplayName,
                CreatedAt   = FakeDateTime.UtcNow
            };

            // Act
            HttpResponseMessage responseMessage = await _authenticatedServer
                                                  .CreateClient()
                                                  .AuthenticateWith(_staff)
                                                  .PostAsync(ApiEndpoints.ProjectsController.Post(), BuildStringContent(createDto));

            // Assert
            responseMessage.StatusCode.Should().Be(HttpStatusCode.Created);
            ProjectDto result = await DeserializeResponseMessageAsync <ProjectDto>(responseMessage);

            result.Should().BeEquivalentTo(expectedDto, opt => opt.Excluding(r => r.Id));
            result.Id.Should().NotBeEmpty();
            responseMessage.Headers.Location.AbsolutePath.Should().Be($"/{ApiEndpoints.ProjectsController.Get(result.Id)}");
        }
        private async Task CheckProjectsAddedToDatabase(ProjectDto project, int expectedCount)
        {
            var context           = GetService <TimeTrackingDbContext>();
            var projectInDatabase = await context.Projects.LastAsync();

            context.Projects.Should().HaveCount(expectedCount);
            project.Should().BeEquivalentTo(projectInDatabase, opt => opt.ExcludingMissingMembers());
        }
예제 #3
0
        public void Should_Map()
        {
            // Arrange
            Domain.Entities.Project project = FakeProjects.RockingXMas;
            project.Urls.Remove(project.Urls.First());
            ProjectDto expectedDto = ProjectDtoData.RockingXMasForPerformer;

            // Act
            ProjectDto dto = _mapper.Map <ProjectDto>(project);

            // Assert
            dto.Should().BeEquivalentTo(expectedDto);
        }
예제 #4
0
        public async Task Should_Create_With_All_Fields_Defined()
        {
            // Arrange
            var createDto = new ProjectCreateDto
            {
                Title       = "New Project",
                ShortTitle  = "ShortName",
                Description = "New project description",
                Code        = "0815XY",
                TypeId      = SelectValueMappingSeedData.ProjectTypeMappings[0].Id,
                GenreId     = SelectValueMappingSeedData.ProjectGenreMappings[0].Id,
                StartDate   = new DateTime(2021, 01, 01),
                EndDate     = new DateTime(2021, 01, 31),
                StateId     = SelectValueMappingSeedData.ProjectStateMappings[0].Id,
                ParentId    = ProjectSeedData.HoorayForHollywood.Id,
            };

            var expectedDto = new ProjectDto
            {
                Title       = createDto.Title,
                ShortTitle  = createDto.ShortTitle,
                Description = createDto.Description,
                Code        = createDto.Code,
                TypeId      = createDto.TypeId,
                GenreId     = createDto.GenreId,
                StartDate   = createDto.StartDate,
                EndDate     = createDto.EndDate,
                StateId     = createDto.StateId,
                ParentId    = createDto.ParentId,
                IsCompleted = false,
                CreatedBy   = _staff.DisplayName,
                CreatedAt   = FakeDateTime.UtcNow
            };

            // Act
            HttpResponseMessage responseMessage = await _authenticatedServer
                                                  .CreateClient()
                                                  .AuthenticateWith(_staff)
                                                  .PostAsync(ApiEndpoints.ProjectsController.Post(), BuildStringContent(createDto));

            // Assert
            responseMessage.StatusCode.Should().Be(HttpStatusCode.Created);
            ProjectDto result = await DeserializeResponseMessageAsync <ProjectDto>(responseMessage);

            result.Should().BeEquivalentTo(expectedDto, opt => opt.Excluding(r => r.Id));
            result.Id.Should().NotBeEmpty();
            responseMessage.Headers.Location.AbsolutePath.Should().Be($"/{ApiEndpoints.ProjectsController.Get(result.Id)}");
        }
예제 #5
0
        public async Task Should_Get_By_Id()
        {
            // Arrange
            ProjectDto expectedProject = ProjectDtoData.HoorayForHollywood;

            // Act
            HttpResponseMessage responseMessage = await _authenticatedServer
                                                  .CreateClient()
                                                  .AuthenticateWith(_performer)
                                                  .GetAsync(ApiEndpoints.ProjectsController.Get(expectedProject.Id));

            // Assert
            responseMessage.StatusCode.Should().Be(HttpStatusCode.OK);
            ProjectDto result = await DeserializeResponseMessageAsync <ProjectDto>(responseMessage);

            result.Should().BeEquivalentTo(expectedProject);
        }
예제 #6
0
        public async Task Should_Modify()
        {
            // Arrange
            Project    projectToModify = ProjectSeedData.HoorayForHollywood;
            HttpClient client          = _authenticatedServer
                                         .CreateClient()
                                         .AuthenticateWith(_staff);

            var modifyDto = new ProjectModifyBodyDto
            {
                Title       = "changed " + projectToModify.Title,
                ShortTitle  = "changed " + projectToModify.ShortTitle,
                Description = "changed " + projectToModify.Description,
                Code        = "X-" + projectToModify.Code,
                TypeId      = SelectValueMappingSeedData.ProjectTypeMappings[2].Id,
                GenreId     = SelectValueMappingSeedData.ProjectGenreMappings[2].Id,
                StartDate   = new DateTime(2021, 02, 02),
                EndDate     = new DateTime(2021, 02, 28),
                StateId     = SelectValueMappingSeedData.ProjectStateMappings[2].Id,
                ParentId    = ProjectSeedData.RockingXMas.Id
            };

            // Act
            HttpResponseMessage responseMessage = await client
                                                  .PutAsync(ApiEndpoints.ProjectsController.Put(projectToModify.Id), BuildStringContent(modifyDto));

            // Assert
            responseMessage.StatusCode.Should().Be(HttpStatusCode.NoContent);

            // check now, if modification really did make it into the database. Fetch the (now modified) project again via GetById

            // Act
            responseMessage = await client
                              .GetAsync(ApiEndpoints.ProjectsController.Get(projectToModify.Id));

            // Assert
            responseMessage.StatusCode.Should().Be(HttpStatusCode.OK);
            ProjectDto result = await DeserializeResponseMessageAsync <ProjectDto>(responseMessage);

            result.Should().BeEquivalentTo(modifyDto);
            result.Id.Should().Be(projectToModify.Id);
            result.ModifiedBy.Should().Be(_staff.DisplayName);
            result.ModifiedAt.Should().Be(FakeDateTime.UtcNow);
        }