github.com/aminovpavel/nomad@v0.11.8/ui/tests/integration/streaming-file-test.js (about)

     1  import { run } from '@ember/runloop';
     2  import { find, settled } from '@ember/test-helpers';
     3  import { module, test } from 'qunit';
     4  import { setupRenderingTest } from 'ember-qunit';
     5  import hbs from 'htmlbars-inline-precompile';
     6  import Pretender from 'pretender';
     7  import { logEncode } from '../../mirage/data/logs';
     8  import fetch from 'nomad-ui/utils/fetch';
     9  import Log from 'nomad-ui/utils/classes/log';
    10  
    11  const { assign } = Object;
    12  
    13  const stringifyValues = obj =>
    14    Object.keys(obj).reduce((newObj, key) => {
    15      newObj[key] = obj[key].toString();
    16      return newObj;
    17    }, {});
    18  
    19  const makeLogger = (url, params) =>
    20    Log.create({
    21      url,
    22      params,
    23      plainText: true,
    24      logFetch: url => fetch(url).then(res => res),
    25    });
    26  
    27  module('Integration | Component | streaming file', function(hooks) {
    28    setupRenderingTest(hooks);
    29  
    30    hooks.beforeEach(function() {
    31      this.server = new Pretender(function() {
    32        this.get('/file/endpoint', () => [200, {}, 'Hello World']);
    33        this.get('/file/stream', () => [200, {}, logEncode(['Hello World'], 0)]);
    34      });
    35    });
    36  
    37    hooks.afterEach(function() {
    38      this.server.shutdown();
    39    });
    40  
    41    const commonTemplate = hbs`
    42      {{streaming-file logger=logger mode=mode isStreaming=isStreaming}}
    43    `;
    44  
    45    test('when mode is `head`, the logger signals head', async function(assert) {
    46      const url = '/file/endpoint';
    47      const params = { path: 'hello/world.txt', offset: 0, limit: 50000 };
    48      this.setProperties({
    49        logger: makeLogger(url, params),
    50        mode: 'head',
    51        isStreaming: false,
    52      });
    53  
    54      await this.render(commonTemplate);
    55      await settled();
    56  
    57      const request = this.server.handledRequests[0];
    58      assert.equal(this.server.handledRequests.length, 1, 'One request made');
    59      assert.equal(request.url.split('?')[0], url, `URL is ${url}`);
    60      assert.deepEqual(
    61        request.queryParams,
    62        stringifyValues(assign({ origin: 'start' }, params)),
    63        'Query params are correct'
    64      );
    65      assert.equal(find('[data-test-output]').textContent, 'Hello World');
    66    });
    67  
    68    test('when mode is `tail`, the logger signals tail', async function(assert) {
    69      const url = '/file/endpoint';
    70      const params = { path: 'hello/world.txt', limit: 50000 };
    71      this.setProperties({
    72        logger: makeLogger(url, params),
    73        mode: 'tail',
    74        isStreaming: false,
    75      });
    76  
    77      await this.render(commonTemplate);
    78      await settled();
    79  
    80      const request = this.server.handledRequests[0];
    81      assert.equal(this.server.handledRequests.length, 1, 'One request made');
    82      assert.equal(request.url.split('?')[0], url, `URL is ${url}`);
    83      assert.deepEqual(
    84        request.queryParams,
    85        stringifyValues(assign({ origin: 'end', offset: 50000 }, params)),
    86        'Query params are correct'
    87      );
    88      assert.equal(find('[data-test-output]').textContent, 'Hello World');
    89    });
    90  
    91    test('when mode is `streaming` and `isStreaming` is true, streaming starts', async function(assert) {
    92      const url = '/file/stream';
    93      const params = { path: 'hello/world.txt', limit: 50000 };
    94      this.setProperties({
    95        logger: makeLogger(url, params),
    96        mode: 'streaming',
    97        isStreaming: true,
    98      });
    99  
   100      assert.ok(true);
   101  
   102      run.later(run, run.cancelTimers, 500);
   103  
   104      await this.render(commonTemplate);
   105      await settled();
   106  
   107      const request = this.server.handledRequests[0];
   108      assert.equal(request.url.split('?')[0], url, `URL is ${url}`);
   109      assert.equal(find('[data-test-output]').textContent, 'Hello World');
   110    });
   111  });