@gurglosa/playwright-zephyr-jira-reporter
Version:
A custom Playwright reporter that syncs test results to Zephyr Scale and creates Jira bugs on failures.
93 lines (92 loc) • 3.63 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.JiraServices = exports.IssueStatusTransition = void 0;
const axios_1 = __importDefault(require("axios"));
const buffer_1 = require("buffer");
var IssueStatusTransition;
(function (IssueStatusTransition) {
IssueStatusTransition["to_do"] = "11";
IssueStatusTransition["in_progress"] = "21";
IssueStatusTransition["done"] = "31";
IssueStatusTransition["ready_for_testing"] = "3";
IssueStatusTransition["testing"] = "2";
})(IssueStatusTransition || (exports.IssueStatusTransition = IssueStatusTransition = {}));
class JiraServices {
constructor(config) {
const requiredFields = [
{ key: 'Jira_Base_URL', message: 'Jira Base URL is required' },
{ key: 'Jira_Email', message: 'Jira email is required' },
{ key: 'Jira_Access_Token', message: 'Jira API token is required' },
{ key: 'Jira_project_Key', message: 'Jira Project Key is required' },
{ key: 'Jira_Email', message: 'Jira email is required' },
];
console.log();
for (const field of requiredFields) {
if (!config[field.key]) {
throw new Error(field.message);
}
}
const authToken = buffer_1.Buffer.from(`${config.Jira_Email}:${config.Jira_Access_Token}`).toString('base64');
this.client = axios_1.default.create({
baseURL: `${config.Jira_Base_URL}/rest/api/3`,
headers: {
Authorization: `Basic ${authToken}`,
Accept: 'application/json',
'Content-Type': 'application/json'
}
});
}
async createIssue(payload) {
try {
const response = await this.client.post('/issue', payload);
// console.log(`✅ Issue created: ${response.data.key}`);
return response.data;
}
catch (error) {
const axiosError = error;
console.log(`❌ Failed to create Jira issue:`, axiosError.message, axiosError.response?.data);
throw axiosError.response?.data;
}
}
async getJiraIssue(issueId) {
try {
const response = await this.client.get(`/issue/${issueId}`);
return response.data;
}
catch (error) {
const axiosError = error;
console.log(`❌ Failed to get Jira issue:`, axiosError.message, axiosError.response?.data);
throw error;
}
}
async searchIssueWithTitleUsingJQL(TestCaseID) {
try {
const response = await this.client.get(`/issue/picker?currentJQL=TestCaseID=${TestCaseID}`);
return response.data;
}
catch (error) {
const axiosError = error;
console.log(`❌ Failed to search Jira issue:`, axiosError.message, axiosError.response?.data);
throw error;
}
}
async transitionIssue(issueId, transitionId) {
try {
await this.client.post(`/issue/${issueId}/transitions`, {
transition: {
id: transitionId
}
});
}
catch (error) {
const axiosError = error;
console.error(`❌ Failed to transition Jira issue:`, axiosError.message, axiosError.response?.data);
throw error;
}
}
}
exports.JiraServices = JiraServices;
exports.default = JiraServices;