chiark / gitweb /
Python bindings report an error if you delete a nonexistent playlist.
[disorder] / tests / playlists.py
CommitLineData
440af55d
RK
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#
21import dtest,disorder
22
23def test():
24 """Playlist testing"""
25 dtest.start_daemon()
26 dtest.create_user()
27 c = disorder.client()
28 c.random_disable()
97b379d2 29 #
440af55d
RK
30 print " checking initial playlist set is empty"
31 l = c.playlists()
32 assert l == [], "checking initial playlist set is empty"
97b379d2 33 #
440af55d
RK
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"
97b379d2
RK
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"
0ecfdebb
RK
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
d3a3ef14
RK
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
440af55d
RK
149
150if __name__ == '__main__':
151 dtest.run()