public void ReadFolder_FolderDoesNotExist_ThrowsNotFoundRequestException()
        {
            var query        = new ReadFolderQuery(1);
            var queryHandler = ReadFolderQueryHandlerFactory.CreateForNotFoundRepositoryException();

            Should.Throw <NotFoundRequestException>(
                async() => await queryHandler.Handle(query, CancellationToken.None));
        }
        public async Task ReadFolder_FolderExists_FolderIsRetrieved()
        {
            var folderSeed   = new Folder(1, DateTime.UtcNow, "folderName", 2);
            var query        = new ReadFolderQuery(folderSeed.Id);
            var queryHandler = ReadFolderQueryHandlerFactory.Create(folderSeed);

            var response = await queryHandler.Handle(query, CancellationToken.None);

            response.ShouldSatisfyAllConditions(
                () => response.Id.ShouldBe(folderSeed.Id),
                () => response.CreationDate.ShouldBe(folderSeed.CreationDate),
                () => response.Name.ShouldBe(folderSeed.Name),
                () => response.ParentId.ShouldBe(folderSeed.ParentId)
                );
        }
        public async Task <ActionResult <FolderResource> > Get(int id)
        {
            try
            {
                var query    = new ReadFolderQuery(id);
                var response = await mediator.Send(query);

                var folderResource = new FolderResource(response);
                folderResource.EnrichWithLinks(this);

                return(folderResource);
            }
            catch (NotFoundRequestException)
            {
                return(NotFound());
            }
        }
        public async Task <ActionResult <FolderResource> > Post([FromBody] FolderResource folder)
        {
            try
            {
                var command  = new CreateFolderCommand(folder.Name);
                var folderId = await mediator.Send(command);

                var query    = new ReadFolderQuery(folderId);
                var response = await mediator.Send(query);

                var folderResource = new FolderResource(response);
                folderResource.EnrichWithLinks(this);

                return(folderResource);
            }
            catch (FolderNameMustBeUniqueInParentRequestException)
            {
                return(this.BadRequest(ApiErrors.FolderNameMustBeUniqueInParent));
            }
        }