diff --git a/lms/djangoapps/teams/static/teams/js/spec/views/manage_spec.js b/lms/djangoapps/teams/static/teams/js/spec/views/manage_spec.js index a18f5859b0..49d9cd4785 100644 --- a/lms/djangoapps/teams/static/teams/js/spec/views/manage_spec.js +++ b/lms/djangoapps/teams/static/teams/js/spec/views/manage_spec.js @@ -11,7 +11,7 @@ define([ describe('Team Management Dashboard', function() { var view; var uploadFile = new File([], 'empty-test-file.csv'); - var mockUploadClickEvent = {target: {files: [uploadFile]}}; + var mockFileSelectEvent = {target: {files: [uploadFile]}}; beforeEach(function() { setFixtures('
'); @@ -24,13 +24,14 @@ define([ }); it('can render itself', function() { - expect(_.strip(view.$('.download-team-csv').text())).toEqual('Download Memberships'); - expect(_.strip(view.$('.upload-team-csv').text())).toEqual('Upload Memberships'); + expect(_.strip(view.$('#download-team-csv').text())).toEqual('Download Memberships'); + expect(_.strip(view.$('#upload-team-csv').text())).toEqual('Upload Memberships'); }); it('can handle a successful file upload', function() { var requests = AjaxHelpers.requests(this); - view.uploadCsv(mockUploadClickEvent); + view.setTeamMembershipCsv(mockFileSelectEvent); + view.uploadCsv(); AjaxHelpers.expectRequest(requests, 'POST', view.csvUploadUrl); AjaxHelpers.respondWithJson(requests, {}); expect(view.handleCsvUploadSuccess).toHaveBeenCalled(); @@ -38,15 +39,11 @@ define([ it('can handle a failed file upload', function() { var requests = AjaxHelpers.requests(this); - view.uploadCsv(mockUploadClickEvent); + view.setTeamMembershipCsv(mockFileSelectEvent); + view.uploadCsv(); AjaxHelpers.expectRequest(requests, 'POST', view.csvUploadUrl); AjaxHelpers.respondWithError(requests); expect(view.handleCsvUploadFailure).toHaveBeenCalled(); }); - - it('should clear input file after upload to allow reuploading', function() { - view.uploadCsv(mockUploadClickEvent); - expect(view.$('#upload-team-csv-input').prop('value')).toEqual(''); - }); }); }); diff --git a/lms/djangoapps/teams/static/teams/js/views/manage.js b/lms/djangoapps/teams/static/teams/js/views/manage.js index f319d8e76a..6c3903217b 100644 --- a/lms/djangoapps/teams/static/teams/js/views/manage.js +++ b/lms/djangoapps/teams/static/teams/js/views/manage.js @@ -17,8 +17,9 @@ }, events: { - 'click #download-team-csv-input': 'downloadCsv', - 'change #upload-team-csv-input': ViewUtils.withDisabledElement('uploadCsv') + 'click #download-team-csv': 'downloadCsv', + 'change #upload-team-csv-input': 'setTeamMembershipCsv', + 'click #upload-team-csv': ViewUtils.withDisabledElement('uploadCsv') }, initialize: function(options) { @@ -39,33 +40,38 @@ window.location.href = this.csvDownloadUrl; }, - uploadCsv: function(event) { - var file = event.target.files[0]; - var self = this; + setTeamMembershipCsv: function(event) { + this.membershipFile = event.target.files[0]; + + // enable the upload button when a file is selected + if (this.membershipFile) { + $('#upload-team-csv').removeClass('is-disabled').attr('aria-disabled', false); + } else { + $('#upload-team-csv').addClass('is-disabled').attr('aria-disabled', true); + } + }, + + uploadCsv: function() { var formData = new FormData(); + formData.append('csv', this.membershipFile); // xss-lint: disable=javascript-jquery-append - // clear selected file to allow re-uploading - $(event.target).prop('value', ''); - - formData.append('csv', file); // xss-lint: disable=javascript-jquery-append return $.ajax({ type: 'POST', - url: self.csvUploadUrl, + url: this.csvUploadUrl, data: formData, processData: false, // tell jQuery not to process the data contentType: false // tell jQuery not to set contentType }).done( - self.handleCsvUploadSuccess + this.handleCsvUploadSuccess ).fail( - self.handleCsvUploadFailure + this.handleCsvUploadFailure ); }, handleCsvUploadSuccess: function(data) { TeamUtils.showInfoBanner(data.message, false); - // This handler is currently unimplemented (TODO MST-44) - this.teamEvents.trigger('teams:update', {}); + // Implement a teams:update event (TODO MST-44) }, handleCsvUploadFailure: function(jqXHR) { diff --git a/lms/djangoapps/teams/static/teams/templates/manage.underscore b/lms/djangoapps/teams/static/teams/templates/manage.underscore index 8dd1b32dd1..373ea054c8 100644 --- a/lms/djangoapps/teams/static/teams/templates/manage.underscore +++ b/lms/djangoapps/teams/static/teams/templates/manage.underscore @@ -11,7 +11,7 @@ ) %>