diff options
| -rw-r--r-- | web-ui/app/js/mail_view/data/feedback_sender.js | 49 | ||||
| -rw-r--r-- | web-ui/app/js/mail_view/ui/feedback_box.js | 4 | ||||
| -rw-r--r-- | web-ui/test/spec/mail_view/data/feedback_sender.spec.js | 27 | ||||
| -rw-r--r-- | web-ui/test/spec/mail_view/ui/feedback_box.spec.js | 6 | 
4 files changed, 81 insertions, 5 deletions
diff --git a/web-ui/app/js/mail_view/data/feedback_sender.js b/web-ui/app/js/mail_view/data/feedback_sender.js new file mode 100644 index 00000000..2232dbe4 --- /dev/null +++ b/web-ui/app/js/mail_view/data/feedback_sender.js @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2015 ThoughtWorks, Inc. + * + * Pixelated is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Pixelated is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + */ +define( +  [ +    'flight/lib/component', +    'helpers/monitored_ajax', +    'page/events' +  ], +  function (defineComponent, monitoredAjax, events) { +    'use strict'; + +  return defineComponent(function () { +    this.defaultAttrs({ +      feedbackResource: '/feedback' +    }); + +    this.successSubmittingFeedback = function() { +      this.trigger(document, events.feedback.submitted); +    }; + +    this.submitFeedback = function(event, data) { +      monitoredAjax.call(_, this, this.attr.feedbackResource, { +        type: 'POST', +        dataType: 'json', +        contentType: 'application/json; charset=utf-8', +        data: JSON.stringify(data) +      }).done(this.successSubmittingFeedback()); +    }; + +    this.after('initialize', function () { +      this.on(document, events.feedback.submit, this.submitFeedback); +    }); + +  }); +}); diff --git a/web-ui/app/js/mail_view/ui/feedback_box.js b/web-ui/app/js/mail_view/ui/feedback_box.js index f6994554..aad35f2a 100644 --- a/web-ui/app/js/mail_view/ui/feedback_box.js +++ b/web-ui/app/js/mail_view/ui/feedback_box.js @@ -43,8 +43,8 @@ define(['flight/lib/component', 'views/templates', 'page/events', 'features'],      this.submitFeedback = function () {        var feedback = this.select('textBox').val(); -      this.trigger(document, events.feedback.submit, { feedback: feedback}); -    } +      this.trigger(document, events.feedback.submit, { feedback: feedback }); +    };      this.after('initialize', function () {        if (features.isEnabled('feedback')) { diff --git a/web-ui/test/spec/mail_view/data/feedback_sender.spec.js b/web-ui/test/spec/mail_view/data/feedback_sender.spec.js new file mode 100644 index 00000000..30952c3f --- /dev/null +++ b/web-ui/test/spec/mail_view/data/feedback_sender.spec.js @@ -0,0 +1,27 @@ +describeComponent('mail_view/data/feedback_sender', function () { +  'use strict'; + + +  beforeEach(function () { +    this.setupComponent(); +  }); + +  it('sends feedback with a POST to the server', function() { +    var data = {feedback: 'Pixelated is awesome!'}; +    var feedbackSubmittedEventSpy = spyOnEvent(document, Pixelated.events.feedback.submitted); +    var deferred = $.Deferred(); + +    spyOn($, 'ajax').and.returnValue(deferred); + +    this.component.trigger(document, Pixelated.events.feedback.submit, data); + +    deferred.resolve(); + +    expect(feedbackSubmittedEventSpy).toHaveBeenTriggeredOn(document); + +    expect($.ajax.calls.mostRecent().args[0]).toEqual('/feedback'); +    expect($.ajax.calls.mostRecent().args[1].type).toEqual('POST'); +    expect(JSON.parse($.ajax.calls.mostRecent().args[1].data)).toEqual(data); +  }); + +}); diff --git a/web-ui/test/spec/mail_view/ui/feedback_box.spec.js b/web-ui/test/spec/mail_view/ui/feedback_box.spec.js index a034b028..f0d55791 100644 --- a/web-ui/test/spec/mail_view/ui/feedback_box.spec.js +++ b/web-ui/test/spec/mail_view/ui/feedback_box.spec.js @@ -21,10 +21,10 @@ describeComponent('mail_view/ui/feedback_box', function () {      it('should fire submit feedback event', function () {        var spy = spyOnEvent(document, Pixelated.events.feedback.submit); -      this.component.select("textBox").val("Pixelated is Awesome!"); +      this.component.select('textBox').val('Pixelated is Awesome!');        this.component.select('submitButton').click(); -      expect(spy).toHaveBeenTriggeredOnAndWith(document, {feedback: "Pixelated is Awesome!"}); -    }) +      expect(spy).toHaveBeenTriggeredOnAndWith(document, {feedback: 'Pixelated is Awesome!'}); +    });      it('should close feedback box after submit', function() {        var spy = spyOnEvent(document, Pixelated.events.dispatchers.rightPane.openNoMessageSelected);  | 
