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