diff --git a/src/channel.js b/src/channel.js index f4d82f3..cf0eddf 100644 --- a/src/channel.js +++ b/src/channel.js @@ -9,6 +9,17 @@ function Channel(name) { item.sendRaw(`:${user.nickname} JOIN ${channel.name}`) }) } + + this.part = function(user) { + let channel = this + let userIndex = this.userlist.indexOf(user) + if (userIndex >= 0) { + this.userlist.forEach(function(item) { + item.sendRaw(`:${user.nickname} PART ${channel.name}`) + }) + this.userlist.splice(index, 1) + } + } } module.exports = Channel diff --git a/test/channel.js b/test/channel.js new file mode 100644 index 0000000..68accce --- /dev/null +++ b/test/channel.js @@ -0,0 +1,41 @@ +const assert = require('assert'); +const Channel = require("../src/channel.js"); + +describe('Channel', function () { + describe('#contructor()', function () { + it("should create a channel", function () { + const channel = new Channel("#testchan") + assert.equal(typeof channel, 'object') + }) + }) + + describe('#join(user)', function () { + it("should add the user to a channel and send a JOIN command to the user", function (done) { + const channel = new Channel("#testchan") + let mockedUser = {nickname: "some_nick"} + mockedUser.sendRaw = function(data) { + assert.equal(data, ":some_nick JOIN #testchan") + done() + } + channel.join(mockedUser) + }) + }) + + describe('#part(user)', function () { + it("should remove a user from a channel and send a PART command to the user", function (done) { + const channel = new Channel("#testchan") + let mockedUser = {nickname: "some_nick"} + mockedUser.sendRaw = function(data) { + // we expect a PART message from our user to the channel (including us) + if (data.indexOf("PART") >= 0) { + assert.equal(data, ":some_nick PART #testchan") + done() + } + } + // we can't part a channel without joining it first + channel.join(mockedUser) + + channel.part(mockedUser) + }) + }) +})