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 index 2c32c5e..68accce 100644 --- a/test/channel.js +++ b/test/channel.js @@ -20,4 +20,22 @@ describe('Channel', function () { 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) + }) + }) })