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