diff --git a/platform/exporters/ExportService.js b/platform/exporters/ExportService.js index 49ad8c2887..424fc4e153 100644 --- a/platform/exporters/ExportService.js +++ b/platform/exporters/ExportService.js @@ -29,10 +29,10 @@ define(['csv'], function (CSV) { ExportService.prototype.exportCSV = function (rows, options) { var headers = (options && options.headers) || - (Object.keys((rows[0] || {}).sort())), + (Object.keys((rows[0] || {})).sort()), filename = (options && options.filename) || "export.csv", csvText = new CSV(rows, { header: headers }).encode(), - blob = new Blob(csvText, { type: "text/csv" }); + blob = new Blob([ csvText ] , { type: "text/csv" }); this.saveAs(blob, filename); }; diff --git a/platform/exporters/ExportServiceSpec.js b/platform/exporters/ExportServiceSpec.js new file mode 100644 index 0000000000..7c54273209 --- /dev/null +++ b/platform/exporters/ExportServiceSpec.js @@ -0,0 +1,60 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define,describe,it,expect,beforeEach,waitsFor,jasmine*/ + +define( + ["./ExportService", "csv"], + function (ExportService, CSV) { + 'use strict'; + + describe("ExportService", function () { + var mockSaveAs, + testRows, + exportService; + + beforeEach(function () { + testRows = [ + { a: 1, b: 2, c: 3 }, + { a: 4, b: 5, c: 6 }, + { a: 7, b: 8, c: 9 } + ]; + mockSaveAs = jasmine.createSpy('saveAs'); + exportService = new ExportService(mockSaveAs); + }); + + describe("#exportCSV(rows)", function () { + beforeEach(function () { + exportService.exportCSV(testRows); + }); + + it("triggers saving of a file", function () { + expect(mockSaveAs).toHaveBeenCalledWith( + jasmine.any(Blob), + jasmine.any(String) + ); + }); + }); + + }); + + } +); \ No newline at end of file diff --git a/test-main.js b/test-main.js index 2e67985d60..9c9d715e21 100644 --- a/test-main.js +++ b/test-main.js @@ -46,6 +46,7 @@ requirejs.config({ "legacyRegistry": "src/legacyRegistry", "angular": "bower_components/angular/angular.min", "angular-route": "bower_components/angular-route/angular-route.min", + "csv": "bower_components/comma-separated-values/csv.min", "es6-promise": "bower_components/es6-promise/promise.min", "moment": "bower_components/moment/moment", "moment-duration-format": "bower_components/moment-duration-format/lib/moment-duration-format",