Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
converse.js
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
converse.js
Commits
6d9fe68a
Commit
6d9fe68a
authored
May 11, 2013
by
JC Brand
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Split ChatRooms tests out into their own spec file
parent
fc06d46b
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
300 additions
and
267 deletions
+300
-267
mock.js
mock.js
+43
-0
spec/ChatRoomSpec.js
spec/ChatRoomSpec.js
+224
-0
spec/MainSpec.js
spec/MainSpec.js
+14
-253
tests_main.js
tests_main.js
+19
-14
No files found.
mock.js
0 → 100644
View file @
6d9fe68a
(
function
(
root
,
factory
)
{
define
(
"
mock
"
,
[
'
converse
'
],
function
()
{
return
factory
();
});
}(
this
,
function
(
converse
)
{
var
mock_connection
=
{
'
muc
'
:
{
'
listRooms
'
:
function
()
{},
'
join
'
:
function
()
{},
'
leave
'
:
function
()
{}
},
'
jid
'
:
'
dummy@localhost
'
,
'
addHandler
'
:
function
(
handler
,
ns
,
name
,
type
,
id
,
from
,
options
)
{
return
function
()
{};
},
'
send
'
:
function
()
{},
'
roster
'
:
{
'
add
'
:
function
()
{},
'
authorize
'
:
function
()
{},
'
unauthorize
'
:
function
()
{},
'
get
'
:
function
()
{},
'
subscribe
'
:
function
()
{},
'
registerCallback
'
:
function
()
{}
},
'
vcard
'
:
{
'
get
'
:
function
(
callback
,
jid
)
{
var
name
=
jid
.
split
(
'
@
'
)[
0
].
replace
(
'
.
'
,
'
'
).
split
(
'
'
);
var
firstname
=
name
[
0
].
charAt
(
0
).
toUpperCase
()
+
name
[
0
].
slice
(
1
);
var
lastname
=
name
[
1
].
charAt
(
0
).
toUpperCase
()
+
name
[
1
].
slice
(
1
);
var
fullname
=
firstname
+
'
'
+
lastname
;
var
vcard
=
$iq
().
c
(
'
vCard
'
).
c
(
'
FN
'
).
t
(
fullname
);
callback
(
vcard
.
tree
());
}
},
'
disco
'
:
{
'
info
'
:
function
()
{},
'
items
'
:
function
()
{}
}
};
return
mock_connection
;
}));
spec/ChatRoomSpec.js
0 → 100644
View file @
6d9fe68a
(
function
(
root
,
factory
)
{
define
([
"
converse
"
,
"
mock
"
],
function
(
converse
,
mock_connection
)
{
return
factory
(
converse
,
mock_connection
);
}
);
}
(
this
,
function
(
converse
,
mock_connection
)
{
return
describe
(
"
ChatRooms
"
,
$
.
proxy
(
function
()
{
var
chatroom_names
=
[
'
Dyon van de Wege
'
,
'
Thomas Kalb
'
,
'
Dirk Theissen
'
,
'
Felix Hofmann
'
,
'
Ka Lek
'
,
'
Anne Ebersbacher
'
];
describe
(
"
A Chat Room
"
,
$
.
proxy
(
function
()
{
beforeEach
(
$
.
proxy
(
function
()
{
if
(
!
$
(
"
div#controlbox
"
).
is
(
'
:visible
'
))
{
$
(
'
.toggle-online-users
'
).
click
();
}
var
roomspanel
=
this
.
chatboxesview
.
views
.
controlbox
.
roomspanel
;
var
$input
=
roomspanel
.
$el
.
find
(
'
input.new-chatroom-name
'
);
var
$server
=
roomspanel
.
$el
.
find
(
'
input.new-chatroom-server
'
);
$input
.
val
(
'
lounge
'
);
$server
.
val
(
'
muc.localhost
'
);
roomspanel
.
$el
.
find
(
'
form
'
).
submit
();
$
(
'
.toggle-online-users
'
).
click
();
},
converse
));
it
(
"
shows users currently present in the room
"
,
$
.
proxy
(
function
()
{
var
chatroomview
=
this
.
chatboxesview
.
views
[
'
lounge@muc.localhost
'
];
var
$participant_list
=
chatroomview
.
$el
.
find
(
'
.participant-list
'
);
var
roster
=
{},
room
=
{},
i
;
for
(
i
=
0
;
i
<
chatroom_names
.
length
;
i
++
)
{
roster
[
chatroom_names
[
i
]]
=
{};
chatroomview
.
onChatRoomRoster
(
roster
,
room
);
expect
(
$participant_list
.
find
(
'
li
'
).
length
).
toBe
(
1
+
i
);
expect
(
$
(
$participant_list
.
find
(
'
li
'
)[
i
]).
text
()).
toBe
(
chatroom_names
[
i
]);
}
roster
[
converse
.
bare_jid
]
=
{};
chatroomview
.
onChatRoomRoster
(
roster
,
room
);
},
converse
));
it
(
"
can be saved to, and retrieved from, localStorage
"
,
$
.
proxy
(
function
()
{
// We instantiate a new ChatBoxes collection, which by default
// will be empty.
var
newchatboxes
=
new
this
.
ChatBoxes
();
expect
(
newchatboxes
.
length
).
toEqual
(
0
);
// The chatboxes will then be fetched from localStorage inside the
// onConnected method
newchatboxes
.
onConnected
();
expect
(
newchatboxes
.
length
).
toEqual
(
1
);
// Check that the chatrooms retrieved from localStorage
// have the same attributes values as the original ones.
attrs
=
[
'
id
'
,
'
box_id
'
,
'
visible
'
];
for
(
i
=
0
;
i
<
attrs
.
length
;
i
++
)
{
new_attrs
=
_
.
pluck
(
_
.
pluck
(
newchatboxes
.
models
,
'
attributes
'
),
attrs
[
i
]);
old_attrs
=
_
.
pluck
(
_
.
pluck
(
this
.
chatboxes
.
models
,
'
attributes
'
),
attrs
[
i
]);
expect
(
_
.
isEqual
(
new_attrs
,
old_attrs
)).
toEqual
(
true
);
}
this
.
rosterview
.
render
();
},
converse
));
it
(
"
can be closed again by clicking a DOM element with class 'close-chatbox-button'
"
,
$
.
proxy
(
function
()
{
var
view
=
this
.
chatboxesview
.
views
[
'
lounge@muc.localhost
'
],
chatroom
=
view
.
model
,
$el
;
spyOn
(
view
,
'
closeChat
'
).
andCallThrough
();
spyOn
(
converse
.
connection
.
muc
,
'
leave
'
);
view
.
delegateEvents
();
// We need to rebind all events otherwise our spy won't be called
view
.
$el
.
find
(
'
.close-chatbox-button
'
).
click
();
expect
(
view
.
closeChat
).
toHaveBeenCalled
();
expect
(
converse
.
connection
.
muc
.
leave
).
toHaveBeenCalled
();
},
converse
));
},
converse
));
describe
(
"
When attempting to enter a chatroom
"
,
$
.
proxy
(
function
()
{
beforeEach
(
$
.
proxy
(
function
()
{
var
roomspanel
=
this
.
chatboxesview
.
views
.
controlbox
.
roomspanel
;
var
$input
=
roomspanel
.
$el
.
find
(
'
input.new-chatroom-name
'
);
var
$server
=
roomspanel
.
$el
.
find
(
'
input.new-chatroom-server
'
);
$input
.
val
(
'
problematic
'
);
$server
.
val
(
'
muc.localhost
'
);
roomspanel
.
$el
.
find
(
'
form
'
).
submit
();
},
converse
));
afterEach
(
$
.
proxy
(
function
()
{
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
closeChat
();
},
converse
));
it
(
"
will show an error message if the room requires a password
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
auth
'
})
.
c
(
'
not-authorized
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
'
This chatroom requires a password
'
);
},
converse
));
it
(
"
will show an error message if the room is members-only and the user not included
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
auth
'
})
.
c
(
'
registration-required
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
'
You are not on the member list of this room
'
);
},
converse
));
it
(
"
will show an error message if the user has been banned
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
auth
'
})
.
c
(
'
forbidden
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
'
You have been banned from this room
'
);
},
converse
));
it
(
"
will show an error message if no nickname was specified for the user
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
modify
'
})
.
c
(
'
jid-malformed
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
'
No nickname was specified
'
);
},
converse
));
it
(
"
will show an error message if the user is not allowed to have created the room
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
cancel
'
})
.
c
(
'
not-allowed
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
'
You are not allowed to create new rooms
'
);
},
converse
));
it
(
"
will show an error message if the user's nickname doesn't conform to room policy
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
cancel
'
})
.
c
(
'
not-acceptable
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
"
Your nickname doesn't conform to the room's policies
"
);
},
converse
));
it
(
"
will show an error message if the user's nickname is already taken
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
cancel
'
})
.
c
(
'
conflict
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
"
Your nickname is already taken
"
);
},
converse
));
it
(
"
will show an error message if the room doesn't yet exist
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
cancel
'
})
.
c
(
'
item-not-found
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
"
This room does not (yet) exist
"
);
},
converse
));
it
(
"
will show an error message if the room has reached it's maximum number of occupants
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
cancel
'
})
.
c
(
'
service-unavailable
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
"
This room has reached it's maximum number of occupants
"
);
},
converse
));
},
converse
));
},
converse
));
}));
spec/MainSpec.js
View file @
6d9fe68a
(
function
(
root
,
factory
)
{
define
([
"
converse
"
],
function
(
converse
)
{
return
factory
(
converse
);
"
converse
"
,
"
mock
"
],
function
(
converse
,
mock_connection
)
{
return
factory
(
converse
,
mock_connection
);
}
);
}
(
this
,
function
(
converse
)
{
}
(
this
,
function
(
converse
,
mock_connection
)
{
return
describe
(
"
Converse.js
"
,
$
.
proxy
(
function
()
{
// Names from http://www.fakenamegenerator.com/
var
req_names
=
[
...
...
@@ -20,56 +20,7 @@
'
Robin Schook
'
,
'
Marcel Eberhardt
'
,
'
Simone Brauer
'
,
'
Asmaa Haakman
'
,
'
Felix Amsel
'
,
'
Lena Grunewald
'
,
'
Laura Grunewald
'
,
'
Mandy Seiler
'
,
'
Sven Bosch
'
,
'
Nuriye Cuypers
'
];
var
chatroom_names
=
[
'
Dyon van de Wege
'
,
'
Thomas Kalb
'
,
'
Dirk Theissen
'
,
'
Felix Hofmann
'
,
'
Ka Lek
'
,
'
Anne Ebersbacher
'
];
var
num_contacts
=
req_names
.
length
+
pend_names
.
length
+
cur_names
.
length
;
mock_connection
=
{
'
muc
'
:
{
'
listRooms
'
:
function
()
{},
'
join
'
:
function
()
{},
'
leave
'
:
function
()
{}
},
'
jid
'
:
'
dummy@localhost
'
,
'
addHandler
'
:
function
(
handler
,
ns
,
name
,
type
,
id
,
from
,
options
)
{
return
function
()
{};
},
'
send
'
:
function
()
{},
'
roster
'
:
{
'
add
'
:
function
()
{},
'
authorize
'
:
function
()
{},
'
unauthorize
'
:
function
()
{},
'
get
'
:
function
()
{},
'
subscribe
'
:
function
()
{},
'
registerCallback
'
:
function
()
{}
},
'
vcard
'
:
{
'
get
'
:
function
(
callback
,
jid
)
{
var
name
=
jid
.
split
(
'
@
'
)[
0
].
replace
(
'
.
'
,
'
'
).
split
(
'
'
);
var
firstname
=
name
[
0
].
charAt
(
0
).
toUpperCase
()
+
name
[
0
].
slice
(
1
);
var
lastname
=
name
[
1
].
charAt
(
0
).
toUpperCase
()
+
name
[
1
].
slice
(
1
);
var
fullname
=
firstname
+
'
'
+
lastname
;
var
vcard
=
$iq
().
c
(
'
vCard
'
).
c
(
'
FN
'
).
t
(
fullname
);
callback
(
vcard
.
tree
());
}
},
'
disco
'
:
{
'
info
'
:
function
()
{},
'
items
'
:
function
()
{}
}
};
// Clear localStorage
window
.
localStorage
.
clear
();
this
.
initialize
({
prebind
:
false
,
xhr_user_search
:
false
,
auto_subscribe
:
false
,
animate
:
false
});
this
.
onConnected
(
mock_connection
);
// Variable declarations for specs
var
open_controlbox
;
describe
(
"
The Control Box
"
,
$
.
proxy
(
function
()
{
...
...
@@ -82,8 +33,10 @@
// open yet.
expect
(
$
(
"
div#controlbox
"
).
is
(
'
:visible
'
)).
toBe
(
false
);
spyOn
(
this
,
'
toggleControlBox
'
).
andCallThrough
();
spyOn
(
this
,
'
showControlBox
'
).
andCallThrough
();
$
(
'
.toggle-online-users
'
).
click
();
expect
(
this
.
toggleControlBox
).
toHaveBeenCalled
();
expect
(
this
.
showControlBox
).
toHaveBeenCalled
();
expect
(
$
(
"
div#controlbox
"
).
is
(
'
:visible
'
)).
toBe
(
true
);
},
converse
);
it
(
"
can be opened by clicking a DOM element with class 'toggle-online-users'
"
,
open_controlbox
);
...
...
@@ -577,8 +530,13 @@
it
(
"
is cleared when the window is focused
"
,
$
.
proxy
(
function
()
{
spyOn
(
converse
,
'
clearMsgCounter
'
).
andCallThrough
();
runs
(
function
()
{
$
(
window
).
trigger
(
'
focus
'
);
});
waits
(
50
);
runs
(
function
()
{
expect
(
converse
.
clearMsgCounter
).
toHaveBeenCalled
();
});
},
converse
));
it
(
"
is not incremented when the message is received and the window is focused
"
,
$
.
proxy
(
function
()
{
...
...
@@ -667,202 +625,5 @@
},
converse
));
},
converse
));
},
converse
));
describe
(
"
A Chat Room
"
,
$
.
proxy
(
function
()
{
it
(
"
shows users currently present in the room
"
,
$
.
proxy
(
function
()
{
var
chatroomview
=
this
.
chatboxesview
.
views
[
'
lounge@muc.localhost
'
];
var
$participant_list
=
chatroomview
.
$el
.
find
(
'
.participant-list
'
);
var
roster
=
{},
room
=
{},
i
;
for
(
i
=
0
;
i
<
chatroom_names
.
length
;
i
++
)
{
roster
[
chatroom_names
[
i
]]
=
{};
chatroomview
.
onChatRoomRoster
(
roster
,
room
);
expect
(
$participant_list
.
find
(
'
li
'
).
length
).
toBe
(
1
+
i
);
expect
(
$
(
$participant_list
.
find
(
'
li
'
)[
i
]).
text
()).
toBe
(
chatroom_names
[
i
]);
}
roster
[
converse
.
bare_jid
]
=
{};
chatroomview
.
onChatRoomRoster
(
roster
,
room
);
},
converse
));
it
(
"
can be saved to, and retrieved from, localStorage
"
,
$
.
proxy
(
function
()
{
// We instantiate a new ChatBoxes collection, which by default
// will be empty.
var
newchatboxes
=
new
this
.
ChatBoxes
();
expect
(
newchatboxes
.
length
).
toEqual
(
0
);
// The chatboxes will then be fetched from localStorage inside the
// onConnected method
newchatboxes
.
onConnected
();
expect
(
newchatboxes
.
length
).
toEqual
(
2
);
// controlbox is also included
// Check that the chatrooms retrieved from localStorage
// have the same attributes values as the original ones.
attrs
=
[
'
id
'
,
'
box_id
'
,
'
visible
'
];
for
(
i
=
0
;
i
<
attrs
.
length
;
i
++
)
{
new_attrs
=
_
.
pluck
(
_
.
pluck
(
newchatboxes
.
models
,
'
attributes
'
),
attrs
[
i
]);
old_attrs
=
_
.
pluck
(
_
.
pluck
(
this
.
chatboxes
.
models
,
'
attributes
'
),
attrs
[
i
]);
expect
(
_
.
isEqual
(
new_attrs
,
old_attrs
)).
toEqual
(
true
);
}
this
.
rosterview
.
render
();
},
converse
));
it
(
"
can be closed again by clicking a DOM element with class 'close-chatbox-button'
"
,
$
.
proxy
(
function
()
{
var
view
=
this
.
chatboxesview
.
views
[
'
lounge@muc.localhost
'
],
chatroom
=
view
.
model
,
$el
;
spyOn
(
view
,
'
closeChat
'
).
andCallThrough
();
spyOn
(
converse
.
connection
.
muc
,
'
leave
'
);
view
.
delegateEvents
();
// We need to rebind all events otherwise our spy won't be called
view
.
$el
.
find
(
'
.close-chatbox-button
'
).
click
();
expect
(
view
.
closeChat
).
toHaveBeenCalled
();
expect
(
converse
.
connection
.
muc
.
leave
).
toHaveBeenCalled
();
},
converse
));
},
converse
));
describe
(
"
When attempting to enter a chatroom
"
,
$
.
proxy
(
function
()
{
beforeEach
(
$
.
proxy
(
function
()
{
var
roomspanel
=
this
.
chatboxesview
.
views
.
controlbox
.
roomspanel
;
var
$input
=
roomspanel
.
$el
.
find
(
'
input.new-chatroom-name
'
);
var
$server
=
roomspanel
.
$el
.
find
(
'
input.new-chatroom-server
'
);
$input
.
val
(
'
problematic
'
);
$server
.
val
(
'
muc.localhost
'
);
roomspanel
.
$el
.
find
(
'
form
'
).
submit
();
},
converse
));
afterEach
(
$
.
proxy
(
function
()
{
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
closeChat
();
},
converse
));
it
(
"
will show an error message if the room requires a password
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
auth
'
})
.
c
(
'
not-authorized
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
'
This chatroom requires a password
'
);
},
converse
));
it
(
"
will show an error message if the room is members-only and the user not included
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
auth
'
})
.
c
(
'
registration-required
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
'
You are not on the member list of this room
'
);
},
converse
));
it
(
"
will show an error message if the user has been banned
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
auth
'
})
.
c
(
'
forbidden
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
'
You have been banned from this room
'
);
},
converse
));
it
(
"
will show an error message if no nickname was specified for the user
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
modify
'
})
.
c
(
'
jid-malformed
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
'
No nickname was specified
'
);
},
converse
));
it
(
"
will show an error message if the user is not allowed to have created the room
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
cancel
'
})
.
c
(
'
not-allowed
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
'
You are not allowed to create new rooms
'
);
},
converse
));
it
(
"
will show an error message if the user's nickname doesn't conform to room policy
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
cancel
'
})
.
c
(
'
not-acceptable
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
"
Your nickname doesn't conform to the room's policies
"
);
},
converse
));
it
(
"
will show an error message if the user's nickname is already taken
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
cancel
'
})
.
c
(
'
conflict
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
"
Your nickname is already taken
"
);
},
converse
));
it
(
"
will show an error message if the room doesn't yet exist
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
cancel
'
})
.
c
(
'
item-not-found
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
"
This room does not (yet) exist
"
);
},
converse
));
it
(
"
will show an error message if the room has reached it's maximum number of occupants
"
,
$
.
proxy
(
function
()
{
var
presence
=
$pres
().
attrs
({
from
:
'
coven@chat.shakespeare.lit/thirdwitch
'
,
id
:
'
n13mt3l
'
,
to
:
'
hag66@shakespeare.lit/pda
'
,
type
:
'
error
'
})
.
c
(
'
x
'
).
attrs
({
xmlns
:
'
http://jabber.org/protocol/muc
'
}).
up
()
.
c
(
'
error
'
).
attrs
({
by
:
'
coven@chat.shakespeare.lit
'
,
type
:
'
cancel
'
})
.
c
(
'
service-unavailable
'
).
attrs
({
xmlns
:
'
urn:ietf:params:xml:ns:xmpp-stanzas
'
}).
nodeTree
;
var
view
=
this
.
chatboxesview
.
views
[
'
problematic@muc.localhost
'
];
view
.
onChatRoomPresence
(
presence
,
{
'
nick
'
:
'
dummy
'
});
var
$chat_content
=
view
.
$el
.
find
(
'
.chat-content
'
);
expect
(
$chat_content
.
text
()).
toBe
(
"
This room has reached it's maximum number of occupants
"
);
},
converse
));
},
converse
));
},
converse
));
}));
tests_main.js
View file @
6d9fe68a
require
([
"
jquery
"
,
"
spec/MainSpec
"
],
function
(
$
)
{
require
([
"
jquery
"
,
"
converse
"
,
"
mock
"
,
"
spec/MainSpec
"
,
"
spec/ChatRoomSpec
"
],
function
(
$
,
converse
,
mock_connection
)
{
// Set up converse.js
window
.
localStorage
.
clear
();
converse
.
initialize
({
prebind
:
false
,
xhr_user_search
:
false
,
auto_subscribe
:
false
,
animate
:
false
});
converse
.
onConnected
(
mock_connection
);
$
(
function
(
$
)
{
// Jasmine stuff
var
jasmineEnv
=
jasmine
.
getEnv
();
jasmineEnv
.
updateInterval
=
250
;
jasmineEnv
.
updateInterval
=
50
;
var
htmlReporter
=
new
jasmine
.
HtmlReporter
();
jasmineEnv
.
addReporter
(
htmlReporter
);
jasmineEnv
.
specFilter
=
function
(
spec
)
{
return
htmlReporter
.
specFilter
(
spec
);
};
jasmineEnv
.
execute
();
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment