diff options
Diffstat (limited to 'web-ui/test')
-rw-r--r-- | web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js | 9 | ||||
-rw-r--r-- | web-ui/test/spec/feedback/feedback_trigger.spec.js | 38 | ||||
-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/compose_box.spec.js | 65 | ||||
-rw-r--r-- | web-ui/test/spec/mail_view/ui/draft_box.spec.js | 15 | ||||
-rw-r--r-- | web-ui/test/spec/mail_view/ui/draft_button.spec.js | 40 | ||||
-rw-r--r-- | web-ui/test/spec/mail_view/ui/feedback_box.spec.js | 45 | ||||
-rw-r--r-- | web-ui/test/spec/mail_view/ui/mail_view.spec.js | 10 | ||||
-rw-r--r-- | web-ui/test/spec/page/pane_contract_expand.spec.js | 7 | ||||
-rw-r--r-- | web-ui/test/test-main.js | 1 | ||||
-rw-r--r-- | web-ui/test/test_data.js | 29 |
11 files changed, 281 insertions, 5 deletions
diff --git a/web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js b/web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js index 4187610e..9df1d557 100644 --- a/web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js +++ b/web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js @@ -53,6 +53,14 @@ describeComponent('dispatchers/right_pane_dispatcher', function () { expect(pushStateEvent).toHaveBeenTriggeredOnAndWith(document, jasmine.objectContaining({ isDisplayNoMessageSelected: true })); }); + it('listens to open feedback event and open feedback box', function () { + var feedbackBox = require('mail_view/ui/feedback_box'); + spyOn(feedbackBox, 'attachTo'); + + this.component.trigger(document, Pixelated.events.dispatchers.rightPane.openFeedbackBox); + + expect(feedbackBox.attachTo).toHaveBeenCalled(); + }); }); @@ -66,6 +74,7 @@ describeComponent('dispatchers/right_pane_dispatcher', function () { }); }); + describe('on initialization', function () { var noMessageSelectedPane; diff --git a/web-ui/test/spec/feedback/feedback_trigger.spec.js b/web-ui/test/spec/feedback/feedback_trigger.spec.js new file mode 100644 index 00000000..3860fc79 --- /dev/null +++ b/web-ui/test/spec/feedback/feedback_trigger.spec.js @@ -0,0 +1,38 @@ +describeComponent('feedback/feedback_trigger', function () { + 'use strict'; + + describe('Feedback link', function () { + var features; + + beforeEach(function() { + features = require('features'); + }); + + it('Should provide feedback link if logout is enabled', function () { + spyOn(features, 'isEnabled').and.returnValue(true); + this.setupComponent('<nav id="feedback"></nav>', {}); + + var feedback_link = this.component.$node.find('a')[0]; + expect(feedback_link).toExist(); + }); + + it('Should not provide feedback link if disabled', function() { + spyOn(features, 'isEnabled').and.returnValue(false); + this.setupComponent('<nav id="feedback"></nav>', {}); + + var feedback_link = this.component.$node.find('a')[0]; + expect(feedback_link).not.toExist(); + }); + + it('Should trigger ui:feedback:open event on click', function () { + + this.setupComponent('<nav id="feedback"></nav>', {}); + var spy = spyOnEvent(document, Pixelated.events.dispatchers.rightPane.openFeedbackBox); + + this.$node.find('a').click(); + expect(spy).toHaveBeenTriggeredOn(document); + }); + + }); +}); + 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/compose_box.spec.js b/web-ui/test/spec/mail_view/ui/compose_box.spec.js index 414bc022..8e07481a 100644 --- a/web-ui/test/spec/mail_view/ui/compose_box.spec.js +++ b/web-ui/test/spec/mail_view/ui/compose_box.spec.js @@ -99,6 +99,15 @@ describeComponent('mail_view/ui/compose_box', function () { expect(openNoMessageSelectedPaneEvent).not.toHaveBeenTriggeredOn(document); }); + + it('should call the enableFloatlabel method when events.mail.here is trigged', function() { + spyOn(this.component, 'enableFloatlabel'); + + this.component.renderComposeBox(); + + expect(this.component.enableFloatlabel).toHaveBeenCalledWith('input.floatlabel'); + expect(this.component.enableFloatlabel).toHaveBeenCalledWith('textarea.floatlabel'); + }); }); describe('close button behavior', function() { @@ -126,4 +135,60 @@ describeComponent('mail_view/ui/compose_box', function () { })); }); }); + + describe('subject label', function() { + var input; + var label; + + beforeEach(function() { + input = $(this.component.$node).find('input'); + label = input.prev('label'); + + this.component.enableFloatlabel(input); + }); + + it('should show the subject label after the user starts typing', function() { + input.val('test'); + input.trigger('keyup'); + + expect(input.hasClass('showfloatlabel')).toEqual(true); + expect(label.hasClass('showfloatlabel')).toEqual(true); + }); + + it('should not show the subject label if the field is empty', function() { + input.val(''); + input.trigger('keyup'); + + expect(input.hasClass('showfloatlabel')).toEqual(false); + expect(label.hasClass('showfloatlabel')).toEqual(false); + }); + }); + + describe('body label', function() { + var textarea; + var label; + + beforeEach(function() { + textarea = $(this.component.$node).find('textarea'); + label = textarea.prev('label'); + + this.component.enableFloatlabel(textarea); + }); + + it('should show the subject label after the user starts typing', function() { + textarea.text('test'); + textarea.trigger('keyup'); + + expect(textarea.hasClass('showfloatlabel')).toEqual(true); + expect(label.hasClass('showfloatlabel')).toEqual(true); + }); + + it('should not show the subject label if the field is empty', function() { + textarea.text(''); + textarea.trigger('keyup'); + + expect(textarea.hasClass('showfloatlabel')).toEqual(false); + expect(label.hasClass('showfloatlabel')).toEqual(false); + }); + }); }); diff --git a/web-ui/test/spec/mail_view/ui/draft_box.spec.js b/web-ui/test/spec/mail_view/ui/draft_box.spec.js index 0113ca01..be3b4039 100644 --- a/web-ui/test/spec/mail_view/ui/draft_box.spec.js +++ b/web-ui/test/spec/mail_view/ui/draft_box.spec.js @@ -24,11 +24,8 @@ describeComponent('mail_view/ui/draft_box', function () { }); describe('after initialize', function () { - beforeEach(function () { - this.setupComponent({mailIdent: '1'}); - }); - it('renders the compose box when mail is received', function () { + this.setupComponent({mailIdent: '1'}); var templates = require('views/templates'); spyOn(this.component, 'render'); @@ -65,4 +62,14 @@ describeComponent('mail_view/ui/draft_box', function () { expect(openNoMessageSelectedEvent).toHaveBeenTriggeredOn(document); }); + it('should call the enableFloatlabel method when events.mail.here is trigged', function() { + this.setupComponent({mailIdent: mail.ident}); + spyOn(this.component, 'enableFloatlabel'); + + this.component.trigger(this.component, Pixelated.events.mail.here, { mail: mail }); + + expect(this.component.enableFloatlabel).toHaveBeenCalledWith('input.floatlabel'); + expect(this.component.enableFloatlabel).toHaveBeenCalledWith('textarea.floatlabel'); + }); + }); diff --git a/web-ui/test/spec/mail_view/ui/draft_button.spec.js b/web-ui/test/spec/mail_view/ui/draft_button.spec.js new file mode 100644 index 00000000..de607507 --- /dev/null +++ b/web-ui/test/spec/mail_view/ui/draft_button.spec.js @@ -0,0 +1,40 @@ +/* global Pixelated */ + +describeComponent('mail_view/ui/draft_button', function(){ + 'use strict'; + + describe('draft save button', function(){ + beforeEach(function(){ + this.setupComponent('<button></button>'); + }); + + describe('after initialize', function(){ + it('should be disabled', function(){ + expect(this.$node).toBeDisabled(); + }); + }); + + describe('when enabled', function(){ + beforeEach(function(){ + this.$node.prop('disabled', false); + }); + + it('should be disabled when saving draft message', function(){ + $(document).trigger(Pixelated.events.mail.saveDraft, {}); + expect(this.$node).toBeDisabled(); + }); + }); + + describe('when disabled', function(){ + beforeEach(function(){ + this.$node.prop('disabled', true); + }); + + it('should be enabled when draft message has been saved', function(){ + $(document).trigger(Pixelated.events.mail.draftSaved, {}); + expect(this.$node).not.toBeDisabled(); + }); + }); + + }); +}); 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 new file mode 100644 index 00000000..4702672c --- /dev/null +++ b/web-ui/test/spec/mail_view/ui/feedback_box.spec.js @@ -0,0 +1,45 @@ +describeComponent('mail_view/ui/feedback_box', function () { + 'use strict'; + beforeEach(function () { + Pixelated.mockBloodhound(); + this.setupComponent('<div></div>'); + }); + + + describe('close button behavior', function() { + + it('should fire Show no message selected if the close button is clicked', function() { + var spy = spyOnEvent(document, Pixelated.events.dispatchers.rightPane.openNoMessageSelected); + this.component.select('closeButton').click(); + expect(spy).toHaveBeenTriggeredOn(document); + }); + + }); + + describe('when submit feedback', 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('submitButton').click(); + 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); + + this.component.trigger(document, Pixelated.events.feedback.submitted); + expect(spy).toHaveBeenTriggeredOn(document); + }); + + it('should shows success message after submit', function () { + var spy = spyOnEvent(document, Pixelated.events.ui.userAlerts.displayMessage); + + this.component.trigger(document, Pixelated.events.feedback.submitted); + expect(spy).toHaveBeenTriggeredOnAndWith(document, {message: 'Thanks for your feedback!'}); + }); + + }); + +}); diff --git a/web-ui/test/spec/mail_view/ui/mail_view.spec.js b/web-ui/test/spec/mail_view/ui/mail_view.spec.js index deb7fb88..fe763919 100644 --- a/web-ui/test/spec/mail_view/ui/mail_view.spec.js +++ b/web-ui/test/spec/mail_view/ui/mail_view.spec.js @@ -265,6 +265,16 @@ describeComponent('mail_view/ui/mail_view', function () { expect(openNoMessageSelectedEvent).toHaveBeenTriggeredOn(document); }); + it('shows a download link for attachments', function() { + var withAttachments = {mail: Pixelated.testData().parsedMail.withAttachments}; + + this.component.displayMail({}, withAttachments); + + var attachmentLink = $(this.component.$node.find('.attachmentsArea li').html()); + var expectedLink = '/attachment/912ec803b2ce49e4a541068d495ab570?encoding=base64&filename=filename.txt'; + expect(attachmentLink.attr('href')) .toBe(expectedLink); + }); + function creatingEvent(event, keyCode) { var e = $.Event(event); e.which = keyCode; diff --git a/web-ui/test/spec/page/pane_contract_expand.spec.js b/web-ui/test/spec/page/pane_contract_expand.spec.js index 4f4ff49b..6c7ebcfc 100644 --- a/web-ui/test/spec/page/pane_contract_expand.spec.js +++ b/web-ui/test/spec/page/pane_contract_expand.spec.js @@ -44,6 +44,13 @@ describeComponent('page/pane_contract_expand', function () { expect($('#right-pane').attr('class')).toEqual(this.component.attr.RIGHT_PANE_EXPAND_CLASSES); }); + it('contracts middle pane and expands right pane on open draft', function () { + $(document).trigger(Pixelated.events.dispatchers.rightPane.openFeedbackBox); + + expect($('#middle-pane-container').attr('class')).toEqual(this.component.attr.MIDDLE_PANE_CONTRACT_CLASSES); + expect($('#right-pane').attr('class')).toEqual(this.component.attr.RIGHT_PANE_EXPAND_CLASSES); + }); + it('expands middle pane and contracts right pane on event on open no message selected pane', function () { $(document).trigger(Pixelated.events.dispatchers.rightPane.openNoMessageSelected); diff --git a/web-ui/test/test-main.js b/web-ui/test/test-main.js index 9cd5b12a..42ff1ba2 100644 --- a/web-ui/test/test-main.js +++ b/web-ui/test/test-main.js @@ -16,6 +16,7 @@ requirejs.config({ 'flight': 'app/bower_components/flight', 'views': 'app/js/views', 'helpers': 'app/js/helpers', + 'feedback': 'app/js/feedback', 'tags': 'app/js/tags', 'mail_list': 'app/js/mail_list', 'mail_list_actions': 'app/js/mail_list_actions', diff --git a/web-ui/test/test_data.js b/web-ui/test/test_data.js index 446fd7c6..62492bbe 100644 --- a/web-ui/test/test_data.js +++ b/web-ui/test/test_data.js @@ -202,6 +202,32 @@ define(function() { getMailPartByContentType: function () { return; } }; + var withAttachments = { + header: { + to:'jed_waelchi@cummerata.info', + from:'laurel@hamill.info', + subject:'Velit aut tempora animi ut nulla esse.', + date:'2014-06-04T14:41:13-03:00' + }, + ident:1, + tags:['textplain'], + mailbox: ['inbox'], + status:[], + textPlainBody: 'Hello Everyone', + isSentMail: function() { return false; }, + isDraftMail: function() { return false; }, + replyToAddress: function() { return { to: ['laurel@hamill.info'], cc: [] }; }, + replyToAllAddress: function() { return { to: ['laurel@hamill.info'], cc: [] }; }, + isMailMultipartAlternative: function() { return false; }, + availableBodyPartsContentType: function() { return []; }, + getMailPartByContentType: function() { return; }, + attachments: [{ + ident: '912ec803b2ce49e4a541068d495ab570', + name: 'filename.txt', + encoding: 'base64' + }] + }; + var testData = { rawMail: { mail: rawMail, @@ -215,7 +241,8 @@ define(function() { parsedMail: { simpleTextPlain: simpleTextPlainMail, html: htmlNoEncodingMail, - draft: draftMail + draft: draftMail, + withAttachments: withAttachments } }; |