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