public async Task AddReviewAsyncAllReviewersAddedTheirReviewsWhileRatingIsLowSetAcceptedStatusAndSendEmail() { var reviewerId = 1u; var reviewMsg = _faker.Rant.Review(); var rating = _faker.Random.Byte(1, 3); IFormFile reviewFile = null; var scientificWorkId = 2u; var version = new ScientificWorkFile() { Id = 3, Reviews = new List <Review>() }; var reviewer = new User() { Id = reviewerId }; var reviewerCount = 3; var reviewsCount = 3; var authorEmail = _faker.Internet.Email(); var ratingSum = 9; var scientificWork = new ScientificWork() { Status = StatusEnum.UnderReview }; _scientificWorkRepositoryMock.Setup(x => x.GetEmailOfAuthorByWorkIdAsync(scientificWorkId)).ReturnsAsync(authorEmail); _scientificWorkRepositoryMock.Setup(x => x.GetWorkByIdAsync(scientificWorkId)).ReturnsAsync(scientificWork); _scientificWorkRepositoryMock.Setup(x => x.ChangeStatusAsync(It.Is <ScientificWork>(y => y.Status == StatusEnum.Accepted))); _scientificWorkFileRepositoryMock.Setup(x => x.GetNewestVersionWithReviewsAsync(scientificWorkId)).ReturnsAsync(version); _scientificWorkFileRepositoryMock.Setup(x => x.GetReviewsCountInNewestVersion(scientificWorkId)).Returns(reviewsCount); _scientificWorkFileRepositoryMock.Setup(x => x.GetRatingSumFromVersion(version.Id)).ReturnsAsync(ratingSum); _scientificWorkFileRepositoryMock.Setup(x => x.AddRatingAsync(It.Is <ScientificWorkFile>(y => y.Rating == 3))); _userStoreMock.Setup(x => x.FindByIdAsync(reviewerId.ToString(), CancellationToken.None)).ReturnsAsync(reviewer); _reviewRepositoryMock.Setup(x => x.AddReviewAsync(It.Is <Review>(y => y.Reviewer == reviewer && y.Rating == rating && y.VersionOfScientificWork == version))); _reviewersWorkRepositoryMock.Setup(x => x.GetReviewersCount(scientificWorkId)).Returns(reviewerCount); _reviewersWorkRepositoryMock.Setup(x => x.IsReviewerOfScientificWorkAsync(reviewerId, scientificWorkId)).ReturnsAsync(true); _emailSenderMock.Setup(x => x.SendToAuthorWorkGotAcceptedAsync(authorEmail, scientificWorkId)); var err = await Record.ExceptionAsync(async () => await _service.AddReviewAsync(reviewerId, reviewMsg, reviewFile, rating, scientificWorkId)); err.Should().BeNull(); _emailSenderMock.Verify(x => x.SendToAuthorWorkGotAcceptedAsync(authorEmail, scientificWorkId), Times.Once); _scientificWorkFileRepositoryMock.Verify(x => x.AddRatingAsync(It.Is <ScientificWorkFile>(y => y.Rating == 3)), Times.Once); _scientificWorkRepositoryMock.Verify(x => x.ChangeStatusAsync(It.Is <ScientificWork>(y => y.Status == StatusEnum.Accepted)), Times.Once); }
public async Task AddReviewAsyncWorkAlreadyHaveReviewFromThisUserDoNothing() { var reviewerId = 1u; var scientificWorkId = 2u; var reviewMsg = _faker.Rant.Review(); var rating = _faker.Random.Byte(1, 3); var reviewFile = new FormFile(null, _faker.Random.Long(), _faker.Random.Long(), _faker.Internet.UserName(), _faker.System.FileName("pdf")); var scientificWork = new ScientificWorkFile() { Reviews = new List <Review>() { new Review() { Reviewer = new User() { Id = reviewerId } } } }; _reviewersWorkRepositoryMock.Setup(x => x.IsReviewerOfScientificWorkAsync(reviewerId, scientificWorkId)).ReturnsAsync(true); _scientificWorkFileRepositoryMock.Setup(x => x.GetNewestVersionWithReviewsAsync(scientificWorkId)).ReturnsAsync(scientificWork); var err = await Record.ExceptionAsync(async () => await _service.AddReviewAsync(reviewerId, reviewMsg, reviewFile, rating, scientificWorkId)); err.Should().BeNull(); _reviewRepositoryMock.Verify(x => x.AddReviewAsync(It.IsAny <Review>()), Times.Never); _emailSenderMock.VerifyNoOtherCalls(); }
public async Task GetStreamOfScientificWorkAsyncReturnStreamOfFile() { var scientificWorkId = 1u; var scientificFileWork = new ScientificWorkFile() { Id = 1, FileName = _faker.System.FileName("pdf") }; Stream returnedStream = null; var expectedWorkStream = new MemoryStream(Encoding.UTF8.GetBytes(_faker.Random.String(7))); _scientificWorkFileRepositoryMock.Setup(x => x.GetNewestVersionAsync(scientificFileWork.Id)).ReturnsAsync(scientificFileWork); _fileManagerMock.Setup(x => x.GetStreamOfFile(scientificFileWork.FileName)).Returns(expectedWorkStream); var err = await Record.ExceptionAsync(async () => returnedStream = await _service.GetStreamOfScientificWorkAsync(scientificWorkId)); err.Should().BeNull(); returnedStream.Should().NotBeNull(); returnedStream.Should().BeEquivalentTo(expectedWorkStream); _scientificWorkFileRepositoryMock.Verify(x => x.GetNewestVersionAsync(scientificWorkId), Times.Once); }
public async Task AddVersionAsyncAddNextVersionsSuccess() { uint userId = 1; var file = new FormFile(null, _faker.Random.Long(), _faker.Random.Long(), _faker.Internet.UserName(), _faker.System.FileName("pdf")); var randomNameOfFile = _faker.System.FileName("pdf"); byte versionNumber = 1; var scientificWork = new ScientificWork() { Id = 1, Name = _faker.Commerce.ProductName(), Description = _faker.Commerce.ProductDescription(), Status = StatusEnum.UnderReview }; var newVersion = new ScientificWorkFile() { Version = (byte)(versionNumber + 1), FileName = randomNameOfFile, ScientificWork = scientificWork }; var reviewerEmails = Enumerable.Range(1, 3).Select(_ => _faker.Internet.Email()); _scientificWorkRepositoryMock.Setup(x => x.GetNumberOfVersionsByAuthorIdAsync(userId)).ReturnsAsync(versionNumber); _scientificWorkRepositoryMock.Setup(x => x.GetByAuthorIdAsync(userId)).ReturnsAsync(scientificWork); _scientificWorkRepositoryMock.Setup(x => x.ChangeStatusAsync(It.Is <ScientificWork>(y => y.Id == scientificWork.Id && y.Status == StatusEnum.UnderReview))); _reviewerScientificWorkRepositoryMock.Setup(x => x.GetEmailsOfReviewersByWorkIdAsync(scientificWork.Id)).ReturnsAsync(reviewerEmails); _scientificWorkFileRepositoryMock.Setup(x => x.AddAsync(It.Is <ScientificWorkFile>(y => y.Version == newVersion.Version && y.FileName == newVersion.FileName && y.ScientificWork == newVersion.ScientificWork))); _fileManagerMock.Setup(x => x.SaveFileAsync(file)).ReturnsAsync(randomNameOfFile); _emailSenderMock.Setup(x => x.SendAddedNewVersionEmailAsync(It.IsIn(reviewerEmails), scientificWork.Id)); var err = await Record.ExceptionAsync(async () => await _service.AddVersionAsync(userId, file)); err.Should().BeNull(); _scientificWorkRepositoryMock.Verify(x => x.ChangeStatusAsync(It.Is <ScientificWork>(x => x.Status == StatusEnum.UnderReview)), Times.Once); _scientificWorkRepositoryMock.Verify(x => x.GetNumberOfVersionsByAuthorIdAsync(userId), Times.Once); _scientificWorkFileRepositoryMock.Verify(x => x.AddAsync(It.Is <ScientificWorkFile>(y => y.Version == newVersion.Version && y.FileName == newVersion.FileName && y.ScientificWork == newVersion.ScientificWork)), Times.Once); _emailSenderMock.Verify(x => x.SendAddedNewVersionEmailAsync(It.IsAny <string>(), scientificWork.Id), Times.Exactly(reviewerEmails.Count())); }
public async Task AddReviewAsyncAddReviewIsNotTheLastSaveReviewFile() { var reviewerId = 1u; var scientificWorkId = 2u; var reviewMsg = _faker.Rant.Review(); var rating = _faker.Random.Byte(1, 3); var authorEmail = _faker.Internet.Email(); var randomFileName = _faker.System.FileName(".pdf"); IFormFile reviewFile = new FormFile(null, 0, 0, "", ""); var version = new ScientificWorkFile() { Reviews = new List <Review>() }; var reviewer = new User() { Id = reviewerId }; var reviewerCount = 3; var reviewsCount = 1; _scientificWorkFileRepositoryMock.Setup(x => x.GetNewestVersionWithReviewsAsync(scientificWorkId)).ReturnsAsync(version); _scientificWorkFileRepositoryMock.Setup(x => x.GetReviewsCountInNewestVersion(scientificWorkId)).Returns(reviewsCount); _userStoreMock.Setup(x => x.FindByIdAsync(reviewerId.ToString(), CancellationToken.None)).ReturnsAsync(reviewer); _fileManagerMock.Setup(x => x.SaveFileAsync(reviewFile)).ReturnsAsync(randomFileName); _reviewersWorkRepositoryMock.Setup(x => x.GetReviewersCount(scientificWorkId)).Returns(reviewerCount); _reviewersWorkRepositoryMock.Setup(x => x.IsReviewerOfScientificWorkAsync(reviewerId, scientificWorkId)).ReturnsAsync(true); _reviewRepositoryMock.Setup(x => x.AddReviewAsync(It.Is <Review>(y => y.Reviewer == reviewer && y.Rating == rating && y.File == randomFileName && y.VersionOfScientificWork == version))); var err = await Record.ExceptionAsync(async () => await _service.AddReviewAsync(reviewerId, reviewMsg, reviewFile, rating, scientificWorkId)); err.Should().BeNull(); _scientificWorkFileRepositoryMock.Verify(x => x.GetRatingSumFromVersion(It.IsAny <uint>()), Times.Never); _fileManagerMock.Verify(x => x.SaveFileAsync(reviewFile), Times.Once); _reviewRepositoryMock.Verify(x => x.AddReviewAsync(It.Is <Review>(y => y.Reviewer == reviewer && y.Rating == rating && y.File == randomFileName && y.VersionOfScientificWork == version)), Times.Once); }
public async Task AddVersionAsyncAddFirstSuccess() { var userId = 1u; var file = new FormFile(null, _faker.Random.Long(), _faker.Random.Long(), _faker.Internet.UserName(), _faker.System.FileName("pdf")); var randomNameOfFile = _faker.System.FileName("pdf"); var scientificWork = new ScientificWork() { Id = 1, Name = _faker.Commerce.ProductName(), Description = _faker.Commerce.ProductDescription(), Status = StatusEnum.WaitingForDrawOfReviewers }; var newVersion = new ScientificWorkFile() { Version = 1, FileName = randomNameOfFile, ScientificWork = scientificWork }; _scientificWorkRepositoryMock.Setup(x => x.GetByAuthorIdAsync(userId)).ReturnsAsync(scientificWork); _fileManagerMock.Setup(x => x.SaveFileAsync(file)).ReturnsAsync(randomNameOfFile); _scientificWorkFileRepositoryMock.Setup(x => x.AddAsync(It.Is <ScientificWorkFile>(y => y.Version == newVersion.Version && y.FileName == newVersion.FileName && y.ScientificWork == newVersion.ScientificWork))); var err = await Record.ExceptionAsync(async () => await _service.AddVersionAsync(userId, file, true)); err.Should().BeNull(); _scientificWorkRepositoryMock.Verify(x => x.ChangeStatusAsync(It.IsAny <ScientificWork>()), Times.Never); _scientificWorkRepositoryMock.Verify(x => x.GetNumberOfVersionsByAuthorIdAsync(It.IsAny <uint>()), Times.Never); _emailSenderMock.Verify(x => x.SendAddedNewVersionEmailAsync(It.IsAny <string>(), It.IsAny <uint>()), Times.Never); _scientificWorkFileRepositoryMock.Verify(x => x.AddAsync(It.Is <ScientificWorkFile>(y => y.Version == newVersion.Version && y.FileName == newVersion.FileName && y.ScientificWork == newVersion.ScientificWork)), Times.Once); }
public async Task AddVersionAsync(uint userId, IFormFile workFile, bool isFirstVersion = false) { byte versionNumber = 1; if (!isFirstVersion) { versionNumber = await _scientificWorkRepository.GetNumberOfVersionsByAuthorIdAsync(userId); versionNumber++; } var scientificWork = await _scientificWorkRepository.GetByAuthorIdAsync(userId); var workName = await _fileManager.SaveFileAsync(workFile); var versionOfWork = new ScientificWorkFile() { Version = versionNumber, FileName = workName, DateAdd = DateTime.Now, ScientificWork = scientificWork }; await _scientificWorkFileRepository.AddAsync(versionOfWork); // change status when the work reviewed before if (!isFirstVersion) { scientificWork.Status = StatusEnum.UnderReview; await _scientificWorkRepository.ChangeStatusAsync(scientificWork); var emailsOfReviewers = await _reviewersWorkRepository.GetEmailsOfReviewersByWorkIdAsync(scientificWork.Id); foreach (var email in emailsOfReviewers) { await _emailSender.SendAddedNewVersionEmailAsync(email, scientificWork.Id); } } }
public async Task AddRatingAsync(ScientificWorkFile scientificWorkFile) { _context.ScientificWorkFiles.Update(scientificWorkFile); await _context.SaveChangesAsync(); }
public async Task AddAsync(ScientificWorkFile scientificWorkFile) { await _context.ScientificWorkFiles.AddAsync(scientificWorkFile); await _context.SaveChangesAsync(); }
public async Task AddReviewAsyncAllReviewersAddedReviewSetAcceptedStatus() { var reviewerId = 1u; var reviewMsg = "This is my review!"; var reviewFile = new FormFile(null, 42534, 2345, "NameHaHa", "FileNameHueHue"); var rating = (byte)3; var scientificWorkId = 2u; var version = new ScientificWorkFile() { Id = 3, Reviews = new List <Review>() }; var reviewer = new User() { Id = reviewerId }; var randomFileName = "afertgh35he.png"; var reviewerCount = 3; var reviewsCount = 3; var authorEmail = "*****@*****.**"; var ratingSum = 9; var scientificWork = new ScientificWork() { Status = StatusEnum.UnderReview }; _scientificWorkRepositoryMock.Reset(); _scientificWorkRepositoryMock.Setup(x => x.IsReviewerOfScientificWorkAsync(reviewerId, scientificWorkId)).ReturnsAsync(true); _scientificWorkRepositoryMock.Setup(x => x.GetEmailOfAuthorByWorkIdAsync(scientificWorkId)).ReturnsAsync(authorEmail); _scientificWorkRepositoryMock.Setup(x => x.GetWorkByIdAsync(scientificWorkId)).ReturnsAsync(scientificWork); _scientificWorkRepositoryMock.Setup(x => x.ChangeStatusAsync(It.Is <ScientificWork>(y => y.Status == StatusEnum.Accepted))); _scientificWorkFileRepositoryMock.Reset(); _scientificWorkFileRepositoryMock.Setup(x => x.GetNewestVersionWithReviewsAsync(scientificWorkId)).ReturnsAsync(version); _scientificWorkFileRepositoryMock.Setup(x => x.GetReviewsCountInNewestVersion(scientificWorkId)).Returns(reviewsCount); _scientificWorkFileRepositoryMock.Setup(x => x.GetRatingSumFromVersion(version.Id)).ReturnsAsync(ratingSum); _scientificWorkFileRepositoryMock.Setup(x => x.AddRatingAsync(It.Is <ScientificWorkFile>(y => y.Rating == 3))); _userStoreMock.Reset(); _userStoreMock.Setup(x => x.FindByIdAsync(reviewerId.ToString(), CancellationToken.None)).ReturnsAsync(reviewer); _fileManagerMock.Reset(); _fileManagerMock.Setup(x => x.SaveFileAsync(reviewFile)).ReturnsAsync(randomFileName); _reviewRepositoryMock.Reset(); _reviewRepositoryMock.Setup(x => x.AddReviewAsync(It.Is <Review>(y => y.Reviewer == reviewer && y.Rating == rating && y.File == randomFileName && y.VersionOfScientificWork == version))); _reviewersWorkRepositoryMock.Reset(); _reviewersWorkRepositoryMock.Setup(x => x.GetReviewersCount(scientificWorkId)).Returns(reviewerCount); _emailSenderMock.Reset(); _emailSenderMock.Setup(x => x.SendToAuthorWorkGotAcceptedAsync(authorEmail, scientificWorkId)); var err = await Record.ExceptionAsync(async () => await _service.AddReviewAsync(reviewerId, reviewMsg, reviewFile, rating, scientificWorkId)); err.Should().BeNull(); _scientificWorkRepositoryMock.Verify(x => x.IsReviewerOfScientificWorkAsync(reviewerId, scientificWorkId), Times.Once); _scientificWorkRepositoryMock.Verify(x => x.GetEmailOfAuthorByWorkIdAsync(scientificWorkId), Times.Once); _scientificWorkRepositoryMock.Verify(x => x.GetWorkByIdAsync(scientificWorkId), Times.Once); _scientificWorkRepositoryMock.Verify(x => x.ChangeStatusAsync(It.Is <ScientificWork>(y => y.Status == StatusEnum.Accepted)), Times.Once); _scientificWorkFileRepositoryMock.Verify(x => x.GetNewestVersionWithReviewsAsync(scientificWorkId), Times.Once); _scientificWorkFileRepositoryMock.Verify(x => x.GetReviewsCountInNewestVersion(scientificWorkId), Times.Once); _scientificWorkFileRepositoryMock.Verify(x => x.GetRatingSumFromVersion(version.Id), Times.Once); _scientificWorkFileRepositoryMock.Verify(x => x.AddRatingAsync(It.Is <ScientificWorkFile>(y => y.Rating == 3)), Times.Once); _userStoreMock.Verify(x => x.FindByIdAsync(reviewerId.ToString(), CancellationToken.None), Times.Once); _fileManagerMock.Verify(x => x.SaveFileAsync(reviewFile), Times.Once); _reviewRepositoryMock.Verify(x => x.AddReviewAsync(It.Is <Review>(y => y.Reviewer == reviewer && y.Rating == rating && y.File == randomFileName && y.VersionOfScientificWork == version)), Times.Once); _reviewersWorkRepositoryMock.Verify(x => x.GetReviewersCount(scientificWorkId), Times.Once); _emailSenderMock.Verify(x => x.SendToAuthorWorkGotRejectedAsync(It.IsAny <string>(), It.IsAny <uint>()), Times.Never); _emailSenderMock.Verify(x => x.SendNewVersionEnabledEmailAsync(It.IsAny <string>(), It.IsAny <uint>()), Times.Never); _emailSenderMock.Verify(x => x.SendToAuthorWorkGotAcceptedAsync(authorEmail, scientificWorkId), Times.Once); _emailSenderMock.Verify(x => x.SendReceiveReviewEmailAsync(It.IsAny <string>(), It.IsAny <uint>()), Times.Never); }
public async Task AddReviewAsyncWorkAlreadyHaveReviewFromThisUserDoNothing() { var reviewerId = 1u; var reviewMsg = "This is my review!"; var reviewFile = new FormFile(null, 42534, 2345, "NameHaHa", "FileNameHueHue"); var rating = (byte)3; var scientificWorkId = 2u; var scientificWork = new ScientificWorkFile() { Reviews = new List <Review>() { new Review() { Reviewer = new User() { Id = reviewerId } } } }; _scientificWorkRepositoryMock.Reset(); _scientificWorkRepositoryMock.Setup(x => x.IsReviewerOfScientificWorkAsync(reviewerId, scientificWorkId)).ReturnsAsync(true); _scientificWorkFileRepositoryMock.Reset(); _scientificWorkFileRepositoryMock.Setup(x => x.GetNewestVersionWithReviewsAsync(scientificWorkId)).ReturnsAsync(scientificWork); _userStoreMock.Reset(); _fileManagerMock.Reset(); _reviewRepositoryMock.Reset(); _emailSenderMock.Reset(); _reviewersWorkRepositoryMock.Reset(); var err = await Record.ExceptionAsync(async () => await _service.AddReviewAsync(reviewerId, reviewMsg, reviewFile, rating, scientificWorkId)); err.Should().BeNull(); _scientificWorkRepositoryMock.Verify(x => x.IsReviewerOfScientificWorkAsync(reviewerId, scientificWorkId), Times.Once); _scientificWorkRepositoryMock.Verify(x => x.GetEmailOfAuthorByWorkIdAsync(It.IsAny <uint>()), Times.Never); _scientificWorkRepositoryMock.Verify(x => x.ChangeStatusAsync(It.IsAny <ScientificWork>()), Times.Never); _scientificWorkRepositoryMock.Verify(x => x.GetWorkByIdAsync(It.IsAny <uint>()), Times.Never); _scientificWorkFileRepositoryMock.Verify(x => x.GetNewestVersionWithReviewsAsync(scientificWorkId), Times.Once); _scientificWorkFileRepositoryMock.Verify(x => x.GetReviewsCountInNewestVersion(It.IsAny <uint>()), Times.Never); _scientificWorkFileRepositoryMock.Verify(x => x.GetRatingSumFromVersion(It.IsAny <uint>()), Times.Never); _scientificWorkFileRepositoryMock.Verify(x => x.AddRatingAsync(It.IsAny <ScientificWorkFile>()), Times.Never); _userStoreMock.Verify(x => x.FindByIdAsync(It.IsAny <string>(), CancellationToken.None), Times.Never); _fileManagerMock.Verify(x => x.SaveFileAsync(It.IsAny <IFormFile>()), Times.Never); _reviewRepositoryMock.Verify(x => x.AddReviewAsync(It.IsAny <Review>()), Times.Never); _reviewersWorkRepositoryMock.Verify(x => x.GetReviewersCount(It.IsAny <uint>()), Times.Never); _emailSenderMock.Verify(x => x.SendToAuthorWorkGotRejectedAsync(It.IsAny <string>(), It.IsAny <uint>()), Times.Never); _emailSenderMock.Verify(x => x.SendNewVersionEnabledEmailAsync(It.IsAny <string>(), It.IsAny <uint>()), Times.Never); _emailSenderMock.Verify(x => x.SendToAuthorWorkGotAcceptedAsync(It.IsAny <string>(), It.IsAny <uint>()), Times.Never); _emailSenderMock.Verify(x => x.SendReceiveReviewEmailAsync(It.IsAny <string>(), It.IsAny <uint>()), Times.Never); }