示例#1
0
        internal static RemoteIssue CreateIssue(string token, RemoteIssue remoteIssue)
        {
            if (!IsConfigured)
            {
                throw new InvalidOperationException("JIRA is not configured");
            }

            if (Log.IsDebugEnabled)
            {
                Log.DebugFormat("Creating issue:\n{0}", remoteIssue.ToJson());
            }

            remoteIssue = Service.createIssue(token, remoteIssue);

            if (Log.IsDebugEnabled)
            {
                Log.DebugFormat("Successfully created issue:\n{0}", remoteIssue.ToJson());
            }

            return(remoteIssue);
        }
        public override string CreateDefect(Dictionary <string, string> defectInfos)
        {
            Connect();

            RemoteIssue issue = new RemoteIssue();

            RemotePriority[]  priorities = jira.getPriorities(jiraToken);
            RemoteIssueType[] issueTypes = jira.getIssueTypes(jiraToken);
            jira.getProjectRoles(jiraToken);

            issue.created = DateTime.Now;
            issue.summary = "TOSCA[" + defectInfos["Workspace-User"] + "]: Error in Testcase \""
                            + defectInfos["TestCase-Name"] + "\"";
            string description = defectInfos["Log-Description"];

            if (!String.IsNullOrEmpty(description))
            {
                issue.description = description;
            }
            else
            {
                String compressedLog = defectInfos["CompressedLogDetails"];
                issue.description = String.IsNullOrEmpty(compressedLog)
                    ? String.Empty
                    : GetLogInfoFromCompressedLogDetails(compressedLog);
            }
            issue.assignee = GetDefectIntegrationSetting("DefectAssignee", defectInfos);
            if (issue.assignee == string.Empty)
            {
                issue.assignee = "-1";
            }

            issue.project  = GetDefectIntegrationSetting("DefectProject", defectInfos);
            issue.priority = GetDefectIntegrationSetting("DefectPriority", defectInfos);
            foreach (RemotePriority priority in priorities)
            {
                if (priority.name == issue.priority)
                {
                    issue.priority = priority.id;
                    break;
                }
            }
            issue.status = GetDefectIntegrationSetting("DefectStatus", defectInfos);
            issue.type   = GetDefectIntegrationSetting("DefectType", defectInfos);
            foreach (RemoteIssueType issueType in issueTypes)
            {
                if (issueType.name == issue.type)
                {
                    issue.type = issueType.id;
                    break;
                }
            }
            issue.components = GetComponents(GetDefectIntegrationSetting("DefectComponents", defectInfos));

            issue.customFieldValues = GetCustomDefectProperties(defectInfos).Select(property => new RemoteCustomFieldValue {
                customfieldId = "customfield_" + property.id, values = property.value.Split(',')
            }).ToArray();
            issue = jira.createIssue(jiraToken, issue);
            Disconnect();

            return(issue != null ? issue.key : string.Empty);
        }
        public string createIssue(JiraIssue issue)
        {
#if PLVS_133_WORKAROUND
            object[] issuesTable = service.getIssuesFromTextSearch(Token, "<<<<<<<<<<<<<IHOPETHEREISNOSUCHTEXT>>>>>>>>>>>>>>");

            Type   issueObjectType = issuesTable.GetType().GetElementType();
            object ri = issueObjectType.GetConstructor(new Type[] {}).Invoke(new object[] {});
            setObjectProperty(ri, "project", issue.ProjectKey);
            setObjectProperty(ri, "type", issue.IssueTypeId.ToString());
            setObjectProperty(ri, "priority", issue.PriorityId.ToString());
            setObjectProperty(ri, "summary", issue.Summary);
            setObjectProperty(ri, "description", issue.Description);

            if (issue.Assignee != null)
            {
                setObjectProperty(ri, "assignee", issue.Assignee);
            }

            if (issue.Components != null && issue.Components.Count > 0)
            {
                object[] components = service.getComponents(Token, issue.ProjectKey);
                setObjectTablePropertyFromObjectList(ri, "components", issue.Components, components);
            }

            object[] versions = service.getVersions(Token, issue.ProjectKey);

            if (issue.Versions != null && issue.Versions.Count > 0)
            {
                setObjectTablePropertyFromObjectList(ri, "affectsVersions", issue.Versions, versions);
            }

            if (issue.FixVersions != null && issue.FixVersions.Count > 0)
            {
                setObjectTablePropertyFromObjectList(ri, "fixVersions", issue.FixVersions, versions);
            }

            object createdIssue = service.createIssue(Token, ri);
            return((string)createdIssue.GetType().GetProperty("key").GetValue(createdIssue, null));
#else
            RemoteIssue ri = new RemoteIssue
            {
                project     = issue.ProjectKey,
                type        = issue.IssueTypeId.ToString(),
                priority    = issue.PriorityId.ToString(),
                summary     = issue.Summary,
                description = issue.Description,
            };
            if (issue.Assignee != null)
            {
                ri.assignee = issue.Assignee;
            }

            if (issue.Components != null && issue.Components.Count > 0)
            {
                IEnumerable <JiraNamedEntity> components = getComponents(issue.ProjectKey);
//                RemoteComponent[] objects = service.getComponents(Token, issue.ProjectKey);
                List <RemoteComponent> comps = new List <RemoteComponent>();
                foreach (string t in issue.Components)
                {
                    // fixme: a bit problematic part. What if two objects have the same name?
                    // I suppose JiraIssue class has to be fixed, but that would require more problematic
                    // construction of it during server query
                    string tCopy = t;
                    foreach (JiraNamedEntity component in components.Where(component => component.Name.Equals(tCopy)))
                    {
                        comps.Add(new RemoteComponent {
                            id = component.Id.ToString(), name = component.Name
                        });
                        break;
                    }
                }
                ri.components = comps.ToArray();
            }

            List <JiraNamedEntity> versions = getVersions(issue.ProjectKey);
//            RemoteVersion[] versions = service.getVersions(Token, issue.ProjectKey);

            if (issue.Versions != null && issue.Versions.Count > 0)
            {
                List <RemoteVersion> vers = new List <RemoteVersion>();
                foreach (string t in issue.Versions)
                {
                    // fixme: a bit problematic part. same as for objects
                    string tCopy = t;
                    foreach (JiraNamedEntity version in versions.Where(version => version.Name.Equals(tCopy)))
                    {
                        vers.Add(new RemoteVersion {
                            id = version.Id.ToString(), name = version.Name
                        });
                        break;
                    }
                }
                ri.affectsVersions = vers.ToArray();
            }

            if (issue.FixVersions != null && issue.FixVersions.Count > 0)
            {
                List <RemoteVersion> vers = new List <RemoteVersion>();
                foreach (string t in issue.FixVersions)
                {
                    // fixme: a bit problematic part. same as for objects
                    string tCopy = t;
                    foreach (JiraNamedEntity version in versions.Where(version => version.Name.Equals(tCopy)))
                    {
                        vers.Add(new RemoteVersion {
                            id = version.Id.ToString(), name = version.Name
                        });
                        break;
                    }
                }
                ri.fixVersions = vers.ToArray();
            }

            RemoteIssue createdIssue = service.createIssue(Token, ri);
            return(createdIssue.key);
#endif
        }