github.com/anuvu/nomad@v0.8.7-atom1/ui/tests/integration/job-page/parts/task-groups-test.js (about)

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