Пример #1
0
        public static void addCustomFieldValue(string fieldName, string fieldValue)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            removeCustomFieldValue(fieldName);
            config.customFields.Add(fieldName, fieldValue);
        }
Пример #2
0
        private void initialConnect()
        {
            try
            {
                JiraConfiguration config = JiraConfiguration.Instance;
                config.ServerUrl = _JiraServerURL;
                config.Password  = _JiraPassword;
                config.UserName  = _JiraUserName;

                JiraReporter.ConnectJiraServer();
                //Report.Info(JiraReporter.GetServerTitle() + " -- " + JiraReporter.GetServerVersion());
            }
            catch (Exception e)
            {
                var    inner = e.InnerException;
                string str   = "";
                if (inner != null)
                {
                    var prop = inner.GetType().GetProperty("ErrorResponse");
                    if (prop != null)
                    {
                        str = (string)prop.GetValue(e.InnerException, null);
                    }
                }

                Report.Error(e.Message + " (InnerException: " + e.InnerException + " -- " + str + ")");
            }
        }
        public void Run()
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            if (!config.enabled)
            {
                Report.Debug("Jira integration disabled in config!");
                return;
            }

            ITestContainer tc = checkTestCase();

            if (tc.Status == Ranorex.Core.Reporting.ActivityStatus.Failed)
            {
                string rxField = config.RxAutomationFieldName;
                string query   = config.jqlQueryToConnectIssues;
                config.RxAutomationFieldName   = "";
                config.jqlQueryToConnectIssues = "";

                AutoHandleJiraIntegration ah = new AutoHandleJiraIntegration();
                ah.Run();

                config.RxAutomationFieldName   = rxField;
                config.jqlQueryToConnectIssues = query;
            }
        }
Пример #4
0
        /// <summary>
        /// Performs the playback of actions in this module.
        /// </summary>
        /// <remarks>You should not call this method directly, instead pass the module
        /// instance to the <see cref="TestModuleRunner.Run(ITestModule)"/> method
        /// that will in turn invoke this method.</remarks>
        void ITestModule.Run()
        {
            Mouse.DefaultMoveTime        = 300;
            Keyboard.DefaultKeyPressTime = 100;
            Delay.SpeedFactor            = 1.0;

            JiraConfiguration config = JiraConfiguration.Instance;

            if (this.JiraProjectKey != null)
            {
                config.JiraProjectKey = this.JiraProjectKey;
            }

            if (this.JiraIssueType != null)
            {
                config.JiraIssueType = this.JiraIssueType;
            }

            if (this.JiraSummary != null)
            {
                config.JiraSummary = this.JiraSummary;
            }

            if (this.JiraDescription != null)
            {
                config.JiraDescription.Add(new JiraDescriptionItem(this.JiraDescription, null));
            }

            if (this.JiraLabels != null)
            {
                config.JiraLabels = this.JiraLabels;
            }

            if (this.StateClosed != null)
            {
                config.StateClosed = this.StateClosed;
            }

            if (this.StateReopen != null)
            {
                config.StateReopen = this.StateReopen;
            }

            if (this.RxAutomationFieldName != null && !this.RxAutomationFieldName.Equals(""))
            {
                config.RxAutomationFieldName = this.RxAutomationFieldName;
            }

            if (this.jqlQueryToConnectIssues != null)
            {
                config.jqlQueryToConnectIssues = this.jqlQueryToConnectIssues;
            }

            if (this.jiraIssuePriority != null)
            {
                config.JiraIssuePriority = jiraIssuePriority;
            }

            initialConnect();
        }
Пример #5
0
        public static void addCustomCascadingField(string fieldName, string parentValue, string childValue)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            removeCustomCascadingFieldValue(fieldName);
            string[] values = { parentValue, childValue };
            config.customCascadingFields.Add(fieldName, values);
        }
Пример #6
0
        public static void removeCustomCascadingFieldValue(string fieldName)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            if (config.customCascadingFields.ContainsKey(fieldName))
            {
                config.customCascadingFields.Remove(fieldName);
            }
        }
        private static void updateStandardFields(Issue issue, string testCaseName)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            if (config.JiraIssuePriority != null && config.JiraIssuePriority.Length > 0)
            {
                updatePriority(issue, config.JiraIssuePriority);
            }

            if (config.JiraEnvironment != null && config.JiraEnvironment.Length > 0)
            {
                updateEnvironment(issue, config.JiraEnvironment);
            }

            issue.Description = ".";

            issue.Summary = testCaseName + ": " + config.JiraSummary;

            foreach (string label in config.getAllLabels())
            {
                issue.Labels.Add(label);
            }

            if (config.AffectsVersions != null && config.AffectsVersions.Length > 0)
            {
                string[] versions = config.AffectsVersions.Split(';');
                issue.AffectsVersions.Clear();

                foreach (string version in versions)
                {
                    issue.AffectsVersions.Add(version);
                }
            }

            if (config.Assignee != null && config.Assignee.Length > 0)
            {
                issue.Assignee = config.Assignee;
            }

            if (config.DueDate != null && config.DueDate.Length > 0)
            {
                issue.DueDate = DateTime.Parse(config.DueDate);
            }

            if (config.FixVersions != null && config.FixVersions.Length > 0)
            {
                string[] versions = config.FixVersions.Split(';');
                issue.FixVersions.Clear();

                foreach (string version in versions)
                {
                    issue.FixVersions.Add(version);
                }
            }
        }
Пример #8
0
        /// <summary>
        /// Performs the playback of actions in this module.
        /// </summary>
        /// <remarks>You should not call this method directly, instead pass the module
        /// instance to the <see cref="TestModuleRunner.Run(ITestModule)"/> method
        /// that will in turn invoke this method.</remarks>
        public void Run()
        {
            ITestContainer    tc     = checkTestCase();
            JiraConfiguration config = JiraConfiguration.Instance;

            IEnumerable issues = null;

            if ((config.jqlQueryToConnectIssues == null || config.jqlQueryToConnectIssues.Length == 0) &&
                (config.RxAutomationFieldName == null || config.RxAutomationFieldName.Length == 0))
            {
                issues = Enumerable.Empty <Issue>();
            }
            else if (config.jqlQueryToConnectIssues.Length > 0)
            {
                issues = JiraReporter.getJiraIssues(config.jqlQueryToConnectIssues);
            }
            else
            {
                issues = JiraReporter.getJiraIssues("'" + config.RxAutomationFieldName + "' ~ '" + tc.Name + "'");
            }

            if (tc.Status == Ranorex.Core.Reporting.ActivityStatus.Failed)
            {
                bool isEmpty = true;
                foreach (Issue issue in issues)
                {
                    if (!issue.Status.Name.Contains(config.StateReopen))
                    {
                        reopenIssue(issue.Key.ToString(), config.StateReopen);
                    }
                    else
                    {
                        Report.Info("Jira issue is already open -- IssueKey: " + issue.Key.ToString() + "; IssueID: " + issue.Key.ToString());
                        Report.LogHtml(ReportLevel.Info, "<a href=\"" + JiraReporter.ServerURL + "browse/" + issue.Key.ToString() + "\">" + issue.Key.ToString() + "</a>");
                    }
                    isEmpty = false;
                }
                if (isEmpty)
                {
                    createIssue(tc);
                }
            }
            else if (tc.Status == Ranorex.Core.Reporting.ActivityStatus.Success)
            {
                foreach (Issue issue in issues)
                {
                    if (!issue.Status.Name.Contains(config.StateClosed))
                    {
                        resolveIssue(issue.Key.ToString(), config.StateClosed);
                    }
                }
            }
        }
        void ITestModule.Run()
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            if (!config.enabled)
            {
                Report.Debug("Jira integration disabled in config!");
                return;
            }


            var tc = TestSuite.CurrentTestContainer;

            if (tc == null)
            {
                Report.Error("TestCase is 'null'; this usually happens when the module is used outside of testcases (e.g., global teardown).");
            }

            if (tc.Status == Ranorex.Core.Reporting.ActivityStatus.Failed)
            {
                try
                {
                    char          delimiterChar = ';';
                    List <string> labels        = null;

                    if (!string.IsNullOrEmpty(JiraLabels))
                    {
                        labels = new List <string>(JiraLabels.Split(delimiterChar));
                    }

                    var curIssue = JiraReporter.UpdateIssue(JiraIssueKey, tc.Name, JiraSummary, JiraDescription, labels, true);

                    Report.Info("Jira issue updated -- IssueKey: " + curIssue.Key + "; IssueID: " + curIssue.Id);
                    Report.LogHtml(ReportLevel.Info, "<a href=\"" + JiraReporter.ServerURL + "/browse/" + curIssue.Id + "\">" + curIssue.Id + "</a>");
                }
                catch (Exception e)
                {
                    var    inner = e.InnerException;
                    string str   = "";
                    if (inner != null)
                    {
                        var prop = inner.GetType().GetProperty("ErrorResponse");
                        if (prop != null)
                        {
                            str = (string)prop.GetValue(e.InnerException, null);
                        }
                    }

                    Report.Error(e.Message + " (InnerException: " + e.InnerException + " -- " + str + ")");
                }
            }
        }
Пример #10
0
        void writeBatchFile(string batFileName, string reportFileName, string testcaseName)
        {
            ITestContainer    tc     = TestSuite.CurrentTestContainer;
            JiraConfiguration config = JiraConfiguration.Instance;

            var file = File.CreateText(batFileName);

            string chageDirectory = String.Format("CD \"{0}\"", JiraCLIFileLocation.Substring(0, JiraCLIFileLocation.LastIndexOf('\\') + 1));
            // Jira WebService calls for CLI environment
            string jiraCall = String.Format("CALL \"{0}\" {1} {2} {3} {4} ",
                                            JiraCLIFileLocation.Substring(JiraCLIFileLocation.LastIndexOf('\\') + 1), config.ServerUrl, config.UserName, config.Password, tc.Name);

            string actionCreateIssue = String.Format("{0} \"{1}\" \"{2}\" \"{3}\" ",
                                                     config.JiraProjectKey, config.JiraIssueType, config.JiraSummary, getDescriptionString(config));


            if (!string.IsNullOrEmpty(config.JiraLabels))
            {
                actionCreateIssue = actionCreateIssue + String.Format(" \"{0}\" ", config.JiraLabels);
            }

            actionCreateIssue += String.Format("\"{0}\" ",
                                               System.IO.Path.Combine(Ranorex.Core.Reporting.TestReport.ReportEnvironment.ReportFileDirectory, reportFileName));

            actionCreateIssue += String.Format("\"{0}\" ", attachments);

            file.WriteLine("@ECHO off");
            file.WriteLine(chageDirectory);
            file.WriteLine(String.Format("{0} {1} %* > return_string_{2}.txt", jiraCall, actionCreateIssue, testcaseName));
            file.WriteLine(String.Format("type return_string_{0}.txt", testcaseName));

            //parse return string from Jira WebService call to get issue ID
            file.WriteLine(String.Format("FOR /F \"tokens=2,6,8 delims== \" %%I IN (return_string_{0}.txt) DO ( set KEY=%%I & set ID=%%J & set URL=%%K)", testcaseName));
            file.WriteLine("set ID=%ID:~0,-1%");

            //prompt if user wants to review the created issue in the default browser
            file.WriteLine("if %errorlevel% neq 0 echo ERROR: Something went wrong uploading the issue! & pause");
            file.WriteLine("if %errorlevel% neq 0 exit /b %errorlevel%");
            file.WriteLine("echo Issue created and report uploaded");

            file.WriteLine("set /p answer=Do you want to open the issue in your default browser (Y/[N])?");
            file.WriteLine("if /i \"%answer:~,1%\" EQU \"Y\" start %URL%");
            file.WriteLine("else exit /b");
            file.WriteLine("echo Please type Y for Yes or N for No");

            file.Close();
            file.Dispose();
        }
        public static string updateDescription(Issue issue, JiraConfiguration config)
        {
            string descriptionString = "";

            foreach (JiraDescriptionItem item in config.JiraDescription)
            {
                descriptionString += "\r\n " + item.text;

                if (item.isImageEntry())
                {
                    issue.AddAttachment(item.getValue());
                    descriptionString += "\r\n !" + Path.GetFileName(item.getValue()) + "!";
                }
            }

            return(descriptionString);
        }
Пример #12
0
        public void Run()
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            if (!config.enabled)
            {
                Report.Debug("Jira integration disabled in config!");
                return;
            }

            var tc = checkTestCase();

            if (tc.Status == Ranorex.Core.Reporting.ActivityStatus.Success)
            {
                resolveIssue(JiraIssueKey, TransitionName);
            }
        }
Пример #13
0
        public static void updateSummary()
        {
            ITestContainer tc           = TestSuite.CurrentTestContainer;
            string         testCaseName = tc.Name;

            Ranorex.Core.Reporting.ActivityStack.Instance.VisitAll(activity => {
                if ((activity.GetType().Name.Equals("TestContainerActivity") &&
                     activity.Status == ActivityStatus.Failed &&
                     (activity as ITestContainerActivity).ContainerName.Equals(testCaseName))
                    )
                {
                    JiraConfiguration config = JiraConfiguration.Instance;
                    config.JiraSummary       = getFailedAction(activity);
                }
                return(true);
            });
        }
        private static void addCustomCascadingFields(Issue issue)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            foreach (string key in config.customCascadingFields.Keys)
            {
                string[] value = null;
                config.customCascadingFields.TryGetValue(key, out value);

                if (key.Equals(""))
                {
                    Ranorex.Report.Log(Ranorex.ReportLevel.Warn, "An invalid custom field is configured for jira. field name: '" + key + "' field value: '" + value + "'");
                }
                else
                {
                    CascadingSelectCustomField field = new CascadingSelectCustomField(key, value[0], value[1]);
                    issue.CustomFields.AddCascadingSelectField(field);
                }
            }
        }
Пример #15
0
        string getDescriptionString(JiraConfiguration config)
        {
            string descriptionString = "";

            foreach (JiraDescriptionItem item in config.JiraDescription)
            {
                descriptionString += "{LB} " + item.text;

                if (item.isImageEntry())
                {
                    if (attachments.Length > 0)
                    {
                        attachments += ";";
                    }
                    attachments       += System.IO.Path.Combine(Ranorex.Core.Reporting.TestReport.ReportEnvironment.ReportFileDirectory, item.getValue());
                    descriptionString += "{LB} !" + Path.GetFileName(item.getValue()) + "!";
                }
            }

            return(descriptionString);
        }
        public static JiraIssue CreateIssue(string testCaseName, bool attachReport)
        {
            CheckIfClientConnected();
            JiraConfiguration config = JiraConfiguration.Instance;

            if (GetIssueType(config.JiraProjectKey, config.JiraIssueType) == null)
            {
                throw (new Exception(String.Format("Issue Type '{0}' not found!", config.JiraIssueType)));
            }

            Issue issue = client.CreateIssue(config.JiraProjectKey);

            issue.Type = config.JiraIssueType;

            updateStandardFields(issue, testCaseName);

            addCustomFields(issue, testCaseName);

            addCustomCascadingFields(issue);

            issue.SaveChanges();

            string newDesc = updateDescription(issue, config);

            if (newDesc.Length > 0)
            {
                issue.Description = newDesc;
            }

            if (attachReport)
            {
                addRanorexReport(issue);
            }

            issue.SaveChanges();

            var jiraIssue = new JiraIssue(issue.Key.ToString(), issue.JiraIdentifier);

            return(jiraIssue);
        }
Пример #17
0
        public static void removeLabel(string label)
        {
            JiraConfiguration config    = JiraConfiguration.Instance;
            string            oldLabels = config.JiraLabels;

            string[] labels    = oldLabels.Split(';');
            string   newLabels = "";

            foreach (string lab in labels)
            {
                if (!newLabels.Equals(""))
                {
                    newLabels += ";";
                }
                if (!lab.Equals(label))
                {
                    newLabels += lab;
                }
            }

            JiraFieldHelper.setLabels(newLabels);
        }
Пример #18
0
        public static void removeAffectsVersions(string version)
        {
            JiraConfiguration config      = JiraConfiguration.Instance;
            string            oldVersions = config.AffectsVersions;

            string[] versions    = oldVersions.Split(';');
            string   newVersions = "";

            foreach (string ver in versions)
            {
                if (!newVersions.Equals(""))
                {
                    newVersions += ";";
                }
                if (!ver.Equals(version))
                {
                    newVersions += ver;
                }
            }

            JiraFieldHelper.setAffectsVersions(newVersions);
        }
        private static void addCustomFields(Issue issue, string testCaseName)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            if (config.RxAutomationFieldName != null && !config.RxAutomationFieldName.Equals("") && !config.customFields.ContainsKey(config.RxAutomationFieldName))
            {
                config.customFields.Add(config.RxAutomationFieldName, testCaseName);
            }

            foreach (string key in config.customFields.Keys)
            {
                string value = null;
                config.customFields.TryGetValue(key, out value);

                if (key.Equals(""))
                {
                    Ranorex.Report.Log(Ranorex.ReportLevel.Warn, "An invalid custom field is configured for jira. field name: '" + key + "' field value: '" + value + "'");
                }
                else
                {
                    issue.CustomFields.Add(key, value);
                }
            }
        }
Пример #20
0
        public static void addNewLineToDescription(string line)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.JiraDescription.Add(new JiraDescriptionItem("\r\n " + line, null));
        }
Пример #21
0
        public static void clearDescription()
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.JiraDescription.Clear();
        }
Пример #22
0
        public static void setAssignee(string assignee)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.Assignee = assignee;
        }
Пример #23
0
        public static void setJiraJQLQuery(string query)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.jqlQueryToConnectIssues = query;
        }
Пример #24
0
        public static void setJiraIssueKey(string key)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.transientConfig.JiraIssueKey = key.Trim();
        }
Пример #25
0
        public static void addNewLabel(string label)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.JiraLabels += ";" + label;
        }
Пример #26
0
        public static void setLabels(string labels)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.JiraLabels = labels;
        }
Пример #27
0
        public static void setEnvironment(string environment)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.JiraEnvironment = environment;
        }
Пример #28
0
        public static void setAffectsVersions(string versions)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.AffectsVersions = versions;
        }
Пример #29
0
        public static void setDueDate(string dueDate)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.DueDate = dueDate;
        }
Пример #30
0
        public static void addAffectsVersions(string version)
        {
            JiraConfiguration config = JiraConfiguration.Instance;

            config.AffectsVersions += ";" + version;
        }