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