diff --git a/src/js/app-controller.js b/src/js/app-controller.js index 9b0d209..b48be04 100644 --- a/src/js/app-controller.js +++ b/src/js/app-controller.js @@ -52,6 +52,15 @@ define(function(require) { }); }); + } else if (cmd === 'listFolders') { + // list folders in users mailbox + self._emailDao.imapListFolders(function(err, folders) { + callback({ + err: err, + folders: folders + }); + }); + } else if (cmd === 'syncEmails') { // list emails from folder self._emailDao.syncFromCloud(args.folder, function(err) { diff --git a/src/js/app-router.js b/src/js/app-router.js index 2009037..b0891e7 100644 --- a/src/js/app-router.js +++ b/src/js/app-router.js @@ -1,6 +1,6 @@ define(['jquery', 'backbone', 'js/view/login-view', 'js/view/compose-view', - 'js/view/folderlist-view', 'js/view/messagelist-view', 'js/view/read-view', - 'jquerymobile' + 'js/view/folderlist-view', 'js/view/messagelist-view', 'js/view/read-view', + 'jquerymobile' ], function($, Backbone, LoginView, ComposeView, FolderListView, MessageListView, ReadView) { 'use strict'; @@ -42,6 +42,7 @@ define(['jquery', 'backbone', 'js/view/login-view', 'js/view/compose-view', account: userId }); this.changePage(folderListView); + folderListView.listFolder(); }, messagelist: function(userId, folder) { diff --git a/src/js/dao/email-dao.js b/src/js/dao/email-dao.js index 0774df4..34f4d57 100644 --- a/src/js/dao/email-dao.js +++ b/src/js/dao/email-dao.js @@ -122,9 +122,9 @@ define(function(require) { * List the folders in the user's IMAP mailbox. */ EmailDAO.prototype.imapListFolders = function(callback) { - callback({ - errMsg: 'Not yet implemented!' - }); + var self = this; + + self._imapClient.listFolders(callback); }; /** diff --git a/src/js/view/folderlist-view.js b/src/js/view/folderlist-view.js index 5ca1fc7..90e4e1b 100644 --- a/src/js/view/folderlist-view.js +++ b/src/js/view/folderlist-view.js @@ -20,6 +20,30 @@ define(['jquery', 'underscore', 'backbone', 'js/app-config'], function($, _, Bac }); return this; + }, + + listFolder: function() { + // var page = $(this.el); + + // show loading msg during init + $.mobile.loading('show', { + text: 'Fetching folders...', + textVisible: true, + theme: 'c' + }); + + // post message to main window + app.util.postMessage('listFolders', {}, function(resArgs) { + var err = resArgs.err; + + $.mobile.loading('hide'); + if (err) { + window.alert(err.errMsg); + return; + } + + console.log(resArgs); + }); } }); diff --git a/test/new-unit/app-controller-test.js b/test/new-unit/app-controller-test.js index e5dcbdf..ea71d4f 100644 --- a/test/new-unit/app-controller-test.js +++ b/test/new-unit/app-controller-test.js @@ -78,6 +78,20 @@ define(function(require) { }); }); }); + + describe('listFolders', function() { + it('should work', function(done) { + controller._emailDao.imapListFolders.yields(null, ['inbox', 'sent']); + controller.execute('listFolders', { + password: appControllerTest.passphrase + }, function(resArgs) { + expect(resArgs.err).to.not.exist; + expect(resArgs.folders[1]).to.equal('sent'); + expect(controller._emailDao.imapListFolders.called).to.be.true; + done(); + }); + }); + }); }); }); diff --git a/test/new-unit/email-dao-test.js b/test/new-unit/email-dao-test.js index 9dceeca..2e3fe47 100644 --- a/test/new-unit/email-dao-test.js +++ b/test/new-unit/email-dao-test.js @@ -108,20 +108,33 @@ define(function(require) { }); }); - it('send an email via STMP bad case', function(done) { - emailDao.smtpSend({}, function(err) { - expect(smtpClientStub.send.called).to.be.false; - expect(err).to.exist; - done(); + describe('send email via SMTP', function() { + it('should fail due to back input', function(done) { + emailDao.smtpSend({}, function(err) { + expect(smtpClientStub.send.called).to.be.false; + expect(err).to.exist; + done(); + }); + }); + + it('send an email via STMP good case', function(done) { + smtpClientStub.send.yields(); + emailDao.smtpSend(dummyMail, function(err) { + expect(smtpClientStub.send.calledOnce).to.be.true; + expect(err).to.not.exist; + done(); + }); }); }); - it('send an email via STMP good case', function(done) { - smtpClientStub.send.yields(); - emailDao.smtpSend(dummyMail, function(err) { - expect(smtpClientStub.send.calledOnce).to.be.true; - expect(err).to.not.exist; - done(); + describe('list IMAP folders', function() { + it('should work', function(done) { + imapClientStub.listFolders.yields(); + emailDao.imapListFolders(function(err) { + expect(imapClientStub.listFolders.calledOnce).to.be.true; + expect(err).to.not.exist; + done(); + }); }); }); });