Пример #1
0
	def run(self, edit):
		window = self.view.window()

		TEMPLATE = (
				"{key} - {name}\n"
				"@@ Projekt: {project}\n"
				"@@ Projekt Name: {project_name}\n"
				"@@ Reporter: {reporter}\n"
				"@@ Bearbeiter: {assignee}\n"
				"\n"
				"@@ Description:\n"
				"{description}\n"
				"\n"
				"@@ Text:\n"
				"{text}\n"
				)

		self.view.run_command('select_all')
		text = self.view.substr(self.view.sel()[0])
		self.view.sel().clear()

		templateRegEx = re.sub(r'\{', "(?P<", TEMPLATE)
		templateRegEx = re.sub(r'\}', ">(.|\n)*)", templateRegEx)
		templateRegEx = re.compile(templateRegEx)
		inputValues = re.match(templateRegEx, text).groupdict()
		connection = LimeConnection()

		r = connection.update(inputValues['key'], LimeIssue().mapLimeToJira(inputValues))
Пример #2
0
	def run(self, edit, issue_key=None):
		window = self.view.window()
		if not issue_key:
			window.run_command('prompt_issue_key',
								{'callback': 'open_issue'})
		else:
			connection = LimeConnection()

			issue = connection.get(issue_key)

			TEMPLATE = (
					"{key} - {name}\n"
					"@@ Projekt: {project}\n"
					"@@ Projekt Name: {project_name}\n"
					"@@ Reporter: {reporter}\n"
					"@@ Bearbeiter: {assignee}\n"
					# "@@ Updated: {updated}\n"
					"@@ Sprint: {version}\n"
					"\n"
					"@@ Description:\n"
					"{description}\n"
					"\n"
					"@@ Text:\n"
					"{text}\n"
					)

			keywords = re.findall(r'\{([a-z_]+)\}', TEMPLATE)
			valuesMap = {}
			for key in keywords:
				valuesMap[key] = issue.getattr(key)
			text = TEMPLATE.format(**valuesMap)
			window.new_file()
			view = window.active_view()
			view.insert(edit, 0, text)
Пример #3
0
	def run(self, edit, issue_key=None):
		window = self.view.window()
		if not issue_key:
			window.run_command('prompt_issue_key',
								{'callback': 'get_jira_headline'})
		else:
			connection = LimeConnection()
			issue = connection.get(issue_key)
			region = self.view.sel()
			line = self.view.line(region[0])
			self.view.insert(edit, line.end(), "\n@ "+issue.key+" - "+issue.name+"\n"+issue.description)
Пример #4
0
	def getEpicMap():
		name = 'JiraWithLime.sublime-settings'
		settings = sublime.load_settings(name)
		project = settings.get('project', '')

		conn = LimeConnection()
		r = conn.getEpics(project)
		epicMap = json.loads(r.text)["epicNames"]
		epicArray = []
		for epic in epicMap:
			epicArray.append(epic["name"])
		return epicMap, epicArray
Пример #5
0
	def findVersionId(projectID, name): #10905
		versionId = -1
		connection = LimeConnection()
		response, data = connection.getAllVersionsOfProject(projectID)
		for v in data['unreleasedVersions']:
			if v['label'] == name:
				versionId = v['value']
				break
		for v in data['releasedVersions']:
			if v['label'] == name:
				versionId = v['value']
				break
		if versionId == -1:
			sublime.error_message("Could not find Version "+name)
			raise Exception("Could not find Version")
		return versionId
Пример #6
0
    def run(self, edit, cycletype, issue_key=None):
        self.window = self.view.window()
        self.util = Util()
        settings = sublime.load_settings("JiraWithLime.sublime-settings")
        self.projectKey = settings.get("project", "")
        self.cycletype = cycletype
        if not issue_key:
            window = self.view.window()
            call = lambda v: window.run_command("create_test_cycle", {"cycletype": cycletype, "issue_key": v})
            if cycletype == "story":
                window.show_input_panel("Key", self.projectKey + "-", call, None, None)
            else:
                window.show_input_panel("Lable", "", call, None, None)

        else:
            self.connection = LimeConnection()
            self.environment = ""
            self.version = ""
            self.versionId = ""
            self.key = issue_key
            if cycletype == "story":
                self.issue = self.connection.get(issue_key)
                self.version = self.issue.version
                self.versionId = self.issue.versionId
                self.projectId = self.issue.projectId
                print("projectID #### ", str(self.issue.projectId))
                self.window.show_input_panel("Sprint:", self.version, self.setSprint, None, None)
            else:
                self.projectId = self.util.getProjectId(self.projectKey)
                self.window.show_input_panel("Sprint:", "Sprint-", self.setSprint, None, None)
Пример #7
0
	def run(self, edit, issue_key=None):
		window = self.view.window()
		if not issue_key:
			window.run_command('prompt_issue_key',
								{'callback': 'new_tests'})
		else:
			connection = LimeConnection()

			issue = connection.get(issue_key)

			TEST_HEAD_TEMPLATE = (
					"{key} - {name}\n"
					"{description}\n"
					"\n"
					"@@ Projekt: {project}\n"
					"@@ Story: {key}\n"
					"@@ Story Reporter: {reporter}\n"
					"\n"
					"@@ Version: {version}\n"
					"@@ Attribute: {attribute}\n"
					"@@ Testgruppen: {testgroup}\n"
					'@@ Komponente: {component}\n'
					'@@ Stichwörter: {lables}\n'
					'@@ Bearbeiter: {assignee}\n'
					"\n"
					)

			keywords = re.findall(r'\{([a-z_]+)\}', TEST_HEAD_TEMPLATE)
			valuesMap = {}
			for key in keywords:
				valuesMap[key] = issue.getattr(key)
			valuesMap['attribute'] = "Regressionstest, Live-Test, Automatisiert"
			valuesMap['key'] = issue_key
			settings = sublime.load_settings('JiraWithLime.sublime-settings')
			valuesMap['assignee'] = settings.get('assignee', "")
			valuesMap['component'] = settings.get('component', "")
			valuesMap['testgroup'] = settings.get('testgroup', "")
			
			text = TEST_HEAD_TEMPLATE.format(**valuesMap)

			window.new_file()
			view = window.active_view()
			view.insert(edit, 0, text)
			window.run_command('add_test_template')
			window.run_command('add_test_template')
			window.run_command('add_test_template')
Пример #8
0
	def run(self, edit, testValues):
		print("Beginn creating Story Issues")

		self.window = self.view.window()
		self.connection = LimeConnection()
		self.offset = 0
		self.parser = MyMarkdownParser()
		for test in testValues:
			newIssue = {
				'fields' : {
					"project" : {
						'key' : test['project']
					},
					"summary" : test['name'],
					"description" : self.parser.build_markdown(test['description']),
					"issuetype" : {
						"name" : test['type']
					},
					"priority" : {
						"id": "3"
					},
					"customfield_11800" : test['short_description'],
					"components" : [],
					"versions" : [{"name":test['version']}],
					"assignee" : {'name' : test['assignee']}
				}
			}

			if test['type'] == 'Story':
				newIssue['customfield_15502'] = test['short_description']
				newIssue['labels'] = test['labels']

			if test['type'] == 'Subtask':
				if self.prevIssueKey != '':
					newIssue['fields']['parent'] = {"key": self.prevIssueKey }
				else:
					newIssue['fields']['parent'] = {"key": test['parent'] }

			for components in test['components']:
				if components != '':
					newIssue['fields']['components'].append({'name':components})

			if(test['key'] == ''):
				self.createStory(test, newIssue, edit)
			else:
				self.updateStory(test, newIssue, edit)

			if test['type'] == 'Story':
				self.prevIssueKey = test['key']
				if test['epic'] != ['']:
					self.createEpicLinks(test)
		sublime.message_dialog("Finish")
Пример #9
0
	def getAllIssueKeysFromSearch(fields, values):
		searchString = ""
		for i in range(len(fields)):
			searchString+=fields[i]
			searchString+=" = "
			searchString+=values[i]
			if(i < len(fields)-1): searchString+=" and "

		searchJson = {
			'jql' : searchString,
			"startAt" : 0,
			"maxResults" : 100,
			"fields" : ["id","key","issuetype"]
		}

		connection = LimeConnection()
		response, data = connection.searchIssues(searchJson)
		testList = []
		for issue in data['issues']:
			# issue['fields']['key']
			print("issueField", issue['key'])
			testList.append(issue['key'])
		return testList
Пример #10
0
	def run(self, edit, testValues):
		print("Beginn creating Test Issues")

		self.window = self.view.window()
		self.connection = LimeConnection()
		self.offset = 0
		self.parser = MyMarkdownParser() 
		for test in testValues:
			newIssue = {
				'fields' : {
					"project" : {
						'key' : test['project']
					},
					"summary" : test['name'],
					"description" : self.parser.build_markdown(test['description']),
					"issuetype" : {
						"name" : "Test"
					},
					"priority" : {
						"id": "3"
					},
					"customfield_15603" : [test['story']], #Story
					"components" : [],
					"versions" : [{"name":test['version']}],
					"labels" : test['labels'],
					"assignee" : {'name' : test['assignee']}
				}
			}

			if len(test['attributes']) > 0:
				newIssue['fields']['customfield_15604'] = []

			if len(test['testgroups']) > 0:
				newIssue['fields']['customfield_15601'] = []

			for attribut in test['attributes']:
				if attribut != '':
					newIssue['fields']['customfield_15604'].append({'value' : attribut})
			for testgroup in test['testgroups']:
				if testgroup != '':
					newIssue['fields']['customfield_15601'].append(testgroup)
			for components in test['components']:
				if components != '':
					newIssue['fields']['components'].append({"name":components})

			if(test['key'] == ''):
				self.createTest(test, newIssue, edit)
			else:
				self.updateTest(test, newIssue, edit)
		sublime.message_dialog("Finish")
Пример #11
0
	def run(self, edit, testValues):
		print("Beginn creating Bug Issues")

		self.window = self.view.window()
		self.connection = LimeConnection()
		self.offset = 0
		self.parser = MyMarkdownParser() 
		for test in testValues:
			newIssue = {
				'fields' : {
					"project" : {
						'key' : test['project']
					},
					"summary" : test['name'],
					"description" : self.parser.build_markdown(test['description']),
					"issuetype" : {
						"name" : "Bug"
					},
					"priority" : {
						"id": "3"
					},
					"components" : [],
					"fixVersions" : [{"name":test['version']}],
					# "labels" : test['labels'],
					"assignee" : {'name' : test['assignee']},
					# "customfield_11018" : {"value" : test['domain']},
					"customfield_11013" : {"value": test['environment']},
					"customfield_16038" : test['browser'],
					"customfield_16039" : test['device'],
					"customfield_16040" : test['operatingsystem']
				}
			}

			for components in test['components']:
				if components != '':
					newIssue['fields']['components'].append({"name":components})

			if(test['key'] == ''):
				self.createBug(test, newIssue, edit)
			else:
				self.updateBug(test, newIssue, edit)
		sublime.message_dialog("Finish")
Пример #12
0
	def getProjectId(projectKey):
		connection = LimeConnection()
		response, data = connection.getProjectId(projectKey)
		return data["id"]
Пример #13
0
class CreateTestCycleCommand(sublime_plugin.TextCommand):
    def run(self, edit, cycletype, issue_key=None):
        self.window = self.view.window()
        self.util = Util()
        settings = sublime.load_settings("JiraWithLime.sublime-settings")
        self.projectKey = settings.get("project", "")
        self.cycletype = cycletype
        if not issue_key:
            window = self.view.window()
            call = lambda v: window.run_command("create_test_cycle", {"cycletype": cycletype, "issue_key": v})
            if cycletype == "story":
                window.show_input_panel("Key", self.projectKey + "-", call, None, None)
            else:
                window.show_input_panel("Lable", "", call, None, None)

        else:
            self.connection = LimeConnection()
            self.environment = ""
            self.version = ""
            self.versionId = ""
            self.key = issue_key
            if cycletype == "story":
                self.issue = self.connection.get(issue_key)
                self.version = self.issue.version
                self.versionId = self.issue.versionId
                self.projectId = self.issue.projectId
                print("projectID #### ", str(self.issue.projectId))
                self.window.show_input_panel("Sprint:", self.version, self.setSprint, None, None)
            else:
                self.projectId = self.util.getProjectId(self.projectKey)
                self.window.show_input_panel("Sprint:", "Sprint-", self.setSprint, None, None)

    def setSprint(self, uinput):
        if self.version != uinput:
            self.version = uinput
            self.versionId = self.util.findVersionId(self.projectId, uinput)
        self.window.show_input_panel("Umgebung:", "Develop", self.setEnvironment, None, None)

    def setEnvironment(self, uinput):
        self.environment = uinput
        self.pushCycle()

    def pushCycle(self):
        testCycle = {
            "clonedCycleId": "",
            "name": self.key,
            "build": self.version,
            "environment": self.environment,
            # "description": "Released Cycle1",
            # "startDate": "17/Oct/13",
            # "endDate": "17/Jan/14",
            "projectId": self.projectId,
            "versionId": self.versionId,
        }

        response, data = self.connection.createTestCycle("", testCycle)
        cycleId = data["id"]

        if self.cycletype == "story":
            testcaseLinks = self.issue.getAllTestLinks()
        else:
            testcaseLinks = self.util.getAllIssueKeysFromSearch(
                ["project", "issuetype", "labels"], [self.projectKey, "Test", self.key]
            )

        issuesForCycle = {
            "issues": testcaseLinks,
            "versionId": self.versionId,
            "cycleId": cycleId,
            "projectId": self.projectId,
            "method": "1",
        }

        response = self.connection.addTestsToTestCycle(issuesForCycle)
        sublime.message_dialog("Finish")
Пример #14
0
class CreateStoryIssuesCommand(sublime_plugin.TextCommand):
	def run(self, edit, testValues):
		print("Beginn creating Story Issues")

		self.window = self.view.window()
		self.connection = LimeConnection()
		self.offset = 0
		self.parser = MyMarkdownParser()
		for test in testValues:
			newIssue = {
				'fields' : {
					"project" : {
						'key' : test['project']
					},
					"summary" : test['name'],
					"description" : self.parser.build_markdown(test['description']),
					"issuetype" : {
						"name" : test['type']
					},
					"priority" : {
						"id": "3"
					},
					"customfield_11800" : test['short_description'],
					"components" : [],
					"versions" : [{"name":test['version']}],
					"assignee" : {'name' : test['assignee']}
				}
			}

			if test['type'] == 'Story':
				newIssue['customfield_15502'] = test['short_description']
				newIssue['labels'] = test['labels']

			if test['type'] == 'Subtask':
				if self.prevIssueKey != '':
					newIssue['fields']['parent'] = {"key": self.prevIssueKey }
				else:
					newIssue['fields']['parent'] = {"key": test['parent'] }

			for components in test['components']:
				if components != '':
					newIssue['fields']['components'].append({'name':components})

			if(test['key'] == ''):
				self.createStory(test, newIssue, edit)
			else:
				self.updateStory(test, newIssue, edit)

			if test['type'] == 'Story':
				self.prevIssueKey = test['key']
				if test['epic'] != ['']:
					self.createEpicLinks(test)
		sublime.message_dialog("Finish")
	
	def createStory(self, test, newIssue, edit):
		response, data = self.connection.createTestIssue(newIssue)

		if response.status_code != 200 and response.status_code != 201 and response.status_code != 204:
			sublime.error_message("Response: "+str(response.status_code))
			raise Exception("Status was", response.status_code)
				
		test['issue_id'] = data['id']
		test['key'] = data['key']

		if test['keyLineNr'] > 0:
			pt = self.view.text_point(test['keyLineNr']-1+self.offset, 0)
			key_text = " "+test['key']
		else:
			pt = self.view.text_point(test['testLineNr']-1+self.offset, 0)
			key_text = "\n@@ Key: "+test['key']
			self.offset = self.offset + 1

		line_region = self.view.line(pt)
		pt += line_region.b - line_region.a
		self.view.insert(edit, pt, key_text)

	def updateStory(self, test, newIssue, edit):
		response = self.connection.update(test['key'], newIssue)

		if response.status_code != 200 and response.status_code != 201 and response.status_code != 204:
			sublime.error_message("Response: "+str(response.status_code))
			raise Exception("Status was", response.status_code)

	def createEpicLinks(self, test):
		print("Creating Epic Links", len(test['epic']))
		self.epicMap, self.epicArray = Util.getEpicMap()
		for epic in test['epic']:
			for oEpic in self.epicMap:
				if oEpic['name'] == epic:
					epicKey = oEpic['key']
					break
			link = {
					'ignoreEpics':'true',
					'issueKeys':[
						test['key']
						]
					}
			self.connection.addToEpic(epicKey, link)
Пример #15
0
class createTestIssuesCommand(sublime_plugin.TextCommand):
	def run(self, edit, testValues):
		print("Beginn creating Test Issues")

		self.window = self.view.window()
		self.connection = LimeConnection()
		self.offset = 0
		self.parser = MyMarkdownParser() 
		for test in testValues:
			newIssue = {
				'fields' : {
					"project" : {
						'key' : test['project']
					},
					"summary" : test['name'],
					"description" : self.parser.build_markdown(test['description']),
					"issuetype" : {
						"name" : "Test"
					},
					"priority" : {
						"id": "3"
					},
					"customfield_15603" : [test['story']], #Story
					"components" : [],
					"versions" : [{"name":test['version']}],
					"labels" : test['labels'],
					"assignee" : {'name' : test['assignee']}
				}
			}

			if len(test['attributes']) > 0:
				newIssue['fields']['customfield_15604'] = []

			if len(test['testgroups']) > 0:
				newIssue['fields']['customfield_15601'] = []

			for attribut in test['attributes']:
				if attribut != '':
					newIssue['fields']['customfield_15604'].append({'value' : attribut})
			for testgroup in test['testgroups']:
				if testgroup != '':
					newIssue['fields']['customfield_15601'].append(testgroup)
			for components in test['components']:
				if components != '':
					newIssue['fields']['components'].append({"name":components})

			if(test['key'] == ''):
				self.createTest(test, newIssue, edit)
			else:
				self.updateTest(test, newIssue, edit)
		sublime.message_dialog("Finish")
	
	def createTest(self, test, newIssue, edit):
		response, data = self.connection.createTestIssue(newIssue)

		if response.status_code != 200 and response.status_code != 201 and response.status_code != 204:
			sublime.error_message("Response: "+str(response.status_code))
			raise Exception("Status was", response.status_code)
				
		test['issue_id'] = data['id']
		test['key'] = data['key']

		###
		if test['keyLineNr'] > 0:
			pt = self.view.text_point(test['keyLineNr']-1+self.offset, 0)
			key_text = " "+test['key']
		else:
			pt = self.view.text_point(test['testLineNr']-1+self.offset, 0)
			key_text = "\n@@ Key: "+test['key']
			self.offset = self.offset + 1

		line_region = self.view.line(pt)
		pt += line_region.b - line_region.a
		self.view.insert(edit, pt, key_text)
		###

		for i in range(len(test['steps'])):
			if test['steps'][i] != '' or test['data'][i] != '' or test['result'][i] != '':
				teststep = {
					"step": test['steps'][i],
					"data": test['data'][i],
					"result": test['result'][i]
				}
				self.connection.createTestStep(test['issue_id'], teststep) #ID!  230076

		# Link Test
		# Auf die Blanke URL!!
		# inward key muss der Tests sein.
		link = {
			"type": {
		        "name": "Tests" # Tests, cloned by etc
		    },
		    "inwardIssue": {
				"key": test['key'] # Ausgehend
			},
		    "outwardIssue": {
		        "key": test['story'] # Wird getestet
		    }
		}
		self.connection.createLink("", link)

	def updateTest(self, test, newIssue, edit):
		response = self.connection.update(test['key'], newIssue)

		if response.status_code != 200 and response.status_code != 201 and response.status_code != 204:
			sublime.error_message("Response: "+str(response.status_code))
			raise Exception("Status was", response.status_code)
			
		issue = self.connection.get(test['key'])
		r, data = self.connection.getTestStep(issue.id)

		for i in range(len(test['steps'])):
			if test['steps'][i] != '' or test['data'][i] != '' or test['result'][i] != '':

				teststep = {
					"step": test['steps'][i],
					"data": test['data'][i],
					"result": test['result'][i]
				}

				try:
					print("issue", issue)
					testStepId = data[i]['id']
					self.connection.updateTestStep(str(issue.id)+"/"+str(testStepId), teststep) #ID!  230076
				except IndexError:
					self.connection.createTestStep(issue.id, teststep) #ID!  230076	

		overSize = len(data) - (len(test['steps'])-1)
		if overSize > 0:
			for i in data[len(data)-overSize:]:
				print('i', i)
				testStepId = i['id']
				self.connection.deleteTestStep(issue.id, testStepId)
Пример #16
0
class CreateBugIssuesCommand(sublime_plugin.TextCommand):
	def run(self, edit, testValues):
		print("Beginn creating Bug Issues")

		self.window = self.view.window()
		self.connection = LimeConnection()
		self.offset = 0
		self.parser = MyMarkdownParser() 
		for test in testValues:
			newIssue = {
				'fields' : {
					"project" : {
						'key' : test['project']
					},
					"summary" : test['name'],
					"description" : self.parser.build_markdown(test['description']),
					"issuetype" : {
						"name" : "Bug"
					},
					"priority" : {
						"id": "3"
					},
					"components" : [],
					"fixVersions" : [{"name":test['version']}],
					# "labels" : test['labels'],
					"assignee" : {'name' : test['assignee']},
					# "customfield_11018" : {"value" : test['domain']},
					"customfield_11013" : {"value": test['environment']},
					"customfield_16038" : test['browser'],
					"customfield_16039" : test['device'],
					"customfield_16040" : test['operatingsystem']
				}
			}

			for components in test['components']:
				if components != '':
					newIssue['fields']['components'].append({"name":components})

			if(test['key'] == ''):
				self.createBug(test, newIssue, edit)
			else:
				self.updateBug(test, newIssue, edit)
		sublime.message_dialog("Finish")
	
	def createBug(self, test, newIssue, edit):
		response, data = self.connection.createTestIssue(newIssue)

		if response.status_code != 200 and response.status_code != 201 and response.status_code != 204:
			sublime.error_message("Response: "+str(response.status_code))
			raise Exception("Status was", response.status_code)
				
		test['issue_id'] = data['id']
		test['key'] = data['key']

		###
		if test['keyLineNr'] > 0:
			pt = self.view.text_point(test['keyLineNr']-1+self.offset, 0)
			key_text = " "+test['key']
		else:
			pt = self.view.text_point(test['testLineNr']-1+self.offset, 0)
			key_text = "\n@@ Key: "+test['key']
			self.offset = self.offset + 1

		line_region = self.view.line(pt)
		pt += line_region.b - line_region.a
		self.view.insert(edit, pt, key_text)
		###
		self.createLinks(test)

	def updateBug(self, test, newIssue, edit):
		response = self.connection.update(test['key'], newIssue)

		if response.status_code != 200 and response.status_code != 201 and response.status_code != 204:
			sublime.error_message("Response: "+str(response.status_code))
			raise Exception("Status was", response.status_code)
			
		self.createLinks(test)

	def createLinks(self, test):
		print("Creating Links", len(test['links']))
		for link in test['links']:
			# Link Test
			# Auf die Blanke URL!!
			# inward key muss der Tests sein.
			link = {
				"type": {
			        "name": link[0] # Tests, cloned by etc Blocks, Relates
			    },
			    "inwardIssue": {
					"key": test['key'] # Ausgehend
				},
			    "outwardIssue": {
			        "key": link[1] # Wird getestet
			    }
			}
			self.connection.createLink("", link)