github.com/aminovpavel/nomad@v0.11.8/ui/tests/integration/job-diff-test.js (about)

     1  import { findAll, find, render } from '@ember/test-helpers';
     2  import { module, test } from 'qunit';
     3  import { setupRenderingTest } from 'ember-qunit';
     4  import hbs from 'htmlbars-inline-precompile';
     5  import cleanWhitespace from '../utils/clean-whitespace';
     6  
     7  module('Integration | Component | job diff', function(hooks) {
     8    setupRenderingTest(hooks);
     9  
    10    const commonTemplate = hbs`
    11      <div class="boxed-section">
    12        <div class="boxed-section-body is-dark">
    13          {{job-diff diff=diff}}
    14        </div>
    15      </div>
    16    `;
    17  
    18    test('job field diffs', async function(assert) {
    19      this.set('diff', {
    20        ID: 'test-case-1',
    21        Type: 'Edited',
    22        Objects: null,
    23        Fields: [
    24          field('Removed Field', 'deleted', 12),
    25          field('Added Field', 'added', 'Foobar'),
    26          field('Edited Field', 'edited', 512, 256),
    27        ],
    28      });
    29  
    30      await render(commonTemplate);
    31  
    32      assert.equal(
    33        findAll('[data-test-diff-section-label]').length,
    34        5,
    35        'A section label for each line, plus one for the group'
    36      );
    37      assert.equal(
    38        cleanWhitespace(
    39          find('[data-test-diff-section-label="field"][data-test-diff-field="added"]').textContent
    40        ),
    41        '+ Added Field: "Foobar"',
    42        'Added field is rendered correctly'
    43      );
    44      assert.equal(
    45        cleanWhitespace(
    46          find('[data-test-diff-section-label="field"][data-test-diff-field="edited"]').textContent
    47        ),
    48        '+/- Edited Field: "256" => "512"',
    49        'Edited field is rendered correctly'
    50      );
    51      assert.equal(
    52        cleanWhitespace(
    53          find('[data-test-diff-section-label="field"][data-test-diff-field="deleted"]').textContent
    54        ),
    55        '- Removed Field: "12"',
    56        'Removed field is rendered correctly'
    57      );
    58    });
    59  
    60    test('job object diffs', async function(assert) {
    61      this.set('diff', {
    62        ID: 'test-case-2',
    63        Type: 'Edited',
    64        Objects: [
    65          {
    66            Name: 'ComplexProperty',
    67            Type: 'Edited',
    68            Objects: null,
    69            Fields: [
    70              field('Prop 1', 'added', 'prop-1-value'),
    71              field('Prop 2', 'none', 'prop-2-is-the-same'),
    72              field('Prop 3', 'edited', 'new value', 'some old value'),
    73              field('Prop 4', 'deleted', 'delete me'),
    74            ],
    75          },
    76          {
    77            Name: 'DeepConfiguration',
    78            Type: 'Added',
    79            Objects: [
    80              {
    81                Name: 'VP Props',
    82                Type: 'Added',
    83                Objects: null,
    84                Fields: [
    85                  field('Engineering', 'added', 'Regina Phalange'),
    86                  field('Customer Support', 'added', 'Jerome Hendricks'),
    87                  field('HR', 'added', 'Jack Blue'),
    88                  field('Sales', 'added', 'Maria Lopez'),
    89                ],
    90              },
    91            ],
    92            Fields: [field('Executive Prop', 'added', 'in charge')],
    93          },
    94          {
    95            Name: 'DatedStuff',
    96            Type: 'Deleted',
    97            Objects: null,
    98            Fields: [field('Deprecated', 'deleted', 'useless')],
    99          },
   100        ],
   101        Fields: null,
   102      });
   103  
   104      await render(commonTemplate);
   105  
   106      assert.ok(
   107        cleanWhitespace(
   108          find('[data-test-diff-section-label="object"][data-test-diff-field="added"]').textContent
   109        ).startsWith('+ DeepConfiguration {'),
   110        'Added object starts with a JSON block'
   111      );
   112      assert.ok(
   113        cleanWhitespace(
   114          find('[data-test-diff-section-label="object"][data-test-diff-field="edited"]').textContent
   115        ).startsWith('+/- ComplexProperty {'),
   116        'Edited object starts with a JSON block'
   117      );
   118      assert.ok(
   119        cleanWhitespace(
   120          find('[data-test-diff-section-label="object"][data-test-diff-field="deleted"]').textContent
   121        ).startsWith('- DatedStuff {'),
   122        'Removed object starts with a JSON block'
   123      );
   124  
   125      assert.ok(
   126        cleanWhitespace(
   127          find('[data-test-diff-section-label="object"][data-test-diff-field="added"]').textContent
   128        ).endsWith('}'),
   129        'Added object ends the JSON block'
   130      );
   131      assert.ok(
   132        cleanWhitespace(
   133          find('[data-test-diff-section-label="object"][data-test-diff-field="edited"]').textContent
   134        ).endsWith('}'),
   135        'Edited object starts with a JSON block'
   136      );
   137      assert.ok(
   138        cleanWhitespace(
   139          find('[data-test-diff-section-label="object"][data-test-diff-field="deleted"]').textContent
   140        ).endsWith('}'),
   141        'Removed object ends the JSON block'
   142      );
   143  
   144      assert.equal(
   145        findAll(
   146          '[data-test-diff-section-label="object"][data-test-diff-field="added"] > [data-test-diff-section-label]'
   147        ).length,
   148        this.get('diff').Objects[1].Objects.length + this.get('diff').Objects[1].Fields.length,
   149        'Edited block contains each nested field and object'
   150      );
   151  
   152      assert.equal(
   153        findAll(
   154          '[data-test-diff-section-label="object"][data-test-diff-field="added"] [data-test-diff-section-label="object"] [data-test-diff-section-label="field"]'
   155        ).length,
   156        this.get('diff').Objects[1].Objects[0].Fields.length,
   157        'Objects within objects are rendered'
   158      );
   159    });
   160  
   161    function field(name, type, newVal, oldVal) {
   162      switch (type) {
   163        case 'added':
   164          return {
   165            Annotations: null,
   166            New: newVal,
   167            Old: '',
   168            Type: 'Added',
   169            Name: name,
   170          };
   171        case 'deleted':
   172          return {
   173            Annotations: null,
   174            New: '',
   175            Old: newVal,
   176            Type: 'Deleted',
   177            Name: name,
   178          };
   179        case 'edited':
   180          return {
   181            Annotations: null,
   182            New: newVal,
   183            Old: oldVal,
   184            Type: 'Edited',
   185            Name: name,
   186          };
   187      }
   188      return {
   189        Annotations: null,
   190        New: newVal,
   191        Old: oldVal,
   192        Type: 'None',
   193        Name: name,
   194      };
   195    }
   196  });