From 39569b526d17f1daf84ebfd4e1a763fd649f6550 Mon Sep 17 00:00:00 2001 From: Michael Lange Date: Thu, 1 Apr 2021 17:46:11 -0700 Subject: [PATCH 1/2] Cleanup: Use this.attr in test templates --- ui/tests/integration/components/fs/file-test.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ui/tests/integration/components/fs/file-test.js b/ui/tests/integration/components/fs/file-test.js index 90762357f..709d7125d 100644 --- a/ui/tests/integration/components/fs/file-test.js +++ b/ui/tests/integration/components/fs/file-test.js @@ -3,6 +3,7 @@ import { setupRenderingTest } from 'ember-qunit'; import { find, click, render, settled } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; import Pretender from 'pretender'; +import sinon from 'sinon'; import { logEncode } from '../../../../mirage/data/logs'; import { componentA11yAudit } from 'nomad-ui/tests/helpers/a11y-audit'; @@ -33,7 +34,7 @@ module('Integration | Component | fs/file', function(hooks) { }); const commonTemplate = hbs` - + `; const fileStat = (type, size = 0) => ({ @@ -217,7 +218,7 @@ module('Integration | Component | fs/file', function(hooks) { this.setProperties(props); await render(hbs` - +
Yielded content
`); From 751eb392c39736f95cd3976ead5b4cb11e8438d0 Mon Sep 17 00:00:00 2001 From: Michael Lange Date: Thu, 1 Apr 2021 17:46:21 -0700 Subject: [PATCH 2/2] Stop downloading files in tests --- ui/app/components/fs/file.js | 60 +++++++++++-------- .../integration/components/fs/file-test.js | 1 - 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/ui/app/components/fs/file.js b/ui/app/components/fs/file.js index 2be3cd691..15be2642f 100644 --- a/ui/app/components/fs/file.js +++ b/ui/app/components/fs/file.js @@ -1,3 +1,4 @@ +import Ember from 'ember'; import { inject as service } from '@ember/service'; import Component from '@ember/component'; import { action, computed } from '@ember/object'; @@ -167,32 +168,39 @@ export default class File extends Component { } @action - downloadFile() { + async downloadFile() { const timing = this.useServer ? this.serverTimeout : this.clientTimeout; - const fileDownload = url => - RSVP.race([this.token.authorizedRequest(url), timeout(timing)]) - .then( - response => { - if (!response || !response.ok) { - this.nextErrorState(response); - } - return response; - }, - error => this.nextErrorState(error) - ) - .then(response => response.blob()) - .then(blob => { - var url = window.URL.createObjectURL(blob); - var a = document.createElement('a'); - a.href = url; - a.target = '_blank'; - a.rel = 'noopener noreferrer'; - a.download = this.file; - document.body.appendChild(a); // we need to append the element to the dom -> otherwise it will not work in firefox - a.click(); - a.remove(); //afterwards we remove the element again - window.URL.revokeObjectURL(url); - }); - fileDownload(this.catUrlWithoutRegion); + + try { + const response = await RSVP.race([ + this.token.authorizedRequest(this.catUrlWithoutRegion), + timeout(timing), + ]); + + if (!response || !response.ok) throw new Error('file download timeout'); + + // Don't download in tests. Unfortunately, since the download is triggered + // by the download attribute of the ephemeral anchor element, there's no + // way to stub this in tests. + if (Ember.testing) return; + + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const downloadAnchor = document.createElement('a'); + + downloadAnchor.href = url; + downloadAnchor.target = '_blank'; + downloadAnchor.rel = 'noopener noreferrer'; + downloadAnchor.download = this.file; + + // Appending the element to the DOM is required for Firefox support + document.body.appendChild(downloadAnchor); + downloadAnchor.click(); + downloadAnchor.remove(); + + window.URL.revokeObjectURL(url); + } catch (err) { + this.nextErrorState(err); + } } } diff --git a/ui/tests/integration/components/fs/file-test.js b/ui/tests/integration/components/fs/file-test.js index 709d7125d..79d844637 100644 --- a/ui/tests/integration/components/fs/file-test.js +++ b/ui/tests/integration/components/fs/file-test.js @@ -3,7 +3,6 @@ import { setupRenderingTest } from 'ember-qunit'; import { find, click, render, settled } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; import Pretender from 'pretender'; -import sinon from 'sinon'; import { logEncode } from '../../../../mirage/data/logs'; import { componentA11yAudit } from 'nomad-ui/tests/helpers/a11y-audit';