Beispiel #1
0
        public async Task On_Task_Finish_All_Documents_Are_In_Status_Of_BLOCAT(DocumentTaskStatus status, bool isBlocked)
        {
            var user = new User {
                UserGroup = new UserGroup()
            };
            var dbContextOptions = CreateNewContextOptions();

            using (var context = new ApplicationDbContext(dbContextOptions))
            {
                context.Users.Add(user);
                context.DocumentTasks.Add(new DocumentTask
                {
                    DocumentTaskStates = new List <DocumentTaskState> {
                        new DocumentTaskState
                        {
                            DocumentTaskStatus   = DocumentTaskStatus.Accepted,
                            DocumentTaskTypePath = new DocumentTaskTypePath()
                        }
                    },
                    Documents = new List <Document> {
                        new Document {
                            DocumentStates = new List <DocumentState> {
                                new DocumentState()
                            }
                        },
                        new Document {
                            DocumentStates = new List <DocumentState> {
                                new DocumentState()
                            }
                        }
                    }
                });

                await context.SaveChangesAsync();
            }

            using (var context = new ApplicationDbContext(dbContextOptions))
            {
                var service = new DocumentTasksService(context);
                await service.ChangeStatus(1, status);

                await context.SaveChangesAsync();
            }

            using (var context = new ApplicationDbContext(dbContextOptions))
            {
                var documents = await context.Documents.Include(it => it.DocumentStates).ToListAsync();

                if (isBlocked)
                {
                    Assert.True(documents.All(it => it.DocumentStates.Last().DocumentStatus == DocumentStatus.Blocat));
                }
                else
                {
                    Assert.False(documents.All(it => it.DocumentStates.Last().DocumentStatus == DocumentStatus.Blocat));
                }
            }
        }
Beispiel #2
0
        public async Task ChangeStatus(int idDocumentTask, DocumentTaskStatus documentStatus)
        {
            var now  = DateTime.Now;
            var task = await dbContext
                       .DocumentTasks
                       .Include(it => it.DocumentTaskStates).ThenInclude(it => it.DocumentTaskTypePath)
                       .FirstAsync(it => it.IdDocumentTask == idDocumentTask);

            task.LastModified = now;

            var lastState  = task.DocumentTaskStates.Last();
            var idNextPath = lastState.DocumentTaskTypePath?.IdNextPath;

            var state = new DocumentTaskState
            {
                IdDocumentTask         = idDocumentTask,
                StateDate              = now,
                DocumentTaskStatus     = documentStatus,
                IdDocumentTaskTypePath = idNextPath == null ? null : lastState.IdDocumentTaskTypePath
            };

            dbContext.DocumentTaskStates.Add(state);

            if (documentStatus == DocumentTaskStatus.Accepted && idNextPath.HasValue)
            {
                dbContext.DocumentTaskStates.Add(new DocumentTaskState
                {
                    IdDocumentTask         = idDocumentTask,
                    StateDate              = now,
                    DocumentTaskStatus     = DocumentTaskStatus.RequireAction,
                    IdDocumentTaskTypePath = idNextPath
                });
            }

            if (!idNextPath.HasValue && documentStatus == DocumentTaskStatus.Accepted || documentStatus == DocumentTaskStatus.Denied)
            {
                var documents = await dbContext
                                .Documents
                                .Where(it => it.IdDocumentTask == idDocumentTask)
                                .Select(it => it.IdDocument)
                                .ToListAsync();

                var service = new DocumentsService(dbContext);
                foreach (var idDocument in documents)
                {
                    await service.ChangeStatus(idDocument, DocumentStatus.Blocat);
                }
            }
        }
Beispiel #3
0
        public async Task Can_Change_Status(DocumentTaskStatus taskStatus, DocumentTaskStatus expectedStatus, int count)
        {
            var now = DateTime.Now;
            var dbContextOptions = CreateNewContextOptions();

            using (var context = new ApplicationDbContext(dbContextOptions))
            {
                context.DocumentTasks.Add(new DocumentTask
                {
                    LastModified       = now,
                    DocumentTaskStates = new List <DocumentTaskState> {
                        new DocumentTaskState
                        {
                            DocumentTaskStatus   = DocumentTaskStatus.RequireAction,
                            DocumentTaskTypePath = new DocumentTaskTypePath {
                                NextPath = new DocumentTaskTypePath()
                            }
                        }
                    }
                });
                await context.SaveChangesAsync();
            }

            using (var context = new ApplicationDbContext(dbContextOptions))
            {
                var service = new DocumentTasksService(context);
                await service.ChangeStatus(1, taskStatus);

                await context.SaveChangesAsync();
            }

            using (var context = new ApplicationDbContext(dbContextOptions))
            {
                var task = await context.DocumentTasks.Include(it => it.DocumentTaskStates).FirstAsync();

                var newState = task.DocumentTaskStates.Last();

                Assert.NotEqual(now, task.LastModified);
                Assert.Equal(count, task.DocumentTaskStates.Count);
                Assert.Equal(expectedStatus, newState.DocumentTaskStatus);
            }
        }