test ChatroomSetup:
	# Local chatrooms

	spawn as p1
	with p1:
		send "create-identity Device1 Owner1"

		send "chatroom-create first"
		send "chatroom-create second"

		send "chatroom-list-local"

		expect /chatroom-list-item ([a-z0-9#]+) first sub true/ capture first
		expect /chatroom-list-item [a-z0-9#]+ second sub true/
		local:
			expect /chatroom-list-(.*)/ capture done
			guard (done == "done")

	expect /chatroom-create-done ([a-z0-9#]+) first.*/ from p1 capture first
	expect /chatroom-create-done ([a-z0-9#]+) second.*/ from p1 capture second

	# Send chatrooms to new peers

	spawn as p2
	send "create-identity Device2 Owner2" to p2

	spawn as p3
	send "create-identity Device3 Owner3" to p3

	for p in [ p1, p2, p3 ]:
		with p:
			send "chatroom-watch-local"
			send "start-server"

	for p in [ p2, p3 ]:
		with p:
			expect /chatroom-watched-added [a-z0-9#]+ first sub false/
			expect /chatroom-watched-added [a-z0-9#]+ second sub false/

	# Subscribe and unsubscribe

	with p1:
		send "chatroom-unsubscribe $first"
		expect /chatroom-watched-updated [a-z0-9#]+ first sub false .*/

		send "chatroom-subscribe $first"
		expect /chatroom-watched-updated [a-z0-9#]+ first sub true .*/

	with p2:
		send "chatroom-list-local"
		expect /chatroom-list-item ([a-z0-9#]+) first sub false/ capture p2_first
		expect /chatroom-list-item ([a-z0-9#]+) second sub false/ capture p2_second
		local:
			expect /chatroom-list-(.*)/ capture done
			guard (done == "done")

		send "chatroom-subscribe $p2_first"
		send "chatroom-subscribe $p2_second"

		expect /chatroom-watched-updated [a-z0-9#]+ first sub true .*/
		expect /chatroom-watched-updated [a-z0-9#]+ second sub true .*/

		send "chatroom-unsubscribe $p2_first"
		send "chatroom-unsubscribe $p2_second"

		expect /chatroom-watched-updated [a-z0-9#]+ first sub false .*/
		expect /chatroom-watched-updated [a-z0-9#]+ second sub false .*/

	# Create and sync additional chatrooms

	send "chatroom-create third" to p1
	send "chatroom-create fourth" to p2
	send "chatroom-create fifth" to p3

	expect /chatroom-create-done ([a-z0-9#]+) fourth.*/ from p2 capture fourth
	expect /chatroom-create-done ([a-z0-9#]+) fifth.*/ from p3 capture fifth

	for p in [ p1, p2, p3 ]:
		with p:
			expect /chatroom-watched-added [a-z0-9#]+ third sub [a-z]+/
			expect /chatroom-watched-added [a-z0-9#]+ fourth sub [a-z]+/
			expect /chatroom-watched-added [a-z0-9#]+ fifth sub [a-z]+/

	# Update chatroom name

	send "chatroom-set-name $first first2" to p1
	for p in [ p1, p2, p3 ]:
		with p:
			expect /chatroom-watched-updated [a-z0-9#]+ first2.*/

	send "chatroom-set-name $fourth fourth2" to p2
	send "chatroom-set-name $fifth fifth2" to p3
	for p in [ p1, p2, p3 ]:
		with p:
			expect /chatroom-watched-updated [a-z0-9#]+ fourth2.*/
			expect /chatroom-watched-updated [a-z0-9#]+ fifth2.*/


test ChatroomMessages:
	spawn as p1

	send "create-identity Device1 Owner1" to p1

	for p in [ p1 ]:
		with p:
			send "chatroom-watch-local"
			send "start-server"

	send "chatroom-create room" to p1
	expect /chatroom-create-done ([a-z0-9#]+) room.*/ from p1 capture room

	for p in [ p1 ]:
		with p:
			expect /chatroom-watched-added [a-z0-9#]+ room sub [a-z]+/

	send "chatroom-message-send $room message1" to p1
	expect /chatroom-message-new $room from Owner1 text message1/ from p1

	send "chatroom-message-send $room message2" to p1
	local:
		expect /chatroom-message-new $room from Owner1 text (.*)/ from p1 capture msg
		guard (msg == "message2")