Workflow клонирования задачи с другим типом

Доброго дня! 

Имею сценарий, который копирует Test Run. 

И хочу его переделать так, чтобы из Test Suite можно было получить задачу с типом Test Run. Пhи этом дочерние задачи Test Suite также прикреплять к новому Test Run связью Assigned Test case or test suite.

Помогите, пожалуйста, справиться с этим.

var workflow = require('@jetbrains/youtrack-scripting-api/workflow');
var entities = require('@jetbrains/youtrack-scripting-api/entities');
var utils = require('./utils');
 
exports.rule = entities.Issue.action({ 
  title: 'Create Test Run copy',
  command: 'Test Run Creation',
  guard: function(ctx) {
    return ctx.issue.isReported && (ctx.issue.Type.name == ctx.Type.TestRun.name); 
  },
  action: function(ctx) {
    var issue = ctx.issue;
    var TestRunCopy = issue.copy(issue.project); 
    TestRunCopy.Status = ctx.Status.InProgress; 
    var oldTestList = issue.links[ctx.Subtask.outward];
    oldTestList.forEach(function(v) {
      var newTest = v.copy(v.project);
      newTest.Status = ctx.Status.InProgress;
      newTest.links[ctx.Subtask.inward].delete(issue);
      newTest.links[ctx.Subtask.inward].add(TestRunCopy);
    });
    utils.resetStatuses(issue, TestRunCopy); 
    var newTestRunLink = '<a href="' + TestRunCopy.url + '"> ' + TestRunCopy.id + '</a>';
    var message = 'New Test Run has been created ' + newTestRunLink + '.';
    workflow.message(message);
  },
  requirements: {
    Execution: {
      type: entities.IssueLinkPrototype,
      name: 'Execution',
      inward: 'Execution',
      outward: 'Assigned Test case or test suite'
    },
    Subtask: {
      type: entities.IssueLinkPrototype,
      name: 'Subtask',
      inward: 'subtask of',
      outward: 'parent for'
    },
    Type: {
      type: entities.EnumField.fieldType,
      TestRun: {
        name: "Test Run"
      },
    },
    Status: {
      type: entities.EnumField.fieldType,
      InProgress: {
        name: 'No Run'
      },
    }
  }
});
0
3 comments

Добрый день!

Спасибо за обращение. Расскажите, пожалуйста, чем отличаются типы Test Run и Test Suite с точки зрения набора полей? Если ничем, то вы можете добавить в код строчки, которые поменяют тип скопированной задачи (за него у вас отвечает поле ctx.issue.Type), а затем правильно прилинковать задачи (пример в вашем коде есть).

Расскажите, пожалуйста, что именно не получается и с чем нужна помощь?

0

Итого работает следующее:

var workflow = require('@jetbrains/youtrack-scripting-api/workflow');
var entities = require('@jetbrains/youtrack-scripting-api/entities');
var utils = require('./utils');

exports.rule = entities.Issue.action({
  // TODO: give the rule a human-readable title
  title: 'Create-test-run-from-suite',
  // TODO: define the custom command
  command: 'create-test-run-from-suite',
  guard: (ctx) => {
    // TODO: define the condition that must be met to enable the custom command
    return ctx.issue.isReported && (ctx.issue.Type.name == "Test Suite"); 
  },
  action: function(ctx) {
    var issue = ctx.issue;
    var TestRunCopy = issue.copy(issue.project);
    TestRunCopy.Type = ctx.Type.TestRun;
    TestRunCopy.Status = ctx.Status.InProgress; 
    var oldTestList = issue.links[ctx.Subtask.outward];
    oldTestList.forEach(function(v) {
      var newTest = v.copy(v.project);
      newTest.Type = ctx.Type.TestCaseExecution;
      newTest.Status = ctx.Status.InProgress;
      newTest.links[ctx.Subtask.inward].delete(issue);
      newTest.links[ctx.Subtask.inward].add(TestRunCopy);
      newTest.summary = "[TEST_CASE_EXECUTION" + "] [" + newTest.summary + "]";
    });
    utils.resetStatuses(issue, TestRunCopy); 
    TestRunCopy.removeTag("Test Suite");
    var newTestRunLink = '<a href="' + TestRunCopy.url + '"> ' + TestRunCopy.id + '</a>';
    var message = 'New Test Run has been created ' + newTestRunLink + '.';
    workflow.message(message);
  },
  requirements: {
    Execution: {
      type: entities.IssueLinkPrototype,
      name: 'Execution',
      inward: 'Execution',
      outward: 'Assigned Test case or test suite'
    },
    Subtask: {
      type: entities.IssueLinkPrototype,
      name: 'Subtask',
      inward: 'subtask of',
      outward: 'parent for'
    },
    Type: {
      type: entities.EnumField.fieldType,
      TestSuite: {
        name: "Test Suite"
      },
      TestRun: {
        name: "Test Run"
      },
      TestCaseExecution: {
        name: "Test Case Execution"
      },
    },
    Status: {
      type: entities.EnumField.fieldType,
      InProgress: {
        name: 'No Run'
      },
    }
  }
});
0

Спасибо, что поделились решением, оно может помочь кому-то еще. Хорошего дня!

0

Please sign in to leave a comment.