From f50eb0398f5e20f59eb0361166f5ac56d78b94c0 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 28 May 2015 16:54:41 -0300 Subject: [PATCH 1/2] add export csv group feature --- .../SubscriptionGroupController.coffee | 17 +++++++++++++++++ .../Subscription/SubscriptionRouter.coffee | 2 +- .../app/views/subscriptions/group_admin.jade | 4 +++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionGroupController.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionGroupController.coffee index 674c5affbe..a85c2cc15f 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionGroupController.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionGroupController.coffee @@ -32,3 +32,20 @@ module.exports = title: 'group_admin' users: users subscription: subscription + + exportGroupCsv: (req, res)-> + user_id = req.session.user._id + logger.log user_id: user_id, "exporting group csv" + SubscriptionLocator.getUsersSubscription user_id, (err, subscription)-> + if !subscription.groupPlan + return res.redirect("/") + SubscriptionGroupHandler.getPopulatedListOfMembers user_id, (err, users)-> + groupCsv = "" + for user in users + groupCsv += user.email + "\n" + res.header( + "Content-Disposition", + "attachment; filename=Group.csv" + ) + res.contentType('text/csv') + res.send(groupCsv) diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionRouter.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionRouter.coffee index 963ff3dfcf..59403e1e3b 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionRouter.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionRouter.coffee @@ -23,7 +23,7 @@ module.exports = app.get '/subscription/group', AuthenticationController.requireLogin(), SubscriptionGroupController.renderSubscriptionGroupAdminPage app.post '/subscription/group/user', AuthenticationController.requireLogin(), SubscriptionGroupController.addUserToGroup app.del '/subscription/group/user/:user_id', AuthenticationController.requireLogin(), SubscriptionGroupController.removeUserFromGroup - + app.get '/subscription/group/export', AuthenticationController.requireLogin(), SubscriptionGroupController.exportGroupCsv #recurly callback app.post '/user/subscription/callback', SubscriptionController.recurlyNotificationParser, SubscriptionController.recurlyCallback diff --git a/services/web/app/views/subscriptions/group_admin.jade b/services/web/app/views/subscriptions/group_admin.jade index 07afd244f9..3ed9974480 100644 --- a/services/web/app/views/subscriptions/group_admin.jade +++ b/services/web/app/views/subscriptions/group_admin.jade @@ -73,8 +73,10 @@ block content ng-model="inputs.emails", on-enter="addMembers()" ) - .col-xs-6 + .col-xs-4 button.btn.btn-primary(ng-click="addMembers()") #{translate("add")} + .col-xs-2 + a(href="/subscription/group/export") Export CSV script(type="text/javascript"). window.users = !{JSON.stringify(users)}; From f709ddf3eb8021b104ea6db6ec75305f05da4254 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Thu, 28 May 2015 17:22:49 -0300 Subject: [PATCH 2/2] add csv export unit tests --- .../SubscriptionGroupControllerTests.coffee | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupControllerTests.coffee b/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupControllerTests.coffee index 28279a1296..4c24b42f11 100644 --- a/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/Subscription/SubscriptionGroupControllerTests.coffee @@ -3,16 +3,17 @@ should = require('chai').should() sinon = require 'sinon' assert = require("chai").assert modulePath = "../../../../app/js/Features/Subscription/SubscriptionGroupController" - +MockResponse = require "../helpers/MockResponse" describe "Subscription Group Controller", -> beforeEach -> - @user = {_id:"!@312431"} + @user = {_id:"!@312431",email:"user@email.com"} @subscription = {} @GroupHandler = addUserToGroup: sinon.stub().callsArgWith(2, null, @user) removeUserFromGroup: sinon.stub().callsArgWith(2) + getPopulatedListOfMembers: sinon.stub().callsArgWith(1, null, [@user]) @SubscriptionLocator = getUsersSubscription: sinon.stub().callsArgWith(1, null, @subscription) @Controller = SandboxedModule.require modulePath, requires: @@ -52,10 +53,37 @@ describe "Subscription Group Controller", -> describe "renderSubscriptionGroupAdminPage", -> it "should redirect you if you don't have a group account", (done)-> - @subscription.group = false + @subscription.groupPlan = false res = redirect : (path)=> path.should.equal("/") done() @Controller.renderSubscriptionGroupAdminPage @req, res + + describe "exportGroupCsv", -> + + beforeEach -> + @subscription.groupPlan = true + @res = new MockResponse() + @res.contentType = sinon.stub() + @res.header = sinon.stub() + @res.send = sinon.stub() + @Controller.exportGroupCsv @req, @res + + it "should set the correct content type on the request", -> + @res.contentType + .calledWith("text/csv") + .should.equal true + + it "should name the exported csv file", -> + @res.header + .calledWith( + "Content-Disposition", + "attachment; filename=Group.csv") + .should.equal true + + it "should export the correct csv", -> + @res.send + .calledWith("user@email.com\n") + .should.equal true