From b0720edaa0d51ee9e807495fa536d890d332c50d Mon Sep 17 00:00:00 2001 From: Alexandre Pretto Nunes Date: Tue, 6 Jan 2015 16:19:36 -0200 Subject: Update tests to refactored events behaviour --- web-ui/app/js/mail_list/ui/mail_list.js | 2 +- web-ui/app/js/tags/ui/tag.js | 2 + web-ui/test/features.js | 3 ++ .../spec/dispatchers/left_pane_dispatcher.spec.js | 32 -------------- web-ui/test/spec/mail_list/ui/mail_list.spec.js | 13 +----- web-ui/test/spec/search/search_trigger.spec.js | 22 ---------- web-ui/test/spec/services/mail_service.spec.js | 51 ++++++++-------------- web-ui/test/spec/tags/ui/tag.spec.js | 24 +++++++++- web-ui/test/spec/tags/ui/tag_list.spec.js | 35 ++++----------- web-ui/test/spec/tags/ui/tag_shortcut.spec.js | 4 +- 10 files changed, 60 insertions(+), 128 deletions(-) (limited to 'web-ui') diff --git a/web-ui/app/js/mail_list/ui/mail_list.js b/web-ui/app/js/mail_list/ui/mail_list.js index 11300346..3b0c23fb 100644 --- a/web-ui/app/js/mail_list/ui/mail_list.js +++ b/web-ui/app/js/mail_list/ui/mail_list.js @@ -125,7 +125,7 @@ define( }; this.updateCheckAllCheckbox = function () { - this.trigger(document, events.ui.mails.hasMailsChecked, {hasMailsChecked: this.attr.checkedMails.length > 0}); + this.trigger(document, events.ui.mails.hasMailsChecked, {hasMailsChecked: _.keys(this.attr.checkedMails).length > 0}); }; this.addToSelectedMails = function (ev, data) { diff --git a/web-ui/app/js/tags/ui/tag.js b/web-ui/app/js/tags/ui/tag.js index e6375034..dfedb137 100644 --- a/web-ui/app/js/tags/ui/tag.js +++ b/web-ui/app/js/tags/ui/tag.js @@ -65,6 +65,8 @@ define( this.triggerSelect = function () { this.trigger(document, events.ui.tag.select, { tag: this.attr.tag.name }); + + this.removeSearchingClass(); }; this.addSearchingClass = function() { diff --git a/web-ui/test/features.js b/web-ui/test/features.js index 29c6d87d..83d567d8 100644 --- a/web-ui/test/features.js +++ b/web-ui/test/features.js @@ -9,6 +9,9 @@ define([], function() { }, getLogoutUrl: function() { return '/test/logout/url'; + }, + isAutoRefreshEnabled: function() { + return true; } }; }); diff --git a/web-ui/test/spec/dispatchers/left_pane_dispatcher.spec.js b/web-ui/test/spec/dispatchers/left_pane_dispatcher.spec.js index df8169c6..a8b4946c 100644 --- a/web-ui/test/spec/dispatchers/left_pane_dispatcher.spec.js +++ b/web-ui/test/spec/dispatchers/left_pane_dispatcher.spec.js @@ -28,14 +28,6 @@ describeComponent('dispatchers/left_pane_dispatcher', function () { expect(pushStateEvent).toHaveBeenTriggeredOn(document, { tag: 'inbox'}); }); - it('fetches mails by tag when a tag is selected', function () { - var fetchByTagEvent = spyOnEvent(document, Pixelated.events.ui.mails.fetchByTag); - - $(document).trigger(Pixelated.events.ui.tag.selected, { tag: 'Drafts'}); - - expect(fetchByTagEvent).toHaveBeenTriggeredOn(document, { tag: 'Drafts'}); - }); - it('doesnt fetch mails by tag when skipMailListRefresh is sent on tag.selected', function () { var fetchByTagEvent = spyOnEvent(document, Pixelated.events.ui.mails.fetchByTag); @@ -51,29 +43,5 @@ describeComponent('dispatchers/left_pane_dispatcher', function () { expect(tagWantEvent).toHaveBeenTriggeredOn(document); }); - - it('fires tagLoad when the tags are received', function () { - var tagListLoadEvent = spyOnEvent(document, Pixelated.events.ui.tagList.load); - - this.$node.trigger(Pixelated.events.tags.received, { tags: ['tags']}); - - expect(tagListLoadEvent).toHaveBeenTriggeredOn(document, { tags: ['tags']}); - }); - - it('on tags loaded selects the inbox tag if no data is provided', function () { - var selectTagEvent = spyOnEvent(document, Pixelated.events.ui.tag.select); - - $(document).trigger(Pixelated.events.ui.tags.loaded, {}); - - expect(selectTagEvent).toHaveBeenTriggeredOnAndWith(document, { tag: 'inbox' }); - }); - - it('on tags loaded selects the a different tag if tag is provided', function () { - var selectTagEvent = spyOnEvent(document, Pixelated.events.ui.tag.select); - - $(document).trigger(Pixelated.events.ui.tags.loaded, { tag: 'Drafts' }); - - expect(selectTagEvent).toHaveBeenTriggeredOnAndWith(document, { tag: 'Drafts' }); - }); }); }); diff --git a/web-ui/test/spec/mail_list/ui/mail_list.spec.js b/web-ui/test/spec/mail_list/ui/mail_list.spec.js index 3950f032..095a2a61 100644 --- a/web-ui/test/spec/mail_list/ui/mail_list.spec.js +++ b/web-ui/test/spec/mail_list/ui/mail_list.spec.js @@ -104,22 +104,13 @@ describeComponent('mail_list/ui/mail_list', function () { expect(this.component.attr.checkedMails).toEqual({'2': {}, '3': {} }); }); - it ('does not check the all checkbox if no mail checked has the current tag', function () { - var setCheckAllCheckboxEvent = spyOnEvent(document, Pixelated.events.ui.mails.hasMailsChecked); - this.component.attr.currentTag = 'inbox'; - - $(document).trigger(Pixelated.events.ui.mail.checked, {mail : {'1' : {tags: ['different']}}}); - - expect(setCheckAllCheckboxEvent).toHaveBeenTriggeredOnAndWith(document, false); - }); - it('checks the check all checkbox if at least one mail is checked with the current tag', function () { var setCheckAllCheckboxEvent = spyOnEvent(document, Pixelated.events.ui.mails.hasMailsChecked); this.component.attr.currentTag = 'inbox'; $(document).trigger(Pixelated.events.ui.mail.checked, {mail: mailList[0]}); - expect(setCheckAllCheckboxEvent).toHaveBeenTriggeredOnAndWith(document, true); + expect(setCheckAllCheckboxEvent).toHaveBeenTriggeredOnAndWith(document, {hasMailsChecked: true}); }); it('unchecks the check all checkbox if no mail is left checked', function () { @@ -129,7 +120,7 @@ describeComponent('mail_list/ui/mail_list', function () { $(document).trigger(Pixelated.events.ui.mail.unchecked, {mail: {ident: '1'}}); - expect(setCheckAllCheckboxEvent).toHaveBeenTriggeredOnAndWith(document, false); + expect(setCheckAllCheckboxEvent).toHaveBeenTriggeredOnAndWith(document, {hasMailsChecked: false}); }); }); diff --git a/web-ui/test/spec/search/search_trigger.spec.js b/web-ui/test/spec/search/search_trigger.spec.js index 1cc72847..845bdc7d 100644 --- a/web-ui/test/spec/search/search_trigger.spec.js +++ b/web-ui/test/spec/search/search_trigger.spec.js @@ -22,28 +22,6 @@ describeComponent('search/search_trigger', function () { expect(spy).toHaveBeenTriggeredOnAndWith(document, { query: 'tanana' }); }); - it('should select the "all" tag when submit occurs but should skip mail list refresh', function (){ - var tagSelectEvent = spyOnEvent(document, Pixelated.events.ui.tag.select); - - submitSearch('tanana'); - - expect(tagSelectEvent).toHaveBeenTriggeredOnAndWith(document, { - tag: 'all', - skipMailListRefresh: true - }); - }); - - it('should select the "all" tag when an empty submit occurs and shoud refresh mail list', function() { - var tagSelectEvent = spyOnEvent(document, Pixelated.events.ui.tag.select); - var emptySearchEvent = spyOnEvent(document, Pixelated.events.search.empty); - - submitSearch(''); - - expect(emptySearchEvent).toHaveBeenTriggeredOn(document); - expect(tagSelectEvent).toHaveBeenTriggeredOnAndWith(document, { tag: 'all'}); - - }); - it('should clear input when selecting a new tag', function(){ submitSearch('tanana'); $(document).trigger(Pixelated.events.ui.tag.selected, { tag: 'inbox'}); diff --git a/web-ui/test/spec/services/mail_service.spec.js b/web-ui/test/spec/services/mail_service.spec.js index 7e95f20a..2de4e76b 100644 --- a/web-ui/test/spec/services/mail_service.spec.js +++ b/web-ui/test/spec/services/mail_service.spec.js @@ -36,7 +36,7 @@ describeComponent('services/mail_service', function () { uncheckedEmailsEvent = spyOnEvent(document, Pixelated.events.ui.mail.unchecked); setCheckAllEvent = spyOnEvent(document, Pixelated.events.ui.mails.hasMailsChecked); - spyOn(this.component, 'refreshResults'); + spyOn(this.component, 'refreshMails'); this.component.trigger(Pixelated.events.mail.read, {checkedMails: checkedMails}); }); @@ -48,7 +48,7 @@ describeComponent('services/mail_service', function () { it('will trigger that a message has been deleted when it is done deleting', function() { deferred.resolve(checkedMails); - expect(this.component.refreshResults).toHaveBeenCalled(); + expect(this.component.refreshMails).toHaveBeenCalled(); }); it('unchecks read emails', function () { @@ -90,14 +90,13 @@ describeComponent('services/mail_service', function () { }); it('updates the tags of the desired message', function () { - spyOn(this.component, 'refreshResults'); + spyOn(this.component, 'refreshMails'); var updateTagsReturnValue = { tags: ['website'], mailbox: 'inbox'}; var deferred = $.Deferred(); var spyAjax = spyOn($, 'ajax').and.returnValue(deferred); var spyEvent = spyOnEvent(document, Pixelated.events.mail.tags.updated); var component = jasmine.createSpyObj('component',['successUpdateTags']); - spyOn(this.component, 'fetchMail'); this.component.trigger(Pixelated.events.mail.tags.update, { ident: email1.ident, tags: email1.tags }); @@ -106,7 +105,7 @@ describeComponent('services/mail_service', function () { expect(spyEvent).toHaveBeenTriggeredOn(document); expect(spyAjax.calls.all()[0].args[0]).toEqual('/mail/1/tags'); expect(spyAjax.calls.all()[0].args[1].data).toEqual(JSON.stringify({ newtags: email1.tags } )); - expect(this.component.refreshResults).toHaveBeenCalled(); + expect(this.component.refreshMails).toHaveBeenCalled(); }); it('triggers an error message when it can\'t update the tags', function () { @@ -141,7 +140,7 @@ describeComponent('services/mail_service', function () { uncheckedEmailsEvent = spyOnEvent(document, Pixelated.events.ui.mail.unchecked); setCheckAllEvent = spyOnEvent(document, Pixelated.events.ui.mails.hasMailsChecked); mailsDeletedEvent = spyOnEvent(document, Pixelated.events.mail.deleted); - spyOn(this.component, 'refreshResults'); + spyOn(this.component, 'refreshMails'); this.component.triggerDeleted({ successMessage: 'A success message', @@ -150,7 +149,7 @@ describeComponent('services/mail_service', function () { }); it('will trigger that a message has been deleted when it is done deleting', function() { - expect(this.component.refreshResults).toHaveBeenCalled(); + expect(this.component.refreshMails).toHaveBeenCalled(); }); it('displays a success message', function () { @@ -187,7 +186,7 @@ describeComponent('services/mail_service', function () { var deferred = $.Deferred(); var spyAjax = spyOn($, 'ajax').and.returnValue(deferred); - this.component.trigger(Pixelated.events.ui.mails.fetchByTag, {tag: 'inbox'}); + this.component.trigger(Pixelated.events.ui.tag.selected, {tag: 'inbox'}); deferred.resolve({stats: {}, mails: [email1]}); @@ -199,25 +198,11 @@ describeComponent('services/mail_service', function () { it('wraps the tag in quotes before fetching by tag (to support tags with spaces)', function () { spyOn($, 'ajax').and.returnValue($.Deferred()); - this.component.trigger(Pixelated.events.ui.mails.fetchByTag, {tag: 'new tag'}); + this.component.trigger(Pixelated.events.ui.tag.selected, {tag: 'new tag'}); expect($.ajax.calls.mostRecent().args[0]).toContain(encodeURIComponent('tag:"new tag"')); }); - it('sends the previous tag when mails:refresh is called without a tag (this happens when the refresher calls it)', function () { - var eventSpy = spyOnEvent(document, Pixelated.events.mails.availableForRefresh); - this.component.attr.currentTag = 'sent'; - - var deferred = $.Deferred(); - var spyAjax = spyOn($, 'ajax').and.returnValue(deferred); - this.component.trigger(Pixelated.events.ui.mails.refresh); - - deferred.resolve({stats: {}, mails: [email1]}); - - expect(eventSpy.mostRecentCall.data.tag).toEqual('sent'); - expect(eventSpy.mostRecentCall.data.stats).toEqual({}); - }); - describe('pagination', function() { var pageChangedEvent; var deferred; @@ -226,7 +211,7 @@ describeComponent('services/mail_service', function () { pageChangedEvent = spyOnEvent(document, Pixelated.events.ui.page.changed); deferred = $.Deferred(); var spyAjax = spyOn($, 'ajax').and.returnValue(deferred); - spyOn(this.component, 'fetchMail').and.callThrough(); + spyOn(this.component, 'refreshMails').and.callThrough(); }); it('changes to the previous page and refetch email when ui:page:previous is fired', function() { @@ -234,7 +219,7 @@ describeComponent('services/mail_service', function () { this.component.trigger(Pixelated.events.ui.page.previous); - expect(this.component.fetchMail).toHaveBeenCalled(); + expect(this.component.refreshMails).toHaveBeenCalled(); expect(this.component.attr.currentPage).toEqual(1); }); @@ -243,7 +228,7 @@ describeComponent('services/mail_service', function () { this.component.trigger(Pixelated.events.ui.page.previous); - expect(this.component.fetchMail).not.toHaveBeenCalled(); + expect(this.component.refreshMails).not.toHaveBeenCalled(); expect(this.component.attr.currentPage).toEqual(1); }); @@ -253,7 +238,7 @@ describeComponent('services/mail_service', function () { this.component.trigger(Pixelated.events.ui.page.next); - expect(this.component.fetchMail).toHaveBeenCalled(); + expect(this.component.refreshMails).toHaveBeenCalled(); expect(this.component.attr.currentPage).toEqual(2); }); @@ -263,7 +248,7 @@ describeComponent('services/mail_service', function () { this.component.trigger(Pixelated.events.ui.page.next); - expect(this.component.fetchMail).not.toHaveBeenCalled(); + expect(this.component.refreshMails).not.toHaveBeenCalled(); expect(this.component.attr.currentPage).toEqual(9); }); @@ -286,7 +271,7 @@ describeComponent('services/mail_service', function () { it('resets currentPage when fetching mails by tag', function() { this.component.attr.numPages = 10; this.component.attr.currentPage = 999; - this.component.trigger(Pixelated.events.ui.mails.fetchByTag, {tag: 'inbox'}); + this.component.trigger(Pixelated.events.ui.tag.selected, {tag: 'inbox'}); expect(this.component.attr.currentPage).toEqual(1); expect(pageChangedEvent).toHaveBeenTriggeredOnAndWith(document, {currentPage: 1, numPages: 10}); @@ -302,10 +287,10 @@ describeComponent('services/mail_service', function () { it('should have 5 pages with a 100 results and w 20', function() { mailSetData.stats.total = 100; - this.component.attr.w = 20; + this.component.attr.pageSize = 20; this.component.attr.numPages = 0; - this.component.trigger(Pixelated.events.ui.mails.fetchByTag, {tag: 'another tag'}); + this.component.trigger(Pixelated.events.ui.tag.selected, {tag: 'another tag'}); deferred.resolve(mailSetData); expect(this.component.attr.numPages).toBe(5); @@ -313,10 +298,10 @@ describeComponent('services/mail_service', function () { it('should have 6 pages with a 101 results and w 20', function() { mailSetData.stats.total = 101; - this.component.attr.w = 20; + this.component.attr.pageSize = 20; this.component.attr.numPages = 0; - this.component.trigger(Pixelated.events.ui.mails.fetchByTag, {tag: 'another tag'}); + this.component.trigger(Pixelated.events.ui.tag.selected, {tag: 'another tag'}); deferred.resolve(mailSetData); expect(this.component.attr.numPages).toBe(6); diff --git a/web-ui/test/spec/tags/ui/tag.spec.js b/web-ui/test/spec/tags/ui/tag.spec.js index 3bc0c7fc..36fc83f2 100644 --- a/web-ui/test/spec/tags/ui/tag.spec.js +++ b/web-ui/test/spec/tags/ui/tag.spec.js @@ -23,7 +23,6 @@ describeComponent('tags/ui/tag', function () { this.component.$node.click(); - expect(this.component.attr.selected).toBeTruthy(); expect(this.$node.attr('class')).toMatch('selected'); expect(tagSelectEvent).toHaveBeenTriggeredOnAndWith(document, { tag: 'inbox' }); }); @@ -94,6 +93,18 @@ describeComponent('tags/ui/tag', function () { $(document).trigger(Pixelated.events.mail.read, { tags: ['inbox']}); expect(this.$node.html()).not.toMatch('"unread-count"'); }); + + it('should not be selected when a search is performed', function() { + this.component.trigger(document, Pixelated.events.search.perform); + + expect(this.component.$node).not.toHaveClass('selected'); + }); + + it('should not be selected when the search is cleared', function() { + this.component.trigger(document, Pixelated.events.search.empty); + + expect(this.component.$node).not.toHaveClass('selected'); + }); }); describe('drafts tag', function () { @@ -149,6 +160,17 @@ describeComponent('tags/ui/tag', function () { expect(this.$node.attr('class')).not.toMatch('searching'); }); + it('should be selected when a search is performed', function() { + this.component.trigger(document, Pixelated.events.search.perform); + + expect(this.component.$node).toHaveClass('selected'); + }); + + it('should be selected when the search is cleared', function() { + this.component.trigger(document, Pixelated.events.search.empty); + + expect(this.component.$node).toHaveClass('selected'); + }); }); _.each(['sent', 'trash'], function (tag_name) { diff --git a/web-ui/test/spec/tags/ui/tag_list.spec.js b/web-ui/test/spec/tags/ui/tag_list.spec.js index 72667b40..78bd84d9 100644 --- a/web-ui/test/spec/tags/ui/tag_list.spec.js +++ b/web-ui/test/spec/tags/ui/tag_list.spec.js @@ -27,7 +27,7 @@ describeComponent('tags/ui/tag_list', function () { this.component.attr.default = false; var tagList = [tag('tag1', 1), tag('tag2', 2), tag('tag3', 3)]; - $(document).trigger(Pixelated.events.ui.tagList.load, {tags: tagList}); + $(document).trigger(Pixelated.events.tags.received, {tags: tagList}); var items = _.map(this.$node.find('li'), function (el) { return $(el).attr('id'); @@ -39,7 +39,7 @@ describeComponent('tags/ui/tag_list', function () { it('should render the default tags when tagsList:load is received and default attribute is true', function () { var tagList = [tag('tag1', 1, false), tag('tag2', 2, true), tag('tag3', 3, true)]; - $(document).trigger(Pixelated.events.ui.tagList.load, {tags: tagList}); + $(document).trigger(Pixelated.events.tags.received, {tags: tagList}); var items = _.map(this.component.select('defaultTagList').find('li'), function (el) { return $(el).attr('id'); @@ -51,7 +51,7 @@ describeComponent('tags/ui/tag_list', function () { it('should render the custom tags when tagsList:load is received and default attribute is false', function () { var tagList = [tag('tag1', 1, false), tag('tag2', 2, true), tag('tag3', 3, true)]; - $(document).trigger(Pixelated.events.ui.tagList.load, {tags: tagList}); + $(document).trigger(Pixelated.events.tags.received, {tags: tagList}); var items = _.map(this.component.select('customTagList').find('li'), function (el) { return $(el).attr('id'); @@ -60,35 +60,18 @@ describeComponent('tags/ui/tag_list', function () { expect(items).toEqual(['tag-1']); }); - it('should trigger event to tell that tags were loaded sending the current tag', function () { - this.component.attr.currentTag = 'Drafts'; - var tagsLoadedEvent = spyOnEvent(document, Pixelated.events.ui.tags.loaded); - - $(document).trigger(Pixelated.events.ui.tagList.load, {tags: [] }); - - expect(tagsLoadedEvent).toHaveBeenTriggeredOnAndWith(document, { tag: 'Drafts'}); - }); - - it('should send tag as undefined when tags are loaded and no tag was selected yet', function () { - var tagsLoadedEvent = spyOnEvent(document, Pixelated.events.ui.tags.loaded); - - $(document).trigger(Pixelated.events.ui.tagList.load, {tags: [] }); - - expect(tagsLoadedEvent).toHaveBeenTriggeredOnAndWith(document, jasmine.objectContaining({ tag: undefined })); - }); - it('should save the current tag when a tag is selected', function () { - $(document).trigger(Pixelated.events.ui.tag.selected, { tag: 'amazing'}); + $(document).trigger(Pixelated.events.ui.tag.select, { tag: 'amazing'}); expect(this.component.attr.currentTag).toEqual('amazing'); }); it('resets the tag lists when loading tags', function () { var tagList = [tag('tag1', 1, false), tag('tag2', 2, true), tag('tag3', 3, true)]; - $(document).trigger(Pixelated.events.ui.tagList.load, {tags: tagList}); + $(document).trigger(Pixelated.events.tags.received, {tags: tagList}); tagList = [tag('tag1', 1, false), tag('tag2', 2, true)]; - $(document).trigger(Pixelated.events.ui.tagList.load, {tags: tagList}); + $(document).trigger(Pixelated.events.tags.received, {tags: tagList}); var customTags = _.map(this.component.select('customTagList').find('li'), function (el) { return $(el).attr('id'); @@ -103,10 +86,10 @@ describeComponent('tags/ui/tag_list', function () { it('resets the tag shortcuts when loading tags', function () { var tagList = [tag('inbox', 1, true)]; - $(document).trigger(Pixelated.events.ui.tagList.load, {tags: tagList}); + $(document).trigger(Pixelated.events.tags.received, {tags: tagList}); tagList = [tag('sent', 1, true)]; - $(document).trigger(Pixelated.events.ui.tagList.load, {tags: tagList}); + $(document).trigger(Pixelated.events.tags.received, {tags: tagList}); var shortcuts = _.map($('#tags-shortcuts').find('li'), function (el) { return $(el).text().trim(); @@ -120,7 +103,7 @@ describeComponent('tags/ui/tag_list', function () { var tagsTeardownDefault = spyOnEvent(this.component.select('defaultTagList'), Pixelated.events.tags.teardown); var tagsShortcutsTeardown = spyOnEvent(document, Pixelated.events.tags.shortcuts.teardown); - $(document).trigger(Pixelated.events.ui.tagList.load, {tags: []}); + $(document).trigger(Pixelated.events.tags.received, {tags: []}); expect(tagsTeardownCustom).toHaveBeenTriggeredOn(this.component.select('customTagList')); expect(tagsTeardownDefault).toHaveBeenTriggeredOn(this.component.select('defaultTagList')); diff --git a/web-ui/test/spec/tags/ui/tag_shortcut.spec.js b/web-ui/test/spec/tags/ui/tag_shortcut.spec.js index 7f015319..d1c7939a 100644 --- a/web-ui/test/spec/tags/ui/tag_shortcut.spec.js +++ b/web-ui/test/spec/tags/ui/tag_shortcut.spec.js @@ -12,7 +12,7 @@ describeComponent('tags/ui/tag_shortcut', function () { component = jasmine.createSpyObj('tagComponent', ['triggerSelect']); parent = $('