public void TestGoodRun()
        {
            var clientMock  = new Mock <IRSAPIClient>();
            var factoryMock = new Mock <IRelativityClientFactory>();
            var scriptExecutionRepositoryMock = new Mock <IRelativityScriptRepository>();

            factoryMock.Setup(m => m.GetRelativityClient(It.IsAny <ExecutionIdentity>())).Returns(clientMock.Object);
            factoryMock.Setup(m => m.GetRelativityClient()).Returns(clientMock.Object);

            var result = new RelativityScriptResult()
            {
                Success = true,
                Message = "unit test result"
            };

            scriptExecutionRepositoryMock
            .Setup(repo => repo.ExecuteRelativityScript(It.IsAny <RelativityScript>(), It.IsAny <List <RelativityScriptInput> >(), It.IsAny <RelativityWorkspace>())).Returns(result);

            clientMock.Setup(m => m.APIOptions).Returns(new APIOptions(-1));

            var jobScheduleRepositoryMock = new JobScheduleRepositoryMock();
            var scriptRunner = new RelativityScriptRunner(jobScheduleRepositoryMock.JobScheduleRepository, factoryMock.Object, scriptExecutionRepositoryMock.Object);

            var jobSchedule = jobScheduleRepositoryMock.CurrentJobSchedule;

            scriptRunner.ExecuteScriptJob(jobSchedule);

            Assert.That(jobSchedule.CurrentJobHistory.ResultText.Equals(result.Message));
            Assert.That(!jobSchedule.CurrentJobHistory.HasError);
            Assert.That(jobScheduleRepositoryMock.JobScheduleStarted && jobScheduleRepositoryMock.JobScheduleFinished);
        }
Esempio n. 2
0
        /// <summary>
        /// Runs the relativity script job
        /// </summary>
        /// <param name="client">the relativity client</param>
        /// <param name="job">the scheduled job</param>
        /// <param name="workspace">the workspace we exect to execute the script in</param>
        private void ExecuteJobInWorkspace(IRSAPIClient client, JobSchedule job, RelativityWorkspace workspace)
        {
            var inputs = this.jobScheduleRepository.GetJobInputs(job);

            Logger.Trace($"found ${inputs.Count} inputs for job ${job.Id}");
            // new relativity script pass in artifact id

            var maxAttempts = 3;
            var attempts    = 0;
            RelativityScriptResult scriptResult = null;

            do
            {
                attempts++;
                try
                {
                    var script       = new kCura.Relativity.Client.DTOs.RelativityScript(job.RelativityScriptId);
                    var scriptInputs = inputs.Select(i => new RelativityScriptInput(i.InputName, i.InputValue)).ToList();
                    scriptResult = this.relativityScriptRepository.ExecuteRelativityScript(script, scriptInputs, workspace);
                }
                catch (Exception ex)
                {
                    if (attempts < maxAttempts)
                    {
                        Task.Delay(1000 * attempts);
                        Logger.Info($"Attempt ${attempts} failed for job ${job.Id} with exception ${ex.Message}");
                        continue;
                    }
                    else
                    {
                        throw ex;
                    }
                }
            } while (attempts < maxAttempts);

            if (scriptResult != null)
            {
                job.CurrentJobHistory.HasError   = !scriptResult.Success;
                job.CurrentJobHistory.ResultText = scriptResult.Message;
                if (job.CurrentJobHistory.HasError)
                {
                    Logger.Info($"Job {job.Id} failed with result {scriptResult.Message}");
                }
            }
            else
            {
                job.CurrentJobHistory.HasError   = true;
                job.CurrentJobHistory.ResultText = "scriptResult Not initialized";
            }
        }
Esempio n. 3
0
        private RelativityScriptResult FilterBySavedSearch(int SavedSearch)
        {
            // STEP 1: Find script
            DTOs.RelativityScript script = this.GetRelativityScriptByName();

            // STEP 2: Set parameters and execute script
            List <RelativityScriptInput> scriptInputs = new List <RelativityScriptInput>();

            scriptInputs.Add(new RelativityScriptInput("SavedSearch", SavedSearch.ToString()));

            RelativityScriptResult scriptResult = Connection.Repositories.RelativityScript.ExecuteRelativityScript(script, scriptInputs);

            if (!scriptResult.Success)
            {
                throw new ApplicationException(scriptResult.Message);
            }

            return(scriptResult);
        }
Esempio n. 4
0
        public RelativityScriptResult ExecuteScript_Update_Duplicate_status(String scriptName, Int32 workspaceArtifactId, String savedSearchName, Guid duplicateStatusFieldGuid,
                                                                            String relationalFieldColumnName, String sortOrderFieldColumnName)
        {
            //Retrieve script by name
            Query <RelativityScript> relScriptQuery = new Query <RelativityScript>
            {
                Condition = new TextCondition(RelativityScriptFieldNames.Name, TextConditionEnum.EqualTo, scriptName),
                Fields    = FieldValue.AllFields
            };

            QueryResultSet <RelativityScript> relScriptQueryResults = _client.Repositories.RelativityScript.Query(relScriptQuery);

            if (!relScriptQueryResults.Success)
            {
                throw new Exception(String.Format("An error occurred finding the script: {0}", relScriptQueryResults.Message));
            }

            if (!relScriptQueryResults.Results.Any())
            {
                throw new Exception(String.Format("No results returned: {0}", relScriptQueryResults.Message));
            }

            //Retrieve script inputs
            var   script                         = relScriptQueryResults.Results[0].Artifact;
            var   inputnames                     = Execute.GetRelativityScriptInput(_client, scriptName, workspaceArtifactId, dbContext);
            int   savedsearchartifactid          = APIHelpers.Query_For_Saved_SearchID(savedSearchName, _client);
            Int32 duplicateStatusFieldCodeTypeId = GetFieldCodeTypeId(_client, workspaceArtifactId);

            //Set inputs for script
            RelativityScriptInput input  = new RelativityScriptInput(inputnames[0], savedsearchartifactid.ToString());
            RelativityScriptInput input2 = new RelativityScriptInput(inputnames[1], duplicateStatusFieldCodeTypeId.ToString());
            RelativityScriptInput input3 = new RelativityScriptInput(inputnames[2], relationalFieldColumnName);
            RelativityScriptInput input4 = new RelativityScriptInput(inputnames[3], sortOrderFieldColumnName);

            //Execute the script
            List <RelativityScriptInput> inputList = new List <RelativityScriptInput> {
                input, input2, input3, input4
            };
            RelativityScriptResult scriptResult = _client.Repositories.RelativityScript.ExecuteRelativityScript(script, inputList);

            return(scriptResult);
        }
Esempio n. 5
0
        public RelativityScriptResult ExecuteScript_DelimiterCountBySavedSearch(string scriptName, string savedSearchName, string sourceFieldName, string delimiter, string countDestinationFieldName)
        {
            _client.APIOptions.WorkspaceID = _workspaceId;

            //Retrieve script by name
            Query<RelativityScript> relScriptQuery = new Query<RelativityScript>
            {
                Condition = new TextCondition(RelativityScriptFieldNames.Name, TextConditionEnum.EqualTo, scriptName),
                Fields = FieldValue.AllFields
            };

            QueryResultSet<RelativityScript> relScriptQueryResults = _client.Repositories.RelativityScript.Query(relScriptQuery);
            if (!relScriptQueryResults.Success)
            {
                throw new Exception(String.Format("An error occurred finding the script: {0}", relScriptQueryResults.Message));
            }

            if (!relScriptQueryResults.Results.Any())
            {
                throw new Exception(String.Format("No results returned: {0}", relScriptQueryResults.Message));
            }

            //Retrieve script inputs
            RelativityScript script = relScriptQueryResults.Results[0].Artifact;
            var inputnames = GetRelativityScriptInput(_client, scriptName);
            int savedsearchartifactid = Query_For_Saved_SearchID(savedSearchName, _client);

            //Set inputs for script
            RelativityScriptInput input = new RelativityScriptInput(inputnames[0], savedsearchartifactid.ToString());
            RelativityScriptInput input2 = new RelativityScriptInput(inputnames[1], sourceFieldName);
            RelativityScriptInput input3 = new RelativityScriptInput(inputnames[2], delimiter);
            RelativityScriptInput input4 = new RelativityScriptInput(inputnames[3], countDestinationFieldName);

            //Execute the script
            List<RelativityScriptInput> inputList = new List<RelativityScriptInput> { input, input2, input3, input4 };

            RelativityScriptResult scriptResult = null;

            try
            {
                scriptResult = _client.Repositories.RelativityScript.ExecuteRelativityScript(script, inputList);
            }
            catch (Exception ex)
            {
                Console.WriteLine("An error occurred: {0}", ex.Message);
            }

            //Check for success.
            if (!scriptResult.Success)
            {
                Console.WriteLine(string.Format(scriptResult.Message));
            }
            else
            {
                int observedOutput = scriptResult.Count;
                Console.WriteLine("Result returned: {0}", observedOutput);

            }

            return scriptResult;
        }