3 final class DifferentialRevisionTestPlanTransaction
4 extends DifferentialRevisionTransactionType
{
6 const TRANSACTIONTYPE
= 'differential.revision.testplan';
7 const EDITKEY
= 'testPlan';
9 public function generateOldValue($object) {
10 return $object->getTestPlan();
13 public function applyInternalEffects($object, $value) {
14 $object->setTestPlan($value);
17 public function getTitle() {
19 '%s edited the test plan for this revision.',
20 $this->renderAuthor());
23 public function getTitleForFeed() {
25 '%s updated the test plan for %s.',
26 $this->renderAuthor(),
27 $this->renderObject());
30 public function hasChangeDetailView() {
34 public function getMailDiffSectionHeader() {
35 return pht('CHANGES TO TEST PLAN');
38 public function newChangeDetailView() {
39 $viewer = $this->getViewer();
41 return id(new PhabricatorApplicationTransactionTextDiffDetailView())
43 ->setOldText($this->getOldValue())
44 ->setNewText($this->getNewValue());
47 public function newRemarkupChanges() {
50 $changes[] = $this->newRemarkupChange()
51 ->setOldValue($this->getOldValue())
52 ->setNewValue($this->getNewValue());
57 public function validateTransactions($object, array $xactions) {
58 $errors = $this->validateCommitMessageCorpusTransactions(
63 $is_required = PhabricatorEnv
::getEnvConfig(
64 'differential.require-test-plan-field');
67 if ($this->isEmptyTextTransaction($object->getTestPlan(), $xactions)) {
68 $errors[] = $this->newRequiredError(
70 'You must provide a test plan. Describe the actions you '.
71 'performed to verify the behavior of this change.'));
78 public function getTransactionTypeForConduit($xaction) {
82 public function getFieldValuesForConduit($xaction, $data) {
84 'old' => $xaction->getOldValue(),
85 'new' => $xaction->getNewValue(),