public async Task GetRelationshipDetails_ItemNotFoundForLatest_ExceptionThrownNotFound()
        {
            // Arrange
            const int artifactId = 1;

            _artifactVersionsRepositoryMock.Setup(m => m.IsItemDeleted(artifactId)).ReturnsAsync(true);

            var controller = new RelationshipsController(_relationshipsRepositoryMock.Object, _artifactPermissionsRepositoryMock.Object, _artifactVersionsRepositoryMock.Object)
            {
                Request = new HttpRequestMessage()
            };

            controller.Request.Properties[ServiceConstants.SessionProperty] = _session;

            try
            {
                // Act
                await controller.GetRelationshipDetails(artifactId);
            }
            catch (HttpResponseException e)
            {
                // Assert
                Assert.AreEqual(e.Response.StatusCode, HttpStatusCode.NotFound);
                throw;
            }
        }
        public async Task GetRelationshipDetails_ForRevision_Success()
        {
            // Arrange
            const int  artifactId = 1;
            const bool isDeleted  = true;
            const int  projectId  = 10;
            var        itemInfo   = new DeletedItemInfo {
                ProjectId = projectId, ArtifactId = artifactId, ItemId = artifactId
            };
            var permisionDictionary = new Dictionary <int, RolePermissions>();

            permisionDictionary.Add(artifactId, RolePermissions.Read);
            var expected = new RelationshipExtendedInfo {
                ArtifactId = artifactId
            };

            _artifactVersionsRepositoryMock.Setup(m => m.IsItemDeleted(artifactId)).ReturnsAsync(isDeleted);
            _artifactVersionsRepositoryMock.Setup(m => m.GetDeletedItemInfo(artifactId)).ReturnsAsync(itemInfo);
            _artifactPermissionsRepositoryMock.Setup(m => m.GetArtifactPermissions(It.IsAny <List <int> >(), _session.UserId, false, int.MaxValue, true, null)).ReturnsAsync(permisionDictionary);
            _relationshipsRepositoryMock.Setup(m => m.GetRelationshipExtendedInfo(artifactId, _session.UserId, null, isDeleted)).ReturnsAsync(expected);

            var controller = new RelationshipsController(_relationshipsRepositoryMock.Object, _artifactPermissionsRepositoryMock.Object, _artifactVersionsRepositoryMock.Object)
            {
                Request = new HttpRequestMessage()
            };

            controller.Request.Properties[ServiceConstants.SessionProperty] = _session;

            // Act
            var actual = await controller.GetRelationshipDetails(artifactId);

            // Assert
            Assert.AreSame(expected, actual);
        }
        public async Task GetRelationshipDetails_ArtifactHasPermission_Success()
        {
            // Arrange
            const int artifactId          = 1;
            var       permisionDictionary = new Dictionary <int, RolePermissions>();

            permisionDictionary.Add(artifactId, RolePermissions.Read);

            _artifactPermissionsRepositoryMock.Setup(m => m.GetItemInfo(It.IsAny <int>(), _session.UserId, true, int.MaxValue)).ReturnsAsync(new ItemInfo {
            });
            _artifactPermissionsRepositoryMock.Setup(m => m.GetArtifactPermissions(It.IsAny <IEnumerable <int> >(), _session.UserId, false, int.MaxValue, true, null)).ReturnsAsync(permisionDictionary);
            _relationshipsRepositoryMock.Setup(m => m.GetRelationshipExtendedInfo(artifactId, _session.UserId, null, false)).ReturnsAsync(new RelationshipExtendedInfo {
                ArtifactId = 1
            });

            var controller = new RelationshipsController(_relationshipsRepositoryMock.Object, _artifactPermissionsRepositoryMock.Object, _artifactVersionsRepositoryMock.Object)
            {
                Request = new HttpRequestMessage()
            };

            controller.Request.Properties[ServiceConstants.SessionProperty] = _session;
            // Act
            var result = await controller.GetRelationshipDetails(artifactId);

            // Assert
            Assert.AreEqual(1, result.ArtifactId);
        }
        public async Task GetRelationships_ArtifactHasNoPermission_ExcetionThrown()
        {
            // 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 RelationshipResultSet {
                ManualTraces = new List <Relationship> {
                    new Relationship {
                        ArtifactId = destId, ArtifactName = "test"
                    }
                }, OtherTraces = new List <Relationship> {
                    new Relationship {
                        ArtifactId = destId, ArtifactName = "test"
                    }
                }
            };

            _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.GetRelationships(artifactId, _session.UserId, It.IsAny <int?>(), true, false, It.IsAny <int?>(), null)).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.GetRelationships(artifactId);
        }
        public async Task GetRelationshipsDetails_IncorrectRevisionId_ExceptionThrown()
        {
            // Arrange
            const int artifactId = 10;
            var       controller = new RelationshipsController(_relationshipsRepositoryMock.Object, _artifactPermissionsRepositoryMock.Object, _artifactVersionsRepositoryMock.Object)
            {
                Request = new HttpRequestMessage()
            };

            controller.Request.Properties[ServiceConstants.SessionProperty] = _session;
            // Act
            await controller.GetRelationshipDetails(artifactId);
        }
        public async Task GetReviews_NotFound_ThrowsException()
        {
            // Arrange
            const int artifactId = 1;
            var       controller = new RelationshipsController(_relationshipsRepositoryMock.Object, _artifactPermissionsRepositoryMock.Object, _artifactVersionsRepositoryMock.Object)
            {
                Request = new HttpRequestMessage()
            };

            controller.Request.Properties[ServiceConstants.SessionProperty] = _session;
            _artifactPermissionsRepositoryMock.Setup(m => m.GetItemInfo(artifactId, _session.UserId, true, int.MaxValue)).ReturnsAsync((ItemInfo)null);

            // Act
            var result = await controller.GetReviewRelationships(artifactId);
        }
        public async Task GetRelationships_ForVersion_Success()
        {
            // Arrange
            const int artifactId = 1;
            const int versionId  = 9;
            const int projectId  = 10;
            const int tracedId   = 123;
            var       itemInfo   = new DeletedItemInfo {
                ProjectId = projectId, ArtifactId = artifactId, ItemId = artifactId
            };
            var permisionDictionary = new Dictionary <int, RolePermissions>();

            permisionDictionary.Add(artifactId, RolePermissions.Read);
            permisionDictionary.Add(tracedId, RolePermissions.Read);
            var expected = new RelationshipResultSet
            {
                ManualTraces = new List <Relationship> {
                    new Relationship {
                        ArtifactId = tracedId
                    }
                },
                OtherTraces = new List <Relationship>()
            };

            _artifactVersionsRepositoryMock.Setup(m => m.IsItemDeleted(artifactId)).ReturnsAsync(true);
            _artifactVersionsRepositoryMock.Setup(m => m.GetDeletedItemInfo(artifactId)).ReturnsAsync(itemInfo);
            _artifactPermissionsRepositoryMock.Setup(m => m.GetArtifactPermissions(It.IsAny <List <int> >(), _session.UserId, false, int.MaxValue, true, null)).ReturnsAsync(permisionDictionary);

            _relationshipsRepositoryMock.Setup(m => m.GetRelationships(artifactId, _session.UserId, It.IsAny <int?>(), false, false, versionId, null)).ReturnsAsync(expected);


            var controller = new RelationshipsController(_relationshipsRepositoryMock.Object, _artifactPermissionsRepositoryMock.Object, _artifactVersionsRepositoryMock.Object)
            {
                Request = new HttpRequestMessage()
            };

            controller.Request.Properties[ServiceConstants.SessionProperty] = _session;

            // Act
            var actual = await controller.GetRelationships(artifactId, versionId : versionId);

            // Assert
            Assert.AreSame(expected, actual);
        }
        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);
        }
        public async Task GetReviews_BadRequest_ThrowsException()
        {
            // Arrange
            const int artifactId = -1;
            var       controller = new RelationshipsController(_relationshipsRepositoryMock.Object, _artifactPermissionsRepositoryMock.Object, _artifactVersionsRepositoryMock.Object)
            {
                Request = new HttpRequestMessage()
            };

            controller.Request.Properties[ServiceConstants.SessionProperty] = _session;

            // Act
            try {
                var result = await controller.GetReviewRelationships(artifactId);
            } catch (BadRequestException e)
            {
                Assert.AreEqual(ErrorCodes.BadRequest, e.ErrorCode);
            }
        }
        public async Task GetRelationshipDetails_ArtifactNoPermission_ExceptionThrown()
        {
            // Arrange
            const int artifactId = 1;
            const int projectId  = 10;
            var       itemInfo   = new ItemInfo {
                ProjectId = projectId, ArtifactId = artifactId, ItemId = artifactId
            };
            var permisionDictionary = new Dictionary <int, RolePermissions>();

            _artifactPermissionsRepositoryMock.Setup(m => m.GetArtifactPermissions(It.IsAny <IEnumerable <int> >(), _session.UserId, false, int.MaxValue, true, null)).ReturnsAsync(permisionDictionary);

            var controller = new RelationshipsController(_relationshipsRepositoryMock.Object, _artifactPermissionsRepositoryMock.Object, _artifactVersionsRepositoryMock.Object)
            {
                Request = new HttpRequestMessage()
            };

            controller.Request.Properties[ServiceConstants.SessionProperty] = _session;
            // Act
            var result = await controller.GetRelationshipDetails(artifactId);
        }