chiark / gitweb /
Trivial resampler fixes
[disorder] / tests / playlists.py
1 #! /usr/bin/env python
2 #
3 # This file is part of DisOrder.
4 # Copyright (C) 2008 Richard Kettlewell
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 # General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19 # USA
20 #
21 import dtest,disorder
22
23 def test():
24     """Playlist testing"""
25     dtest.start_daemon()
26     dtest.create_user()
27     c = disorder.client()
28     c.random_disable()
29     #
30     print " checking initial playlist set is empty"
31     l = c.playlists()
32     assert l == [], "checking initial playlist set is empty"
33     #
34     print " creating a shared playlist"
35     c.playlist_lock("wibble")
36     c.playlist_set("wibble", ["one", "two", "three"])
37     c.playlist_unlock()
38     print " checking new playlist appears in list"
39     l = c.playlists()
40     assert l == ["wibble"], "checking new playlists"
41     print " checking new playlist contents is as assigned"
42     l = c.playlist_get("wibble")
43     assert l == ["one", "two", "three"], "checking playlist contents"
44     #
45     print " checking new playlist is shared"
46     s = c.playlist_get_share("wibble")
47     assert s == "shared", "checking playlist is shared"
48     #
49     print " checking cannot unshare un-owned playlist"
50     try:
51         c.playlist_set_share("wibble", "private")
52         print "*** should not be able to adjust shared playlist's sharing ***"
53         assert False
54     except disorder.operationError:
55         pass                            # good
56     #
57     print " modifying shared playlist"
58     c.playlist_lock("wibble")
59     c.playlist_set("wibble", ["three", "two", "one"])
60     c.playlist_unlock()
61     print " checking updated playlist contents is as assigned"
62     l = c.playlist_get("wibble")
63     assert l == ["three", "two", "one"], "checking modified playlist contents"
64     #
65     print " creating a private playlist"
66     c.playlist_lock("fred.spong")
67     c.playlist_set("fred.spong", ["a", "b", "c"])
68     c.playlist_unlock()
69     s = c.playlist_get_share("fred.spong")
70     assert s == "private", "owned playlists are private by default"
71     #
72     print " creating a public playlist"
73     c.playlist_lock("fred.foo")
74     c.playlist_set("fred.foo", ["p", "q", "r"])
75     c.playlist_set_share("fred.foo", "public")
76     c.playlist_unlock()
77     s = c.playlist_get_share("fred.foo")
78     assert s == "public", "new playlist is now public"
79     #
80     print " checking fred can see all playlists"
81     l = c.playlists()
82     assert dtest.lists_have_same_contents(l,
83                                           ["fred.spong", "fred.foo", "wibble"]), "playlist list is as expected"
84     #
85     print " adding a second user"
86     c.adduser("bob", "bobpass")
87     d = disorder.client(user="bob", password="bobpass")
88     print " checking bob cannot see fred's private playlist"
89     l = d.playlists()
90     assert dtest.lists_have_same_contents(l,
91                                           ["fred.foo", "wibble"]), "playlist list is as expected"
92     #
93     print " checking bob can read shared and public playlists"
94     d.playlist_get("wibble")
95     d.playlist_get("fred.foo")
96     print " checking bob cannot read private playlist"
97     try:
98         d.playlist_get("fred.spong")
99         print "*** should not be able to read private playlist ***"
100         assert False
101     except disorder.operationError:
102         pass                            # good
103     #
104     print " checking bob cannot modify fred's playlists"
105     try:
106         d.playlist_lock("fred.foo")
107         print "*** should not be able to lock fred's public playlist ***"
108         assert False
109     except disorder.operationError:
110         pass                            # good
111     try:
112         d.playlist_lock("fred.spong")
113         print "*** should not be able to lock fred's private playlist ***"
114         assert False
115     except disorder.operationError:
116         pass                            # good
117     print " checking unlocked playlists cannot be modified"
118     #
119     try:
120         c.playlist_set("wibble", ["a"])
121         print "*** should not be able to modify unlocked playlists ***"
122         assert False
123     except disorder.operationError:
124         pass                            # good
125     #
126     print " deleting playlists"
127     c.playlist_delete("fred.spong")
128     l = c.playlists()
129     assert dtest.lists_have_same_contents(l,
130                                           ["fred.foo", "wibble"])
131     try:
132         d.playlist_delete("fred.foo")
133         print "*** should not be to delete fred's playlist ***"
134         assert False
135     except disorder.operationError:
136         pass                            # good
137     d.playlist_delete("wibble")
138     l = c.playlists()
139     assert l == ["fred.foo"]
140     c.playlist_delete("fred.foo")
141     l = c.playlists()
142     assert l == []
143     try:
144         c.playlist_delete("nonesuch")
145         print "*** should not be to delete nonexistent playlist ***"
146         assert False
147     except disorder.operationError:
148         pass                            # good
149
150 if __name__ == '__main__':
151     dtest.run()