github.com/hspak/nomad@v0.7.2-0.20180309000617-bc4ae22a39a5/ui/tests/integration/job-diff-test.js (about)

     1  import { findAll, find } from 'ember-native-dom-helpers';
     2  import { test, moduleForComponent } from 'ember-qunit';
     3  import hbs from 'htmlbars-inline-precompile';
     4  import cleanWhitespace from '../utils/clean-whitespace';
     5  
     6  moduleForComponent('job-diff', 'Integration | Component | job diff', {
     7    integration: true,
     8  });
     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', 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    this.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', 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    this.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  }