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