예제 #1
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)
예제 #2
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)
예제 #3
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')
예제 #4
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")
예제 #5
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)