public async Task <ReviewRelationshipsResultSet> GetReviewRelationships(int artifactId, int userId, bool addDrafts = true, int?versionId = null) { var revisionId = await _itemInfoRepository.GetRevisionId(artifactId, userId, versionId); var reviewType = new List <int> { (int)LinkType.ReviewPackageReference }; var reviewLinks = (await GetLinkInfo(artifactId, userId, addDrafts, revisionId, reviewType)).ToList(); var result = new ReviewRelationshipsResultSet { }; if (reviewLinks != null) { var distinctReviewIds = reviewLinks.Select(a => a.SourceItemId).Distinct().ToList(); var reviewIdsWithAccess = new List <int>(); var reviewPermissions = await _artifactPermissionsRepository.GetArtifactPermissions(distinctReviewIds, userId); foreach (var reviewId in distinctReviewIds) { if (SqlArtifactPermissionsRepository.HasPermissions(reviewId, reviewPermissions, RolePermissions.Read)) { reviewIdsWithAccess.Add(reviewId); } } var itemDetailsDictionary = (await _itemInfoRepository.GetItemsDetails(userId, reviewIdsWithAccess, true, revisionId)) .ToDictionary(a => a.HolderId); var itemRawDataDictionary = (await _itemInfoRepository.GetItemsRawDataCreatedDate(userId, reviewIdsWithAccess, true, revisionId)) .ToDictionary(a => a.ItemId); var referencedReviewArtifacts = new List <ReferencedReviewArtifact>(); ItemRawDataCreatedDate itemRawDataCreatedDate; ItemDetails itemDetails; foreach (var reviewId in reviewIdsWithAccess) { if ((itemRawDataDictionary.TryGetValue(reviewId, out itemRawDataCreatedDate)) && (itemDetailsDictionary.TryGetValue(reviewId, out itemDetails))) { var status = ReviewRawDataHelper.ExtractReviewStatus(itemRawDataCreatedDate.RawData); referencedReviewArtifacts.Add(new ReferencedReviewArtifact { ItemId = reviewId, Status = status, CreatedDate = itemRawDataCreatedDate.CreatedDateTime, ItemName = itemDetails.Name, ItemTypePrefix = itemDetails.Prefix }); } } result.ReviewArtifacts = referencedReviewArtifacts; } return(result); }
public async Task GetReviews_RelationshipIsReadOnly_Success() { // Arrange const int artifactId = 1; const int projectId = 10; const int destId = 123; var itemInfo = new ItemInfo { ProjectId = projectId, ArtifactId = artifactId, ItemId = artifactId }; var permisionDictionary = new Dictionary <int, RolePermissions>(); var resultSet = new ReviewRelationshipsResultSet { ReviewArtifacts = new List <ReferencedReviewArtifact> { new ReferencedReviewArtifact { ItemId = destId, ItemName = "Test Review", ItemTypePrefix = "Rev" } } }; permisionDictionary.Add(artifactId, RolePermissions.Read); permisionDictionary.Add(destId, RolePermissions.Read); _artifactPermissionsRepositoryMock.Setup(m => m.GetItemInfo(artifactId, _session.UserId, true, int.MaxValue)).ReturnsAsync(itemInfo); _artifactPermissionsRepositoryMock.Setup(m => m.GetArtifactPermissions(It.IsAny <List <int> >(), _session.UserId, false, int.MaxValue, true, null)).ReturnsAsync(permisionDictionary); _relationshipsRepositoryMock.Setup(m => m.GetReviewRelationships(artifactId, _session.UserId, true, It.IsAny <int?>())).ReturnsAsync(resultSet); var controller = new RelationshipsController(_relationshipsRepositoryMock.Object, _artifactPermissionsRepositoryMock.Object, _artifactVersionsRepositoryMock.Object) { Request = new HttpRequestMessage() }; controller.Request.Properties[ServiceConstants.SessionProperty] = _session; // Act var result = await controller.GetReviewRelationships(artifactId); // Assert Assert.IsNotNull(result); Assert.AreEqual(destId, result.ReviewArtifacts[0].ItemId); Assert.AreEqual("Test Review", result.ReviewArtifacts[0].ItemName); Assert.AreEqual("Rev", result.ReviewArtifacts[0].ItemTypePrefix); }