Beispiel #1
0
        /// <summary>
        /// Make fake ResourceVote data for unit testing.
        /// </summary>
        /// <returns>Tag collection</returns>
        public static IEnumerable <ResourceVote> GetResourceVotes()
        {
            var resourceVotes = new List <ResourceVote>();
            var resourceVote  = new ResourceVote()
            {
                Id         = Guid.Parse(UserID),
                ResourceId = Guid.Parse(Id),
                UserId     = Guid.Parse(UserID),
            };

            resourceVotes.Add(resourceVote);

            return(resourceVotes);
        }
        public async Task <IActionResult> PostVoteAsync(Guid id)
        {
            this.logger.LogInformation($"Resource vote- HTTP Post call initiated.");
            this.RecordEvent("Resource vote- HTTP Post call initiated.", RequestType.Initiated);

            if (id == null || id == Guid.Empty)
            {
                this.logger.LogError($"Resource vote- HTTP Post call failed, resource Id is either null or empty guid for userId: {this.UserObjectId}");
                this.RecordEvent("Resource vote- HTTP Post call failed.", RequestType.Failed);
                return(this.BadRequest("Resource Id cannot be null or empty."));
            }

            try
            {
                var resourceVotes = await this.unitOfWork.ResourceVoteRepository.FindAsync(resourceVote => resourceVote.UserId == this.UserObjectId && resourceVote.ResourceId == id);

                if (resourceVotes.Any())
                {
                    this.logger.LogError(StatusCodes.Status409Conflict, $"Resource vote already exists for resource Id: {id} and user Id: {this.UserObjectId}.");
                    this.RecordEvent("Resource vote - HTTP Post call failed.", RequestType.Failed);
                    return(this.Conflict($"Resource vote already exists for resource Id: {id} and user Id: {this.UserObjectId}."));
                }

                ResourceVote vote = new ResourceVote
                {
                    ResourceId = id,
                    UserId     = this.UserObjectId,
                    CreatedOn  = DateTime.UtcNow,
                };

                this.unitOfWork.ResourceVoteRepository.Add(vote);
                await this.unitOfWork.SaveChangesAsync();

                this.logger.LogInformation("Resource vote- HTTP Post call succeeded.");
                this.RecordEvent("Resource vote- HTTP Post call succeeded.", RequestType.Succeeded);

                return(this.Ok(true));
            }
            catch (Exception ex)
            {
                this.RecordEvent("Resource vote- HTTP Post failed.", RequestType.Failed);
                this.logger.LogError(ex, $"Error while saving resource vote details for given resource ID: {id} and userId: {this.UserObjectId}");
                throw;
            }
        }
        public async Task PostVoteAsync_EmptyResourceId_ReturnsBadRequest()
        {
            var          resourceId = Guid.Empty;
            ResourceVote vote       = new ResourceVote
            {
                ResourceId = resourceId,
                UserId     = Guid.Parse(FakeData.UserID),
                CreatedOn  = DateTime.UtcNow,
            };

            this.unitOfWork.Setup(uow => uow.ResourceVoteRepository.Add(It.IsAny <ResourceVote>())).Returns(vote);

            // ACT
            var result = (ObjectResult)await this.resourceController.PostVoteAsync(resourceId);

            // ASSERT
            Assert.AreEqual(result.StatusCode, StatusCodes.Status400BadRequest);
        }
        public async Task PostVoteAsync_SaveResourceVote_ReturnsOkResult()
        {
            var          resourceId = Guid.Parse(FakeData.Id);
            ResourceVote vote       = new ResourceVote
            {
                ResourceId = resourceId,
                UserId     = Guid.Parse(FakeData.UserID),
                CreatedOn  = DateTime.UtcNow,
            };

            this.unitOfWork.Setup(uow => uow.ResourceVoteRepository.Add(It.IsAny <ResourceVote>())).Returns(vote);

            // ACT
            var result = (ObjectResult)await this.resourceController.PostVoteAsync(resourceId);

            var resultValue = result.Value;

            // ASSERT
            Assert.AreEqual(result.StatusCode, StatusCodes.Status200OK);
            Assert.AreEqual(resultValue, true);
        }
        public void PatchAndMapToViewModelTest()
        {
            // ARRANGE
            var resourceEntityModel = this.resourceEntityModel;

            var userDetail = new UserDetail()
            {
                UserId      = Guid.NewGuid(),
                DisplayName = "Test DisplayName",
            };

            IEnumerable <UserDetail> useDetail = new List <UserDetail>()
            {
                userDetail
            };

            var resourceVote = new ResourceVote()
            {
                Id         = Guid.NewGuid(),
                ResourceId = resourceEntityModel.Id,
                UserId     = resourceEntityModel.CreatedBy,
            };
            IEnumerable <ResourceVote> resourceVotes = new List <ResourceVote>()
            {
                resourceVote
            };

            // ACT
            var result = this.resourceMapper.PatchAndMapToViewModel(resourceEntityModel, Guid.NewGuid(), resourceVotes, useDetail);

            // ASSERT
            Assert.AreEqual(result.Id, resourceEntityModel.Id);
            Assert.AreEqual(result.Title, resourceEntityModel.Title);
            Assert.AreEqual(result.Description, resourceEntityModel.Description);
            Assert.AreEqual(result.ImageUrl, resourceEntityModel.ImageUrl);
        }