annotate src/test/test_plugin_misc_radiocol.py @ 1862:6d9c87bdc452

jp (base): added a CommandBase.start method which is called by run or connected, so subclasses can implement it (this is for simplicity sake, as it's not always clear if run or connected must be used)
author Goffi <goffi@goffi.org>
date Mon, 29 Feb 2016 16:52:51 +0100
parents 979210da778a
children 0681d69cbe0a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
1 #!/usr/bin/python
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
3
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
4 # SAT: a jabber client
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
5 # Copyright (C) 2009, 2010, 2011, 2012, 2013 Jérôme Poisson (goffi@goffi.org)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
6 # Copyright (C) 2013 Adrien Cossa (souliane@mailoo.org)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
7
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # This program is free software: you can redistribute it and/or modify
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # it under the terms of the GNU Affero General Public License as published by
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # the Free Software Foundation, either version 3 of the License, or
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
11 # (at your option) any later version.
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
12
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # This program is distributed in the hope that it will be useful,
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
16 # GNU Affero General Public License for more details.
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
17
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # You should have received a copy of the GNU Affero General Public License
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
20
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
21 """ Tests for the plugin radiocol """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
22
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
23 from sat.core import exceptions
997
b3f383ab39da test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents: 993
diff changeset
24 from sat.core.log import getLogger
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
25 from sat.test import helpers, helpers_plugins
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
26 from sat.plugins import plugin_misc_radiocol as plugin
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
27 from sat.plugins import plugin_misc_room_game as plugin_room_game
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
28 from constants import Const
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
29
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
30 from twisted.words.protocols.jabber.jid import JID
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
31 from twisted.words.xish import domish
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
32 from twisted.internet import reactor
849
c5a8f602662b plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents: 830
diff changeset
33 from twisted.internet import defer
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
34 from twisted.python.failure import Failure
861
4d091738275c test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents: 849
diff changeset
35 from twisted.trial.unittest import SkipTest
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
36
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
37 from mutagen.oggvorbis import OggVorbis
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
38
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
39 import uuid
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
40 import os
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
41 import copy
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
42 import shutil
997
b3f383ab39da test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents: 993
diff changeset
43 from logging import WARNING
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
44
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
45 ROOM_JID = JID(Const.MUC_STR[0])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
46 PROFILE = Const.PROFILE[0]
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
47 REFEREE_FULL = JID(ROOM_JID.userhost() + '/' + Const.JID[0].user)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
48 PLAYERS_INDICES = [0, 1, 3] # referee included
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
49 OTHER_PROFILES = [Const.PROFILE[1], Const.PROFILE[3]]
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
50 OTHER_PLAYERS = [Const.JID[1], Const.JID[3]]
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
51
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
52
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
53 class RadiocolTest(helpers.SatTestCase):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
54
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
55 def setUp(self):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
56 self.host = helpers.FakeSAT()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
57
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
58 def reinit(self):
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
59 self.host.reinit()
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
60 self.host.plugins['ROOM-GAME'] = plugin_room_game.RoomGame(self.host)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
61 self.plugin = plugin.Radiocol(self.host) # must be init after ROOM-GAME
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
62 self.plugin.testing = True
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
63 self.plugin_0045 = self.host.plugins['XEP-0045'] = helpers_plugins.FakeXEP_0045(self.host)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
64 self.plugin_0249 = self.host.plugins['XEP-0249'] = helpers_plugins.FakeXEP_0249(self.host)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
65 for profile in Const.PROFILE:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
66 self.host.getClient(profile) # init self.host.profiles[profile]
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
67 self.songs = []
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
68 self.playlist = []
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
69 self.sound_dir = self.host.memory.getConfig('', 'media_dir') + '/test/sound/'
861
4d091738275c test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents: 849
diff changeset
70 try:
4d091738275c test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents: 849
diff changeset
71 for filename in os.listdir(self.sound_dir):
904
95dabdb0c799 test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents: 861
diff changeset
72 if filename.endswith('.ogg') or filename.endswith('.mp3'):
861
4d091738275c test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents: 849
diff changeset
73 self.songs.append(filename)
4d091738275c test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents: 849
diff changeset
74 except OSError:
4d091738275c test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents: 849
diff changeset
75 raise SkipTest('The sound samples in sat_media/test/sound were not found')
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
76
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
77 def _buildPlayers(self, players=[]):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
78 """@return: the "started" content built with the given players"""
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
79 content = "<started"
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
80 if not players:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
81 content += "/>"
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
82 else:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
83 content += ">"
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
84 for i in xrange(0, len(players)):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
85 content += "<player index='%s'>%s</player>" % (i, players[i])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
86 content += "</started>"
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
87 return content
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
88
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
89 def _expectedMessage(self, to_jid, type_, content):
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
90 """
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
91 @param to_jid: recipient full jid
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
92 @param type_: message type ('normal' or 'groupchat')
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
93 @param content: content as unicode or list of domish elements
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
94 @return: the message XML built from the given recipient, message type and content
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
95 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
96 if isinstance(content, list):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
97 new_content = copy.deepcopy(content)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
98 for element in new_content:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
99 if not element.hasAttribute('xmlns'):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
100 element['xmlns'] = ''
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
101 content = "".join([element.toXml() for element in new_content])
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
102 return "<message to='%s' type='%s'><%s xmlns='%s'>%s</%s></message>" % (to_jid.full(), type_, plugin.RADIOC_TAG, plugin.NC_RADIOCOL, content, plugin.RADIOC_TAG)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
103
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
104 def _rejectSongCb(self, profile_index):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
105 """Check if the message "song_rejected" has been sent by the referee
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
106 and process the command with the profile of the uploader
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
107 @param profile_index: uploader's profile"""
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
108 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
109 content = "<song_rejected xmlns='' reason='Too many songs in queue'/>"
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
110 self.assertEqualXML(sent.toXml(), self._expectedMessage(JID(ROOM_JID.userhost() + '/' + self.plugin_0045.getNick(0, profile_index), 'normal', content)))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
111 self._roomGameCmd(sent, ['radiocolSongRejected', ROOM_JID.full(), 'Too many songs in queue'])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
112
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
113 def _noUploadCb(self):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
114 """Check if the message "no_upload" has been sent by the referee
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
115 and process the command with the profiles of each room users"""
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
116 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
117 content = "<no_upload xmlns=''/>"
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
118 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
119 self._roomGameCmd(sent, ['radiocolNoUpload', ROOM_JID.full()])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
120
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
121 def _uploadOkCb(self):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
122 """Check if the message "upload_ok" has been sent by the referee
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
123 and process the command with the profiles of each room users"""
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
124 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
125 content = "<upload_ok xmlns=''/>"
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
126 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
127 self._roomGameCmd(sent, ['radiocolUploadOk', ROOM_JID.full()])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
128
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
129 def _preloadCb(self, attrs, profile_index):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
130 """Check if the message "preload" has been sent by the referee
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
131 and process the command with the profiles of each room users
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
132 @param attrs: information dict about the song
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
133 @param profile_index: profile index of the uploader
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
134 """
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
135 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
136 attrs['sender'] = self.plugin_0045.getNick(0, profile_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
137 radiocol_elt = domish.generateElementsNamed(sent.elements(), 'radiocol').next()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
138 preload_elt = domish.generateElementsNamed(radiocol_elt.elements(), 'preload').next()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
139 attrs['timestamp'] = preload_elt['timestamp'] # we could not guess it...
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
140 content = "<preload xmlns='' %s/>" % " ".join(["%s='%s'" % (attr, attrs[attr]) for attr in attrs])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
141 if sent.hasAttribute('from'):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
142 del sent['from']
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
143 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
144 self._roomGameCmd(sent, ['radiocolPreload', ROOM_JID.full(), attrs['timestamp'], attrs['filename'], attrs['title'], attrs['artist'], attrs['album'], attrs['sender']])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
145
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
146 def _playNextSongCb(self):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
147 """Check if the message "play" has been sent by the referee
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
148 and process the command with the profiles of each room users"""
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
149 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
150 filename = self.playlist.pop(0)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
151 content = "<play xmlns='' filename='%s' />" % filename
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
152 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
153 self._roomGameCmd(sent, ['radiocolPlay', ROOM_JID.full(), filename])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
154
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
155 game_data = self.plugin.games[ROOM_JID]
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
156 if len(game_data['queue']) == plugin.QUEUE_LIMIT - 1:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
157 self._uploadOkCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
158
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
159 def _addSongCb(self, d, filepath, profile_index):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
160 """Check if the message "song_added" has been sent by the uploader
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
161 and process the command with the profile of the referee
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
162 @param d: deferred value or failure got from self.plugin.radiocolSongAdded
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
163 @param filepath: full path to the sound file
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
164 @param profile_index: the profile index of the uploader
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
165 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
166 if isinstance(d, Failure):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
167 self.fail("OGG song could not be added!")
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
168
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
169 game_data = self.plugin.games[ROOM_JID]
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
170 song = OggVorbis(filepath)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
171 attrs = {'filename': os.path.basename(filepath),
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
172 'title': song.get("title", ["Unknown"])[0],
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
173 'artist': song.get("artist", ["Unknown"])[0],
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
174 'album': song.get("album", ["Unknown"])[0],
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
175 'length': str(song.info.length)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
176 }
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
177 self.assertEqual(game_data['to_delete'][attrs['filename']], filepath)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
178
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
179 content = "<song_added xmlns='' %s/>" % " ".join(["%s='%s'" % (attr, attrs[attr]) for attr in attrs])
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
180 sent = self.host.getSentMessage(profile_index)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
181 self.assertEqualXML(sent.toXml(), self._expectedMessage(REFEREE_FULL, 'normal', content))
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
182
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
183 reject_song = len(game_data['queue']) >= plugin.QUEUE_LIMIT
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
184 no_upload = len(game_data['queue']) + 1 >= plugin.QUEUE_LIMIT
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
185 play_next = not game_data['playing'] and len(game_data['queue']) + 1 == plugin.QUEUE_TO_START
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
186
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
187 self._roomGameCmd(sent, profile_index) # queue unchanged or +1
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
188 if reject_song:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
189 self._rejectSongCb(profile_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
190 return
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
191 if no_upload:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
192 self._noUploadCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
193 self._preloadCb(attrs, profile_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
194 self.playlist.append(attrs['filename'])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
195 if play_next:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
196 self._playNextSongCb() # queue -1
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
197
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
198 def _roomGameCmd(self, sent, from_index=0, call=[]):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
199 """Process a command. It is also possible to call this method as
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
200 _roomGameCmd(sent, call) instead of _roomGameCmd(sent, from_index, call).
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
201 If from index is a list, it is assumed that it is containing the value
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
202 for call and from_index will take its default value.
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
203 @param sent: the sent message that we need to process
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
204 @param from_index: index of the message sender
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
205 @param call: list containing the name of the expected bridge call
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
206 followed by its arguments, or empty list if no call is expected
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
207 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
208 if isinstance(from_index, list):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
209 call = from_index
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
210 from_index = 0
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
211
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
212 sent['from'] = ROOM_JID.full() + '/' + self.plugin_0045.getNick(0, from_index)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
213 recipient = JID(sent['to']).resource
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
214
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
215 # The message could have been sent to a room user (room_jid + '/' + nick),
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
216 # but when it is received, the 'to' attribute of the message has been
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
217 # changed to the recipient own JID. We need to simulate that here.
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
218 if recipient:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
219 room = self.plugin_0045.getRoom(0, 0)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
220 sent['to'] = Const.JID_STR[0] if recipient == room.nick else room.roster[recipient].entity.full()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
221
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
222 for index in xrange(0, len(Const.PROFILE)):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
223 nick = self.plugin_0045.getNick(0, index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
224 if nick:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
225 if not recipient or nick == recipient:
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
226 if call and (self.plugin.isPlayer(ROOM_JID, nick) or call[0] == 'radiocolStarted'):
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
227 args = copy.deepcopy(call)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
228 args.append(Const.PROFILE[index])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
229 self.host.bridge.expectCall(*args)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
230 self.plugin.room_game_cmd(sent, Const.PROFILE[index])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
231
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
232 def _syncCb(self, sync_data, profile_index):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
233 """Synchronize one player when he joins a running game.
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
234 @param sync_data: result from self.plugin.getSyncData
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
235 @param profile_index: index of the profile to be synchronized
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
236 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
237 for nick in sync_data:
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
238 expected = self._expectedMessage(JID(ROOM_JID.userhost() + '/' + nick), 'normal', sync_data[nick])
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
239 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
240 self.assertEqualXML(sent.toXml(), expected)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
241 for elt in sync_data[nick]:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
242 if elt.name == 'preload':
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
243 self.host.bridge.expectCall('radiocolPreload', ROOM_JID.full(), elt['timestamp'], elt['filename'], elt['title'], elt['artist'], elt['album'], elt['sender'], Const.PROFILE[profile_index])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
244 elif elt.name == 'play':
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
245 self.host.bridge.expectCall('radiocolPlay', ROOM_JID.full(), elt['filename'], Const.PROFILE[profile_index])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
246 elif elt.name == 'no_upload':
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
247 self.host.bridge.expectCall('radiocolNoUpload', ROOM_JID.full(), Const.PROFILE[profile_index])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
248 sync_data[nick]
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
249 self._roomGameCmd(sent, [])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
250
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
251 def _joinRoom(self, room, nicks, player_index, sync=True):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
252 """Make a player join a room and update the list of nicks
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
253 @param room: wokkel.muc.Room instance from the referee perspective
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
254 @param nicks: list of the players which will be updated
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
255 @param player_index: profile index of the new player
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
256 @param sync: set to True to synchronize data
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
257 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
258 user_nick = self.plugin_0045.joinRoom(0, player_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
259 self.plugin.userJoinedTrigger(room, room.roster[user_nick], PROFILE)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
260 if player_index not in PLAYERS_INDICES:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
261 # this user is actually not a player
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
262 self.assertFalse(self.plugin.isPlayer(ROOM_JID, user_nick))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
263 to_jid, type_ = (JID(ROOM_JID.userhost() + '/' + user_nick), 'normal')
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
264 else:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
265 # this user is a player
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
266 self.assertTrue(self.plugin.isPlayer(ROOM_JID, user_nick))
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
267 nicks.append(user_nick)
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
268 to_jid, type_ = (ROOM_JID, 'groupchat')
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
269
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
270 # Check that the message "players" has been sent by the referee
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
271 expected = self._expectedMessage(to_jid, type_, self._buildPlayers(nicks))
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
272 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
273 self.assertEqualXML(sent.toXml(), expected)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
274
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
275 # Process the command with the profiles of each room users
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
276 self._roomGameCmd(sent, ['radiocolStarted', ROOM_JID.full(), REFEREE_FULL.full(), nicks, [plugin.QUEUE_TO_START, plugin.QUEUE_LIMIT]])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
277
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
278 if sync:
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
279 self._syncCb(self.plugin._getSyncData(ROOM_JID, [user_nick]), player_index)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
280
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
281 def _leaveRoom(self, room, nicks, player_index):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
282 """Make a player leave a room and update the list of nicks
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
283 @param room: wokkel.muc.Room instance from the referee perspective
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
284 @param nicks: list of the players which will be updated
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
285 @param player_index: profile index of the new player
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
286 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
287 user_nick = self.plugin_0045.getNick(0, player_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
288 user = room.roster[user_nick]
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
289 self.plugin_0045.leaveRoom(0, player_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
290 self.plugin.userLeftTrigger(room, user, PROFILE)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
291 nicks.remove(user_nick)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
292
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
293 def _uploadSong(self, song_index, profile_index, ext='ogg'):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
294 """Upload the song of index song_index (modulo self.songs size)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
295 from the profile of index profile_index. All the songs in self.songs
904
95dabdb0c799 test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents: 861
diff changeset
296 are OGG, but you can set ext to a value different than 'ogg' or 'mp3':
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
297 - 'xxx' to test non existent files
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
298 @param song_index: index of the song
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
299 @param profile_index: index of the uploader's profile
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
300 @param new_ext: change the extension from "ogg" to this value
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
301 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
302 song_index = song_index % len(self.songs)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
303 src_filename = self.songs[song_index]
904
95dabdb0c799 test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents: 861
diff changeset
304 if ext not in ('ogg', 'mp3'):
95dabdb0c799 test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents: 861
diff changeset
305 src_filename = os.path.splitext(src_filename)[0] + '.' + ext
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
306 dst_filepath = '/tmp/%s.%s' % (uuid.uuid1(), ext)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
307 expect_io_error = ext == 'xxx'
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
308 if not expect_io_error:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
309 shutil.copy(self.sound_dir + src_filename, dst_filepath)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
310
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
311 try:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
312 d = self.plugin.radiocolSongAdded(REFEREE_FULL, dst_filepath, Const.PROFILE[profile_index])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
313 except IOError:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
314 self.assertTrue(expect_io_error)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
315 return
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
316
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
317 self.assertFalse(expect_io_error)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
318 cb = lambda defer: self._addSongCb(defer, dst_filepath, profile_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
319
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
320 def eb(failure):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
321 if not isinstance(failure, Failure):
904
95dabdb0c799 test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents: 861
diff changeset
322 self.fail("Adding a song which is not OGG nor MP3 should fail!")
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
323 self.assertEqual(failure.value.__class__, exceptions.DataError)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
324
904
95dabdb0c799 test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents: 861
diff changeset
325 if self.songs[song_index].endswith('.ogg') or self.songs[song_index].endswith('.mp3'):
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
326 d.addCallbacks(cb, cb)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
327 else:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
328 d.addCallbacks(eb, eb)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
329
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
330 def test_init(self):
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
331 self.reinit()
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
332 self.assertEqual(self.plugin.invite_mode, self.plugin.FROM_PLAYERS)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
333 self.assertEqual(self.plugin.wait_mode, self.plugin.FOR_NONE)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
334 self.assertEqual(self.plugin.join_mode, self.plugin.INVITED)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
335 self.assertEqual(self.plugin.ready_mode, self.plugin.FORCE)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
336
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
337 def test_game(self):
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
338 self.reinit()
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
339
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
340 # create game
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
341 self.plugin.prepareRoom(OTHER_PLAYERS, ROOM_JID, PROFILE)
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
342 self.assertTrue(self.plugin._gameExists(ROOM_JID, True))
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
343 room = self.plugin_0045.getRoom(0, 0)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
344 nicks = [self.plugin_0045.getNick(0, 0)]
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
345
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
346 sent = self.host.getSentMessage(0)
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
347 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', self._buildPlayers(nicks)))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
348 self._roomGameCmd(sent, ['radiocolStarted', ROOM_JID.full(), REFEREE_FULL.full(), nicks, [plugin.QUEUE_TO_START, plugin.QUEUE_LIMIT]])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
349
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
350 self._joinRoom(room, nicks, 1) # player joins
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
351 self._joinRoom(room, nicks, 4) # user not playing joins
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
352
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
353 song_index = 0
904
95dabdb0c799 test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents: 861
diff changeset
354 self._uploadSong(song_index, 0) # ogg or mp3 file should exist in sat_media/test/song
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
355 self._uploadSong(song_index, 0, 'xxx') # file should not exist
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
356
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
357 # another songs are added by Const.JID[1] until the radio starts + 1 to fill the queue
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
358 # when the first song starts + 1 to be rejected because the queue is full
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
359 for song_index in xrange(1, plugin.QUEUE_TO_START + 1):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
360 self._uploadSong(song_index, 1)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
361
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
362 self.plugin.playNext(Const.MUC[0], PROFILE) # simulate the end of the first song
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
363 self._playNextSongCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
364 self._uploadSong(song_index, 1) # now the song is accepted and the queue is full again
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
365
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
366 self._joinRoom(room, nicks, 3) # new player joins
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
367
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
368 self.plugin.playNext(Const.MUC[0], PROFILE) # the second song finishes
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
369 self._playNextSongCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
370 self._uploadSong(0, 3) # the player who recently joined re-upload the first file
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
371
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
372 self._leaveRoom(room, nicks, 1) # one player leaves
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
373 self._joinRoom(room, nicks, 1) # and join again
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
374
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
375 self.plugin.playNext(Const.MUC[0], PROFILE) # empty the queue
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
376 self._playNextSongCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
377 self.plugin.playNext(Const.MUC[0], PROFILE)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
378 self._playNextSongCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
379
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
380 for filename in self.playlist:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
381 self.plugin.deleteFile('/tmp/' + filename)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
382
849
c5a8f602662b plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents: 830
diff changeset
383 return defer.succeed(None)
c5a8f602662b plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents: 830
diff changeset
384
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
385 def tearDown(self, *args, **kwargs):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
386 """Clean the reactor"""
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
387 helpers.SatTestCase.tearDown(self, *args, **kwargs)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
388 for delayed_call in reactor.getDelayedCalls():
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
389 delayed_call.cancel()