public async void UpdatingTask_ShouldUpdateTaskInDb()
        {
            var db = UnitTestHelper.CreateInMemoryDb();

            await using (var context = db.CreateContext())
            {
                context.Tasks.Should().BeEmpty();

                context.Projects.Add(DataSeeder.NewProject(3));
                context.Tasks.Add(DataSeeder.NewTask(3, 3));

                var taskService = new TaskService(context, UnitTestHelper.Mapper);

                var task = DataSeeder.NewTask(3, 3);
                task.State       = ItemState.Completed;
                task.Name        = "updated name";
                task.Description = "updated description";

                await taskService.UpdateOrThrow(task);
            }

            await using (var context = db.CreateContext())
            {
                context.Tasks.Should().Contain(x =>
                                               x.Id == 3 &&
                                               x.State == ItemState.Completed &&
                                               x.Name == "updated name" &&
                                               x.Description == "updated description");
            }
        }
示例#2
0
        public async Task Post_TaskWithNoProject_ShouldResultInBadRequest()
        {
            using var client = _factory.CreateClient();
            var response = await client.PostAsJsonAsync(Endpoints.TASKS, DataSeeder.NewTask(3, 6)).ConfigureAwait(false);

            response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
        }
        public async Task GetFile()
        {
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

            var dts = new Mock <IDateTimeService>();

            dts.Setup(x => x.UtcNow).Returns(new DateTime(2020, 4, 20));

            var db = UnitTestHelper.CreateInMemoryDb();

            await using (var context = db.CreateContext())
            {
                var task = DataSeeder.NewTask(3, 3);
                task.StartDate = new DateTime(2020, 4, 20);
                task.State     = ItemState.InProgress;

                var project = DataSeeder.NewProject(3);
                project.State = ItemState.InProgress;

                context.Projects.Add(project);
                context.Projects.Add(DataSeeder.NewProject(6));
                context.Projects.Add(DataSeeder.NewProject(9));

                context.Tasks.Add(task);
                context.Tasks.Add(DataSeeder.NewTask(6, 6));
                context.Tasks.Add(DataSeeder.NewTask(9, 9));
                context.SaveChanges();
            }

            await using (var context = db.CreateContext())
            {
                var fileController = new ReportsController(dts.Object, new ReportGeneratorService(context, dts.Object));
                var file           =
                    await fileController.Get(new DateTime(2020, 4, 20, 3, 3, 3)) as FileContentResult;

                file.Should().NotBeNull();

                await using var stream = new MemoryStream(file !.FileContents);
                using var package      = new ExcelPackage(stream);

                package.Workbook.Worksheets.Count.Should().Be(1);
                var page = package.Workbook.Worksheets[0];
                page.Cells[ReportGeneratorService.START_ROW, ReportGeneratorService.START_COLUMN]
                .Text.Should()
                .Be("InProgress projects with tasks by 4/20/2020 3:03:03 AM. Report generated at 4/20/2020 12:00:00 AM");

                page.Dimension.Columns.Should().Be(6);
                page.Dimension.Rows.Should().Be(4);
            }
        }
示例#4
0
        public async Task Post_TaskWithParentProjectTaskId_ThatPointToAnotherProject_ShouldResultInBadRequest()
        {
            using var client = _factory.CreateClient();
            await client.PostAsJsonAsync(Endpoints.PROJECTS, DataSeeder.NewProject(3)).ConfigureAwait(false);

            await client.PostAsJsonAsync(Endpoints.PROJECTS, DataSeeder.NewProject(9)).ConfigureAwait(false);

            await client.PostAsJsonAsync(Endpoints.TASKS, DataSeeder.NewTask(3, 3)).ConfigureAwait(false);

            await client.PostAsJsonAsync(Endpoints.TASKS, DataSeeder.NewTask(9, 9)).ConfigureAwait(false);

            var response = await client.PostAsJsonAsync(Endpoints.TASKS, DataSeeder.NewTask(6, 3, 9)).ConfigureAwait(false);

            response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
        }
        public async void PostingTask_ShouldAddTaskToDb()
        {
            var db = UnitTestHelper.CreateInMemoryDb();

            await using (var context = db.CreateContext())
            {
                context.Tasks.Should().BeEmpty();

                var taskService = new TaskService(context, UnitTestHelper.Mapper);
                await taskService.Add(DataSeeder.NewTask(3, 3));
            }

            await using (var context = db.CreateContext())
            {
                context.Tasks.Should().HaveCount(1);
            }
        }
        public async void SettingTaskStateToComplete_AlsoSetsAllParentProjectsStatesToComplete_WhenAllProjectTasksComplete()
        {
            var db = UnitTestHelper.CreateInMemoryDb(); //ensure that we have same db in the scope of the test

            await using (var context = db.CreateContext())
            {
                //arrange
                var projectService = new ProjectService(context, UnitTestHelper.Mapper);
                await projectService.Add(DataSeeder.NewProject(3));

                await projectService.Add(DataSeeder.NewProject(6, 3));

                await projectService.Add(DataSeeder.NewProject(9, 6));

                var taskService = new TaskService(context, UnitTestHelper.Mapper);
                await taskService.Add(DataSeeder.NewTask(9, 9));

                await taskService.Add(DataSeeder.NewTask(3, 3));

                //act
                var task = DataSeeder.NewTask(9, 9);
                task.State = ItemState.Completed;
                await taskService.UpdateOrThrow(task);
            }

            //assert
            await using (var context = db.CreateContext())
            {
                var projectService = new ProjectService(context, UnitTestHelper.Mapper);

                var project = await projectService.GetOrThrow(9);

                project.State.Should().Be(ItemState.Completed);

                project = await projectService.GetOrThrow(6);

                project.State.Should().Be(ItemState.Completed);

                project = await projectService.GetOrThrow(3);

                project.State.Should().Be(ItemState.Planned);
            }
        }
        public async void SettingTaskStateToInProgress_AlsoSetsAllParentProjectsStatesToInProgress()
        {
            //arrange
            var db = UnitTestHelper.CreateInMemoryDb(); //ensure that we have same db in the scope of test

            await using (var context = db.CreateContext())
            {
                var projectService = new ProjectService(context, UnitTestHelper.Mapper);
                await projectService.Add(DataSeeder.NewProject(3));

                await projectService.Add(DataSeeder.NewProject(6, 3));

                await projectService.Add(DataSeeder.NewProject(9, 6));

                var taskService = new TaskService(context, UnitTestHelper.Mapper);
                await taskService.Add(DataSeeder.NewTask(12, 9));

                //act
                var task = DataSeeder.NewTask(12, 9);
                task.State = ItemState.InProgress;
                await taskService.UpdateOrThrow(task);
            }

            //assert
            await using (var context = db.CreateContext())
            {
                var projectService = new ProjectService(context, UnitTestHelper.Mapper);

                var project = await projectService.GetOrThrow(9).ConfigureAwait(false);

                project.State.Should().Be(ItemState.InProgress);

                project = await projectService.GetOrThrow(6).ConfigureAwait(false);

                project.State.Should().Be(ItemState.InProgress);

                project = await projectService.GetOrThrow(3).ConfigureAwait(false);

                project.State.Should().Be(ItemState.InProgress);
            }
        }
        public async void DeletingTask_SetsSubtasksParentProjectTaskIdToNull()
        {
            var db = UnitTestHelper.CreateInMemoryDb(); //ensure that we have same db in the scope of the test

            await using (var context = db.CreateContext())
            {
                //arrange
                var projectService = new ProjectService(context, UnitTestHelper.Mapper);
                await projectService.Add(DataSeeder.NewProject(3));

                var taskService = new TaskService(context, UnitTestHelper.Mapper);
                await taskService.Add(DataSeeder.NewTask(3, 3));

                await taskService.Add(DataSeeder.NewTask(33, 3, 3));

                await taskService.Add(DataSeeder.NewTask(333, 3, 3));

                //act
                var task = DataSeeder.NewTask(3, 3);
                await taskService.DeleteOrThrow(task.Id);
            }

            //assert
            await using (var context = db.CreateContext())
            {
                var tasksService = new TaskService(context, UnitTestHelper.Mapper);

                var task = await tasksService.Get(33);

                task.ParentTaskId.Should().BeNull();

                task = await tasksService.Get(333);

                task.ParentTaskId.Should().BeNull();
            }
        }