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

     1  import { run } from '@ember/runloop';
     2  import hbs from 'htmlbars-inline-precompile';
     3  import { findAll, find } from 'ember-native-dom-helpers';
     4  import { module, test } from 'qunit';
     5  import { setupRenderingTest } from 'ember-qunit';
     6  import { render, settled } from '@ember/test-helpers';
     7  import { startMirage } from 'nomad-ui/initializers/ember-cli-mirage';
     8  import { initialize as fragmentSerializerInitializer } from 'nomad-ui/initializers/fragment-serializer';
     9  
    10  module('Integration | Component | job-page/parts/placement-failures', function(hooks) {
    11    setupRenderingTest(hooks);
    12  
    13    hooks.beforeEach(function() {
    14      fragmentSerializerInitializer(this.owner);
    15      window.localStorage.clear();
    16      this.store = this.owner.lookup('service:store');
    17      this.server = startMirage();
    18      this.server.create('namespace');
    19    });
    20  
    21    hooks.afterEach(function() {
    22      this.server.shutdown();
    23      window.localStorage.clear();
    24    });
    25  
    26    test('when the job has placement failures, they are called out', function(assert) {
    27      this.server.create('job', { failedPlacements: true, createAllocations: false });
    28      this.store.findAll('job').then(jobs => {
    29        jobs.forEach(job => job.reload());
    30      });
    31  
    32      return settled().then(async () => {
    33        run(() => {
    34          this.set('job', this.store.peekAll('job').get('firstObject'));
    35        });
    36  
    37        await render(hbs`
    38          {{job-page/parts/placement-failures job=job}})
    39        `);
    40  
    41        return settled().then(() => {
    42          const failedEvaluation = this.get('job.evaluations')
    43            .filterBy('hasPlacementFailures')
    44            .sortBy('modifyIndex')
    45            .reverse()
    46            .get('firstObject');
    47          const failedTGAllocs = failedEvaluation.get('failedTGAllocs');
    48  
    49          assert.ok(find('[data-test-placement-failures]'), 'Placement failures section found');
    50  
    51          const taskGroupLabels = findAll('[data-test-placement-failure-task-group]').map(title =>
    52            title.textContent.trim()
    53          );
    54  
    55          failedTGAllocs.forEach(alloc => {
    56            const name = alloc.get('name');
    57            assert.ok(
    58              taskGroupLabels.find(label => label.includes(name)),
    59              `${name} included in placement failures list`
    60            );
    61            assert.ok(
    62              taskGroupLabels.find(label => label.includes(alloc.get('coalescedFailures') + 1)),
    63              'The number of unplaced allocs = CoalescedFailures + 1'
    64            );
    65          });
    66        });
    67      });
    68    });
    69  
    70    test('when the job has no placement failures, the placement failures section is gone', function(assert) {
    71      this.server.create('job', { noFailedPlacements: true, createAllocations: false });
    72      this.store.findAll('job');
    73  
    74      return settled().then(async () => {
    75        run(() => {
    76          this.set('job', this.store.peekAll('job').get('firstObject'));
    77        });
    78  
    79        await render(hbs`
    80          {{job-page/parts/placement-failures job=job}})
    81        `);
    82  
    83        return settled().then(() => {
    84          assert.notOk(
    85            find('[data-test-placement-failures]'),
    86            'Placement failures section not found'
    87          );
    88        });
    89      });
    90    });
    91  });