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

     1  import { assign } from '@ember/polyfills';
     2  import hbs from 'htmlbars-inline-precompile';
     3  import { click, 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 sinon from 'sinon';
     8  import { startMirage } from 'nomad-ui/initializers/ember-cli-mirage';
     9  import { initialize as fragmentSerializerInitializer } from 'nomad-ui/initializers/fragment-serializer';
    10  
    11  module('Integration | Component | job-page/parts/task-groups', function(hooks) {
    12    setupRenderingTest(hooks);
    13  
    14    hooks.beforeEach(function() {
    15      fragmentSerializerInitializer(this.owner);
    16      window.localStorage.clear();
    17      this.store = this.owner.lookup('service:store');
    18      this.server = startMirage();
    19      this.server.create('namespace');
    20    });
    21  
    22    hooks.afterEach(function() {
    23      this.server.shutdown();
    24    });
    25  
    26    const props = (job, options = {}) =>
    27      assign(
    28        {
    29          job,
    30          sortProperty: 'name',
    31          sortDescending: true,
    32          gotoTaskGroup: () => {},
    33        },
    34        options
    35      );
    36  
    37    test('the job detail page should list all task groups', function(assert) {
    38      this.server.create('job', {
    39        createAllocations: false,
    40      });
    41  
    42      this.store.findAll('job').then(jobs => {
    43        jobs.forEach(job => job.reload());
    44      });
    45  
    46      return settled().then(async () => {
    47        const job = this.store.peekAll('job').get('firstObject');
    48        this.setProperties(props(job));
    49  
    50        await render(hbs`
    51          {{job-page/parts/task-groups
    52            job=job
    53            sortProperty=sortProperty
    54            sortDescending=sortDescending
    55            gotoTaskGroup=gotoTaskGroup}}
    56        `);
    57  
    58        return settled().then(() => {
    59          assert.equal(
    60            findAll('[data-test-task-group]').length,
    61            job.get('taskGroups.length'),
    62            'One row per task group'
    63          );
    64        });
    65      });
    66    });
    67  
    68    test('each row in the task group table should show basic information about the task group', function(assert) {
    69      this.server.create('job', {
    70        createAllocations: false,
    71      });
    72  
    73      this.store.findAll('job').then(jobs => {
    74        jobs.forEach(job => job.reload());
    75      });
    76  
    77      return settled().then(async () => {
    78        const job = this.store.peekAll('job').get('firstObject');
    79        const taskGroup = job
    80          .get('taskGroups')
    81          .sortBy('name')
    82          .reverse()
    83          .get('firstObject');
    84  
    85        this.setProperties(props(job));
    86  
    87        await render(hbs`
    88          {{job-page/parts/task-groups
    89            job=job
    90            sortProperty=sortProperty
    91            sortDescending=sortDescending
    92            gotoTaskGroup=gotoTaskGroup}}
    93        `);
    94  
    95        return settled().then(() => {
    96          const taskGroupRow = find('[data-test-task-group]');
    97  
    98          assert.equal(
    99            taskGroupRow.querySelector('[data-test-task-group-name]').textContent.trim(),
   100            taskGroup.get('name'),
   101            'Name'
   102          );
   103          assert.equal(
   104            taskGroupRow.querySelector('[data-test-task-group-count]').textContent.trim(),
   105            taskGroup.get('count'),
   106            'Count'
   107          );
   108          assert.equal(
   109            taskGroupRow.querySelector('[data-test-task-group-cpu]').textContent.trim(),
   110            `${taskGroup.get('reservedCPU')} MHz`,
   111            'Reserved CPU'
   112          );
   113          assert.equal(
   114            taskGroupRow.querySelector('[data-test-task-group-mem]').textContent.trim(),
   115            `${taskGroup.get('reservedMemory')} MiB`,
   116            'Reserved Memory'
   117          );
   118          assert.equal(
   119            taskGroupRow.querySelector('[data-test-task-group-disk]').textContent.trim(),
   120            `${taskGroup.get('reservedEphemeralDisk')} MiB`,
   121            'Reserved Disk'
   122          );
   123        });
   124      });
   125    });
   126  
   127    test('gotoTaskGroup is called when task group rows are clicked', function(assert) {
   128      this.server.create('job', {
   129        createAllocations: false,
   130      });
   131  
   132      this.store.findAll('job').then(jobs => {
   133        jobs.forEach(job => job.reload());
   134      });
   135  
   136      return settled().then(async () => {
   137        const taskGroupSpy = sinon.spy();
   138        const job = this.store.peekAll('job').get('firstObject');
   139        const taskGroup = job
   140          .get('taskGroups')
   141          .sortBy('name')
   142          .reverse()
   143          .get('firstObject');
   144  
   145        this.setProperties(
   146          props(job, {
   147            gotoTaskGroup: taskGroupSpy,
   148          })
   149        );
   150  
   151        await render(hbs`
   152          {{job-page/parts/task-groups
   153            job=job
   154            sortProperty=sortProperty
   155            sortDescending=sortDescending
   156            gotoTaskGroup=gotoTaskGroup}}
   157        `);
   158  
   159        return settled().then(() => {
   160          click('[data-test-task-group]');
   161          assert.ok(
   162            taskGroupSpy.withArgs(taskGroup).calledOnce,
   163            'Clicking the task group row calls the gotoTaskGroup action'
   164          );
   165        });
   166      });
   167    });
   168  });