예제 #1
0
        public async void testAddProjectLog()
        {
            var client = _factory.CreateClient();

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _projectsEnv._stringDict.GetValueOrDefault("token"));
            var actualResponseProjects = await client.testSuccessGetAsync <List <GetProjectDto> >("/api/projects");

            var project    = actualResponseProjects.data.FirstOrDefault(o => o.projectType == PROJECT_TYPE.STAT);
            var projectLog = new CreateProjectLogDto
            {
                log       = "test",
                projectId = project.id,
                timeSpend = 90,
                type      = PROJECT_TYPE.STAT
            };
            var expectedProjectLog = new GetProjectLogDto
            {
                log       = projectLog.log,
                project   = project,
                timeSpend = projectLog.timeSpend,
            };
            var oldStats = await client.testSuccessGetAsync <GetStatsDto>("api/statistics/stats");

            // Act
            var actualResponseProjectLog = await client.testSuccessPostAsync <GetProjectLogDto, CreateProjectLogDto>("api/projectlogs", projectLog);

            // Assert
            actualResponseProjectLog.data.WithDeepEqual(expectedProjectLog).IgnoreSourceProperty(x => x.id);

            var projectLogGet = await client.testSuccessGetAsync <GetProjectLogDto>($"api/projectlogs/{actualResponseProjectLog.data.id}");

            expectedProjectLog.id = actualResponseProjectLog.data.id;
            actualResponseProjectLog.data.ShouldDeepEqual(expectedProjectLog);
        }
        public async Task <ActionResult <ControllerResponse <ProjectLog> > > create(CreateProjectLogDto createProjectLog)
        {
            string userId = _httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier).ToString();

            ProjectLog projectLog = _mapper.Map <ProjectLog>(createProjectLog);

            projectLog.userId  = userId;
            projectLog.project = await _projectService.getByIdAsync(createProjectLog.projectId);

            if (projectLog.project == null)
            {
                throw new ArgumentException("There is no project with corresponding id");
            }
            if (projectLog.project.userId != userId)
            {
                throw new UnauthorizedAccessException("Project don't belong to you");
            }
            if (createProjectLog.projectTaskId != null)
            {
                projectLog.projectTask = await _projectTaskService.getByIdAsync(createProjectLog.projectTaskId);

                if (projectLog.projectTask.userId != userId)
                {
                    throw new UnauthorizedAccessException("ProjectTask don't belong to you");
                }
            }
            if (createProjectLog.type != PROJECT_TYPE.BREAK)
            {
                createProjectLog.type = projectLog.project.projectType;
            }
            projectLog = await _projectLogService.processCreateProjectLog(projectLog);

            return(Created(new Uri($"{Request.Path}/{projectLog.id}", UriKind.Relative), new ControllerResponse <ProjectLog>
            {
                data = projectLog
            }));
        }