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 });