public async Task VerifyMessageReturnedWhenCodeDoesNotExist()
        {
            var codeTypeName = "UserType";
            var codeName     = "Internal";

            kCura.Relativity.Client.DTOs.Choice resultingChoice = null;

            MockSqlQueryHelper
            .Setup(x => x.QueryChoiceArtifactId(It.IsAny <IDBContext>(), It.IsAny <String>(), It.IsAny <String>()))
            .Returns(Task.FromResult(new DataTable()));
            var codeNameValdation = new ValidationCodeName(MockSqlQueryHelper.Object, MockDbContext.Object, codeTypeName, x => resultingChoice = x);
            var expectedMessage   = String.Format(Constant.Messages.Violations.ChoiceDoesNotExist, codeName, codeTypeName);

            var result = await codeNameValdation.ValidateAsync(codeName);

            Assert.AreEqual(expectedMessage, result);
        }
        public async Task VerifyMessageNotReturnedWhenCodeExists()
        {
            var codeTypeName = "UserType";
            var codeName     = "Internal";

            kCura.Relativity.Client.DTOs.Choice resultingChoice = null;

            var returnData = new DataTable();

            returnData.Columns.Add("ArtifactID", typeof(Int32));
            returnData.Rows.Add(1234);

            MockSqlQueryHelper
            .Setup(x => x.QueryChoiceArtifactId(It.IsAny <IDBContext>(), It.IsAny <String>(), It.IsAny <String>()))
            .Returns(Task.FromResult(returnData));
            var codeNameValdation = new ValidationCodeName(MockSqlQueryHelper.Object, MockDbContext.Object, codeTypeName, x => resultingChoice = x);

            var result = await codeNameValdation.ValidateAsync(codeName);

            Assert.AreEqual(null, result);
        }
        public async Task VerifyCallbackSetsValueOfChoice()
        {
            var codeTypeName = "UserType";
            var codeName     = "Internal";

            kCura.Relativity.Client.DTOs.Choice resultingChoice = null;
            var choiceArtifactID = 1234;

            var returnData = new DataTable();

            returnData.Columns.Add("ArtifactID", typeof(Int32));
            returnData.Rows.Add(choiceArtifactID);

            MockSqlQueryHelper
            .Setup(x => x.QueryChoiceArtifactId(It.IsAny <IDBContext>(), It.IsAny <String>(), It.IsAny <String>()))
            .Returns(Task.FromResult(returnData));
            var codeNameValdation = new ValidationCodeName(MockSqlQueryHelper.Object, MockDbContext.Object, codeTypeName, x => resultingChoice = x);

            await codeNameValdation.ValidateAsync(codeName);

            Assert.IsTrue(resultingChoice != null);
            Assert.IsTrue(resultingChoice.ArtifactID == choiceArtifactID);
        }
        public override async Task <IEnumerable <String> > ValidateAsync(APIOptions apiOptions, IRsapiRepositoryGroup rsapiRepositoryGroup, IArtifactQueries artifactQueryHelper, IDBContext eddsDbContext, ISqlQueryHelper sqlQueryHelper)
        {
            var violations = new List <String>();

            await AddPasswordValidationToPasswordFieldsAsync();

            // Add Client Validator
            await AddValidationToColumnAsync(Client, new ValidationClient(apiOptions, rsapiRepositoryGroup.ClientRepository, x => _client = x));

            // Add Validators for userType, documentSkip, defaultSelectedFileType, skipDefaultPreference & documentViewer
            await AddValidationToColumnAsync(Type, new ValidationCodeName(sqlQueryHelper, eddsDbContext, Constant.CodeTypeName.UserType, x => _userType = x));
            await AddValidationToColumnAsync(DocumentSkip, new ValidationCodeName(sqlQueryHelper, eddsDbContext, Constant.CodeTypeName.DocumentSkip, x => _documentSkip = x));
            await AddValidationToColumnAsync(DefaultSelectedFileType, new ValidationCodeName(sqlQueryHelper, eddsDbContext, Constant.CodeTypeName.DefaultSelectedFileType, x => _defaultSelectedFileType = x));
            await AddValidationToColumnAsync(SkipDefaultPreference, new ValidationCodeName(sqlQueryHelper, eddsDbContext, Constant.CodeTypeName.SkipDefaultPreference, x => _skipDefaultPreference = x));
            await AddValidationToColumnAsync(DocumentViewer, new ValidationCodeName(sqlQueryHelper, eddsDbContext, Constant.CodeTypeName.DocumentViewer, x => _documentViewer = x));

            // Add Validator for Groups
            await AddValidationToColumnAsync(Groups, new ValidationGroup(apiOptions, rsapiRepositoryGroup.GroupRepository, x => _groupList = x));

            // Call Validation on each ObjectColumn. Note performance does NOT increase by turning this into a parallel loop
            foreach (var column in (await GetColumnsAsync()))
            {
                var validationResults = await column.ValidateAsync();

                if (validationResults != null && validationResults.Any())
                {
                    var columnViolations      = String.Join(Constant.ViolationDelimiter, validationResults);
                    var finalViolationMessage = String.Format(Constant.Messages.Violations.GeneralColumnViolation, column.ColumnName, columnViolations);
                    violations.Add(finalViolationMessage);
                }
            }

            // Update this user's validation status
            Validated = !violations.Any();

            return(violations);
        }