summaryrefslogtreecommitdiff
path: root/web-ui/test
diff options
context:
space:
mode:
Diffstat (limited to 'web-ui/test')
-rw-r--r--web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js9
-rw-r--r--web-ui/test/spec/feedback/feedback_trigger.spec.js38
-rw-r--r--web-ui/test/spec/mail_view/data/feedback_sender.spec.js27
-rw-r--r--web-ui/test/spec/mail_view/ui/compose_box.spec.js65
-rw-r--r--web-ui/test/spec/mail_view/ui/draft_box.spec.js15
-rw-r--r--web-ui/test/spec/mail_view/ui/draft_button.spec.js40
-rw-r--r--web-ui/test/spec/mail_view/ui/feedback_box.spec.js45
-rw-r--r--web-ui/test/spec/mail_view/ui/mail_view.spec.js10
-rw-r--r--web-ui/test/spec/page/pane_contract_expand.spec.js7
-rw-r--r--web-ui/test/test-main.js1
-rw-r--r--web-ui/test/test_data.js29
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
}
};