github.com/ferranbt/nomad@v0.9.3-0.20190607002617-85c449b7667c/ui/tests/integration/job-diff-test.js (about)

     1  import { findAll, find } from 'ember-native-dom-helpers';
     2  import { module, test } from 'qunit';
     3  import { setupRenderingTest } from 'ember-qunit';
     4  import { render } from '@ember/test-helpers';
     5  import hbs from 'htmlbars-inline-precompile';
     6  import cleanWhitespace from '../utils/clean-whitespace';
     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          {{job-diff 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  
    61    test('job object diffs', async function(assert) {
    62      this.set('diff', {
    63        ID: 'test-case-2',
    64        Type: 'Edited',
    65        Objects: [
    66          {
    67            Name: 'ComplexProperty',
    68            Type: 'Edited',
    69            Objects: null,
    70            Fields: [
    71              field('Prop 1', 'added', 'prop-1-value'),
    72              field('Prop 2', 'none', 'prop-2-is-the-same'),
    73              field('Prop 3', 'edited', 'new value', 'some old value'),
    74              field('Prop 4', 'deleted', 'delete me'),
    75            ],
    76          },
    77          {
    78            Name: 'DeepConfiguration',
    79            Type: 'Added',
    80            Objects: [
    81              {
    82                Name: 'VP Props',
    83                Type: 'Added',
    84                Objects: null,
    85                Fields: [
    86                  field('Engineering', 'added', 'Regina Phalange'),
    87                  field('Customer Support', 'added', 'Jerome Hendricks'),
    88                  field('HR', 'added', 'Jack Blue'),
    89                  field('Sales', 'added', 'Maria Lopez'),
    90                ],
    91              },
    92            ],
    93            Fields: [field('Executive Prop', 'added', 'in charge')],
    94          },
    95          {
    96            Name: 'DatedStuff',
    97            Type: 'Deleted',
    98            Objects: null,
    99            Fields: [field('Deprecated', 'deleted', 'useless')],
   100          },
   101        ],
   102        Fields: null,
   103      });
   104  
   105      await render(commonTemplate);
   106  
   107      assert.ok(
   108        cleanWhitespace(
   109          find('[data-test-diff-section-label="object"][data-test-diff-field="added"]').textContent
   110        ).startsWith('+ DeepConfiguration {'),
   111        'Added object starts with a JSON block'
   112      );
   113      assert.ok(
   114        cleanWhitespace(
   115          find('[data-test-diff-section-label="object"][data-test-diff-field="edited"]').textContent
   116        ).startsWith('+/- ComplexProperty {'),
   117        'Edited object starts with a JSON block'
   118      );
   119      assert.ok(
   120        cleanWhitespace(
   121          find('[data-test-diff-section-label="object"][data-test-diff-field="deleted"]').textContent
   122        ).startsWith('- DatedStuff {'),
   123        'Removed object starts with a JSON block'
   124      );
   125  
   126      assert.ok(
   127        cleanWhitespace(
   128          find('[data-test-diff-section-label="object"][data-test-diff-field="added"]').textContent
   129        ).endsWith('}'),
   130        'Added object ends the JSON block'
   131      );
   132      assert.ok(
   133        cleanWhitespace(
   134          find('[data-test-diff-section-label="object"][data-test-diff-field="edited"]').textContent
   135        ).endsWith('}'),
   136        'Edited object starts with a JSON block'
   137      );
   138      assert.ok(
   139        cleanWhitespace(
   140          find('[data-test-diff-section-label="object"][data-test-diff-field="deleted"]').textContent
   141        ).endsWith('}'),
   142        'Removed object ends the JSON block'
   143      );
   144  
   145      assert.equal(
   146        findAll(
   147          '[data-test-diff-section-label="object"][data-test-diff-field="added"] > [data-test-diff-section-label]'
   148        ).length,
   149        this.get('diff').Objects[1].Objects.length + this.get('diff').Objects[1].Fields.length,
   150        'Edited block contains each nested field and object'
   151      );
   152  
   153      assert.equal(
   154        findAll(
   155          '[data-test-diff-section-label="object"][data-test-diff-field="added"] [data-test-diff-section-label="object"] [data-test-diff-section-label="field"]'
   156        ).length,
   157        this.get('diff').Objects[1].Objects[0].Fields.length,
   158        'Objects within objects are rendered'
   159      );
   160    });
   161  
   162    function field(name, type, newVal, oldVal) {
   163      switch (type) {
   164        case 'added':
   165          return {
   166            Annotations: null,
   167            New: newVal,
   168            Old: '',
   169            Type: 'Added',
   170            Name: name,
   171          };
   172        case 'deleted':
   173          return {
   174            Annotations: null,
   175            New: '',
   176            Old: newVal,
   177            Type: 'Deleted',
   178            Name: name,
   179          };
   180        case 'edited':
   181          return {
   182            Annotations: null,
   183            New: newVal,
   184            Old: oldVal,
   185            Type: 'Edited',
   186            Name: name,
   187          };
   188      }
   189      return {
   190        Annotations: null,
   191        New: newVal,
   192        Old: oldVal,
   193        Type: 'None',
   194        Name: name,
   195      };
   196    }
   197  });