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 });