From 82b133e8fca80875a6f4fde9bf3f1885de5cb2fd Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 18 Oct 2015 06:38:22 -0500 Subject: [PATCH] Add tests for creating groups --- test/api-legacy/groups.coffee | 47 --------- test/api/groups/groups-post.js | 182 +++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+), 47 deletions(-) create mode 100644 test/api/groups/groups-post.js diff --git a/test/api-legacy/groups.coffee b/test/api-legacy/groups.coffee index b5a4fa2765..688a1bc956 100644 --- a/test/api-legacy/groups.coffee +++ b/test/api-legacy/groups.coffee @@ -6,53 +6,6 @@ Group = require("../../website/src/models/group").model app = require("../../website/src/server") describe "Guilds", -> - context "creating groups", -> - before (done) -> - registerNewUser -> - User.findByIdAndUpdate user._id, - $set: - "balance": 40 - , (err, _user) -> - done() - , true - - it "can create a public guild", (done) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "guild", - privacy: "public" - ).end (res) -> - expectCode res, 200 - guild = res.body - expect(guild.members.length).to.equal 1 - expect(guild.leader).to.equal user._id - done() - - it "can create a private guild", (done) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "guild", - privacy: "private" - ).end (res) -> - expectCode res, 200 - guild = res.body - expect(guild.members.length).to.equal 1 - expect(guild.leader).to.equal user._id - done() - - it "prevents user from creating a guild when the user has 0 gems", (done) -> - registerNewUser (err, user_with_0_gems) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "guild", - ) - .set("X-API-User", user_with_0_gems._id) - .set("X-API-Key", user_with_0_gems.apiToken) - .end (res) -> - expectCode res, 401 - done() - , false - context "get guilds", -> guild = undefined diff --git a/test/api/groups/groups-post.js b/test/api/groups/groups-post.js new file mode 100644 index 0000000000..ea95205c09 --- /dev/null +++ b/test/api/groups/groups-post.js @@ -0,0 +1,182 @@ +import { + generateGroup, + generateUser, + requester, +} from '../../helpers/api.helper'; + +describe('POST /groups', () => { + + context('All groups', () => { + let api, leader; + + beforeEach((done) => { + generateUser().then((user) => { + leader = user; + api = requester(user); + done(); + }).catch(done); + }); + + it('returns a group object', (done) => { + let group = { + name: 'Test Group', + type: 'party', + leaderOnly: { challenges: true }, + description: 'Test Group Description', + leaderMessage: 'Test Group Message', + }; + + api.post('/groups', + group + ).then((createdGroup) => { + expect(createdGroup._id).to.exist; + expect(createdGroup.leader).to.eql(leader._id); + expect(createdGroup.name).to.eql(group.name); + expect(createdGroup.description).to.eql(group.description); + expect(createdGroup.leaderMessage).to.eql(group.leaderMessage); + expect(createdGroup.leaderOnly.challenges).to.eql(group.leaderOnly.challenges); + expect(createdGroup.memberCount).to.eql(1); + expect(createdGroup.members).to.have.a.lengthOf(1); + done(); + }) + .catch((err) => { + done(err); + }); + }); + + it('returns a populated members array', (done) => { + api.post('/groups', { + type: 'party', + }).then((createdGroup) => { + let member = createdGroup.members[0]; + + expect(member._id).to.eql(leader._id); + expect(member.profile.name).to.eql(leader.profile.name); + expect(member.items).to.exist; + expect(member.stats).to.exist; + expect(member.achievements).to.exist; + expect(member.contributor).to.exist; + done(); + }) + .catch((err) => { + done(err); + }); + }); + }); + + context('Parties', () => { + let api, leader; + + beforeEach((done) => { + generateUser().then((user) => { + leader = user; + api = requester(user); + done(); + }).catch(done); + }); + + it('allows party creation without gems', (done) => { + api.post('/groups', { + type: 'party', + }) + .then((group) => { + expect(group._id).to.exist; + done(); + }) + .catch((err) => { + done(err); + }); + }); + + it('prevents party creation if user is already in party', (done) => { + generateGroup(leader, { + type: 'party', + }).then((group) => { + return api.post('/groups', { + type: 'party', + }); + }).then((group) => { + done('Unexpected success'); + }) + .catch((err) => { + expect(err.code).to.eql(400); + expect(err.text).to.eql('Already in a party, try refreshing.'); + done(); + }); + }) + }); + + context('Guilds', () => { + let api, leader; + + beforeEach((done) => { + generateUser({ + balance: 2, + }).then((user) => { + leader = user; + api = requester(user); + done(); + }).catch(done); + }); + + it('prevents guild creation when user does not have enough gems', (done) => { + generateUser({ + balance: 0.75, + }).then((user) => { + api = requester(user); + return api.post('/groups', { + type: 'guild', + }); + }).then((group) => { + done('Unexpected success'); + }).catch((err) => { + expect(err.code).to.eql(401); + expect(err.text).to.eql('Not enough gems!'); + done(); + }); + }); + + + it('can create a public guild', (done) => { + api.post('/groups', { + type: 'guild', + privacy: 'public', + }).then((group) => { + expect(group.leader).to.eql(leader._id); + done(); + }) + .catch((err) => { + done(err); + }); + }); + + it('can create a private guild', (done) => { + api.post('/groups', { + type: 'guild', + privacy: 'private', + }).then((group) => { + expect(group.leader).to.eql(leader._id); + done(); + }) + .catch((err) => { + done(err); + }); + }); + + it('deducts gems from user and adds them to guild bank', (done) => { + api.post('/groups', { + type: 'guild', + privacy: 'private', + }).then((group) => { + expect(group.balance).to.eql(1); + return api.get('/user'); + }).then((user) => { + expect(user.balance).to.eql(1); + done(); + }) + .catch((err) => { + done(err); + }); + }); + }); +});