| 1 | #!/usr/bin/perl |
|---|
| 2 | |
|---|
| 3 | use strict; |
|---|
| 4 | use Test::More qw(no_plan); |
|---|
| 5 | |
|---|
| 6 | BEGIN { |
|---|
| 7 | $ENV{MT_CONFIG} = 'mysql-test.cfg'; |
|---|
| 8 | } |
|---|
| 9 | use lib 't/lib', 'extlib', 'lib', '../lib', '../extlib'; |
|---|
| 10 | use MT::Test qw(:db); |
|---|
| 11 | use MT; |
|---|
| 12 | use MT::Blog; |
|---|
| 13 | use MT::Author; |
|---|
| 14 | use MT::Role; |
|---|
| 15 | use MT::Association; |
|---|
| 16 | use MT::Group; |
|---|
| 17 | use MT::Request; |
|---|
| 18 | |
|---|
| 19 | my $r = MT::Request->instance; |
|---|
| 20 | |
|---|
| 21 | # Users: |
|---|
| 22 | |
|---|
| 23 | my $user_brad = new MT::Author(); |
|---|
| 24 | $user_brad->name('Brad'); |
|---|
| 25 | $user_brad->set_password('(none)'); |
|---|
| 26 | $user_brad->save or die $user_brad->errstr; |
|---|
| 27 | |
|---|
| 28 | my $user_chris = new MT::Author(); |
|---|
| 29 | $user_chris->name('Chris'); |
|---|
| 30 | $user_chris->set_password('(none)'); |
|---|
| 31 | $user_chris->save; |
|---|
| 32 | |
|---|
| 33 | my $user_garth = new MT::Author(); |
|---|
| 34 | $user_garth->name('Garth'); |
|---|
| 35 | $user_garth->set_password('(none)'); |
|---|
| 36 | $user_garth->save; |
|---|
| 37 | |
|---|
| 38 | my $user_gene = new MT::Author(); |
|---|
| 39 | $user_gene->name('Gene'); |
|---|
| 40 | $user_gene->set_password('(none)'); |
|---|
| 41 | $user_gene->save; |
|---|
| 42 | |
|---|
| 43 | my $user_jason = new MT::Author; |
|---|
| 44 | $user_jason->set_password('(none)'); |
|---|
| 45 | $user_jason->name('Jason'); |
|---|
| 46 | $user_jason->is_superuser(1); |
|---|
| 47 | $user_jason->save; |
|---|
| 48 | |
|---|
| 49 | my $user_lilia = new MT::Author(); |
|---|
| 50 | $user_lilia->name('Lilia'); |
|---|
| 51 | $user_lilia->set_password('(none)'); |
|---|
| 52 | $user_lilia->save; |
|---|
| 53 | |
|---|
| 54 | my $user_luke = new MT::Author(); |
|---|
| 55 | $user_luke->name('Luke'); |
|---|
| 56 | $user_luke->set_password('(none)'); |
|---|
| 57 | $user_luke->save; |
|---|
| 58 | |
|---|
| 59 | my $user_mark = new MT::Author(); |
|---|
| 60 | $user_mark->name('Mark'); |
|---|
| 61 | $user_mark->set_password('(none)'); |
|---|
| 62 | $user_mark->save; |
|---|
| 63 | |
|---|
| 64 | my $user_melody = new MT::Author(); |
|---|
| 65 | $user_melody->name('Melody'); |
|---|
| 66 | $user_melody->set_password('(none)'); |
|---|
| 67 | $user_melody->save; |
|---|
| 68 | |
|---|
| 69 | my $user_randy = new MT::Author(); |
|---|
| 70 | $user_randy->name('Randy'); |
|---|
| 71 | $user_randy->set_password('(none)'); |
|---|
| 72 | $user_randy->save; |
|---|
| 73 | |
|---|
| 74 | my $user_walt = new MT::Author; |
|---|
| 75 | $user_walt->name('Walt'); |
|---|
| 76 | $user_walt->set_password('(none)'); |
|---|
| 77 | $user_walt->save; |
|---|
| 78 | |
|---|
| 79 | # Groups |
|---|
| 80 | |
|---|
| 81 | my $group_designers = new MT::Group; |
|---|
| 82 | $group_designers->name('Designers'); |
|---|
| 83 | $group_designers->save; |
|---|
| 84 | $group_designers->add_user($user_lilia); |
|---|
| 85 | $group_designers->add_user($user_walt); |
|---|
| 86 | $group_designers->add_user($user_luke); |
|---|
| 87 | |
|---|
| 88 | my $group_engineers = new MT::Group; |
|---|
| 89 | $group_engineers->name('Engineers'); |
|---|
| 90 | $group_engineers->save; |
|---|
| 91 | $group_engineers->add_user($user_brad); |
|---|
| 92 | $group_engineers->add_user($user_gene); |
|---|
| 93 | $group_engineers->add_user($user_randy); |
|---|
| 94 | $group_engineers->add_user($user_mark); |
|---|
| 95 | $group_engineers->add_user($user_garth); |
|---|
| 96 | |
|---|
| 97 | my $group_it = new MT::Group; |
|---|
| 98 | $group_it->name('IT'); |
|---|
| 99 | $group_it->add_user($user_jason); |
|---|
| 100 | |
|---|
| 101 | my $group_managers = new MT::Group; |
|---|
| 102 | $group_managers->name('Managers'); |
|---|
| 103 | $group_managers->save; |
|---|
| 104 | $group_managers->add_user($user_brad); |
|---|
| 105 | $group_managers->add_user($user_garth); |
|---|
| 106 | $group_managers->add_user($user_randy); |
|---|
| 107 | |
|---|
| 108 | my $group_mt = new MT::Group; |
|---|
| 109 | $group_mt->name('Movable Type'); |
|---|
| 110 | $group_mt->save; |
|---|
| 111 | $group_mt->add_user($user_brad); |
|---|
| 112 | $group_mt->add_user($user_gene); |
|---|
| 113 | $group_mt->add_user($user_luke); |
|---|
| 114 | $group_mt->add_user($user_chris); |
|---|
| 115 | |
|---|
| 116 | my $group_qa = new MT::Group; |
|---|
| 117 | $group_qa->name('QA'); |
|---|
| 118 | $group_qa->save; |
|---|
| 119 | $group_qa->add_user($user_chris); |
|---|
| 120 | |
|---|
| 121 | my $group_typepad = new MT::Group; |
|---|
| 122 | $group_typepad->name('TypePad'); |
|---|
| 123 | $group_typepad->save; |
|---|
| 124 | $group_typepad->add_user($user_garth); |
|---|
| 125 | $group_typepad->add_user($user_mark); |
|---|
| 126 | $group_typepad->add_user($user_walt); |
|---|
| 127 | |
|---|
| 128 | my $group_vox = new MT::Group; |
|---|
| 129 | $group_vox->name('Vox'); |
|---|
| 130 | $group_vox->save; |
|---|
| 131 | $group_vox->add_user($user_lilia); |
|---|
| 132 | $group_vox->add_user($user_randy); |
|---|
| 133 | |
|---|
| 134 | my $role_design = new MT::Role; |
|---|
| 135 | $role_design->name('Custom Designer'); |
|---|
| 136 | $role_design->set_these_permissions('edit_templates'); |
|---|
| 137 | $role_design->save; |
|---|
| 138 | |
|---|
| 139 | my $role_admin = new MT::Role; |
|---|
| 140 | $role_admin->name('Custom Administrator'); |
|---|
| 141 | $role_admin->set_these_permissions('administer_blog'); |
|---|
| 142 | $role_admin->save; |
|---|
| 143 | |
|---|
| 144 | my $role_writer = new MT::Role; |
|---|
| 145 | $role_writer->name('Custom Writer'); |
|---|
| 146 | $role_writer->set_these_permissions('create_post'); |
|---|
| 147 | $role_writer->save; |
|---|
| 148 | |
|---|
| 149 | # Blogs |
|---|
| 150 | |
|---|
| 151 | my $blog_mt = new MT::Blog; |
|---|
| 152 | $blog_mt->name('Movable Type'); |
|---|
| 153 | $blog_mt->save; |
|---|
| 154 | |
|---|
| 155 | my $blog_vox = new MT::Blog; |
|---|
| 156 | $blog_vox->name('Vox Themes'); |
|---|
| 157 | $blog_vox->save; |
|---|
| 158 | |
|---|
| 159 | my $blog_qa = new MT::Blog; |
|---|
| 160 | $blog_qa->name('QA Central'); |
|---|
| 161 | $blog_qa->save; |
|---|
| 162 | |
|---|
| 163 | my $blog_db = new MT::Blog; |
|---|
| 164 | $blog_db->name('Daily Build'); |
|---|
| 165 | $blog_db->save; |
|---|
| 166 | |
|---|
| 167 | my $blog_mgt = new MT::Blog; |
|---|
| 168 | $blog_mgt->name('Management'); |
|---|
| 169 | $blog_mgt->save; |
|---|
| 170 | |
|---|
| 171 | my $blog_tp = new MT::Blog; |
|---|
| 172 | $blog_tp->name('TypePadding'); |
|---|
| 173 | $blog_tp->save; |
|---|
| 174 | |
|---|
| 175 | # Associations |
|---|
| 176 | |
|---|
| 177 | MT::Association->link($blog_mt => $group_mt => $role_writer); |
|---|
| 178 | MT::Association->link($blog_mt => $user_brad => $role_design); |
|---|
| 179 | MT::Association->link($blog_vox => $group_vox => $role_writer); |
|---|
| 180 | MT::Association->link($blog_qa => $group_qa => $role_writer); |
|---|
| 181 | MT::Association->link($blog_db => $group_engineers => $role_writer); |
|---|
| 182 | MT::Association->link($blog_mgt => $group_managers => $role_writer); |
|---|
| 183 | MT::Association->link($blog_tp => $group_typepad => $role_writer); |
|---|
| 184 | |
|---|
| 185 | MT::Association->link($blog_mt => $group_designers => $role_design); |
|---|
| 186 | MT::Association->link($blog_vox => $group_designers => $role_design); |
|---|
| 187 | MT::Association->link($blog_qa => $group_designers => $role_design); |
|---|
| 188 | MT::Association->link($blog_db => $group_designers => $role_design); |
|---|
| 189 | MT::Association->link($blog_mgt => $group_designers => $role_design); |
|---|
| 190 | MT::Association->link($blog_tp => $group_designers => $role_design); |
|---|
| 191 | |
|---|
| 192 | # Test 1 -- All blogs that designers have access to |
|---|
| 193 | |
|---|
| 194 | my @blogs; |
|---|
| 195 | if (my $blog_iter = $group_designers->blog_iter()) { |
|---|
| 196 | while (my $blog = $blog_iter->()) { |
|---|
| 197 | push @blogs, $blog; |
|---|
| 198 | } |
|---|
| 199 | } |
|---|
| 200 | is(@blogs, 6); |
|---|
| 201 | |
|---|
| 202 | # Blogs Walt has access to (all, through design group) |
|---|
| 203 | |
|---|
| 204 | @blogs = (); |
|---|
| 205 | if (my $blog_iter = $user_walt->blog_iter()) { |
|---|
| 206 | while (my $blog = $blog_iter->()) { |
|---|
| 207 | push @blogs, $blog; |
|---|
| 208 | } |
|---|
| 209 | } |
|---|
| 210 | is(@blogs, 6); |
|---|
| 211 | |
|---|
| 212 | # Blogs Brad has access to (MT, Daily Build, Managers) |
|---|
| 213 | |
|---|
| 214 | @blogs = (); |
|---|
| 215 | if (my $blog_iter = $user_brad->blog_iter()) { |
|---|
| 216 | while (my $blog = $blog_iter->()) { |
|---|
| 217 | push @blogs, $blog; |
|---|
| 218 | } |
|---|
| 219 | } |
|---|
| 220 | is(@blogs, 3); |
|---|
| 221 | |
|---|
| 222 | # Blog count for Melody |
|---|
| 223 | |
|---|
| 224 | @blogs = (); |
|---|
| 225 | if (my $blog_iter = $user_melody->blog_iter()) { |
|---|
| 226 | while (my $blog = $blog_iter->()) { |
|---|
| 227 | push @blogs, $blog; |
|---|
| 228 | } |
|---|
| 229 | } |
|---|
| 230 | is(@blogs, 0); |
|---|
| 231 | |
|---|
| 232 | # Can Brad edit templates the Daily Build blog? |
|---|
| 233 | |
|---|
| 234 | ok(!$user_brad->permissions($blog_db)->can_edit_templates); |
|---|
| 235 | |
|---|
| 236 | # Can Walt edit MT templates? Yes |
|---|
| 237 | |
|---|
| 238 | ok($user_walt->permissions($blog_mt)->can_edit_templates); |
|---|
| 239 | |
|---|
| 240 | MT::Association->link($user_walt => $role_writer => $blog_mt); |
|---|
| 241 | |
|---|
| 242 | $r->reset(); |
|---|
| 243 | |
|---|
| 244 | # Can Walt write to MT? Yes |
|---|
| 245 | |
|---|
| 246 | ok($user_walt->permissions($blog_mt)->can_create_post); |
|---|
| 247 | |
|---|
| 248 | MT::Association->unlink($user_walt => $role_writer => $blog_mt); |
|---|
| 249 | |
|---|
| 250 | $r->reset(); |
|---|
| 251 | |
|---|
| 252 | # Can Walt write to MT? No |
|---|
| 253 | |
|---|
| 254 | ok(!$user_walt->permissions($blog_mt)->can_create_post); |
|---|
| 255 | |
|---|
| 256 | $group_designers->remove_user($user_walt); |
|---|
| 257 | |
|---|
| 258 | $r->reset(); |
|---|
| 259 | |
|---|
| 260 | # Can Walt edit MT templates? No |
|---|
| 261 | |
|---|
| 262 | ok(!$user_walt->permissions($blog_mt)->can_edit_templates); |
|---|
| 263 | |
|---|
| 264 | $group_designers->add_user($user_walt); |
|---|
| 265 | |
|---|
| 266 | $r->reset(); |
|---|
| 267 | |
|---|
| 268 | # Can Walt edit MT templates? Yes |
|---|
| 269 | |
|---|
| 270 | ok($user_walt->permissions($blog_mt)->can_edit_templates); |
|---|
| 271 | |
|---|
| 272 | # Disable designer group |
|---|
| 273 | |
|---|
| 274 | $group_designers->status(MT::Group::INACTIVE()); |
|---|
| 275 | $group_designers->save; |
|---|
| 276 | |
|---|
| 277 | $r->reset(); |
|---|
| 278 | |
|---|
| 279 | # Can Walt edit MT templates? No |
|---|
| 280 | |
|---|
| 281 | ok(!$user_walt->permissions($blog_mt)->can_edit_templates); |
|---|
| 282 | ok(!$user_luke->permissions($blog_vox)->can_edit_templates); |
|---|
| 283 | ok(!$user_lilia->permissions($blog_tp)->can_edit_templates); |
|---|
| 284 | |
|---|
| 285 | # Enable designer group |
|---|
| 286 | |
|---|
| 287 | $group_designers->status(MT::Group::ACTIVE()); |
|---|
| 288 | $group_designers->save; |
|---|
| 289 | |
|---|
| 290 | $r->reset(); |
|---|
| 291 | |
|---|
| 292 | # Can Walt edit MT templates? Yes |
|---|
| 293 | |
|---|
| 294 | ok($user_walt->permissions($blog_mt)->can_edit_templates); |
|---|
| 295 | ok($user_luke->permissions($blog_vox)->can_edit_templates); |
|---|
| 296 | ok($user_lilia->permissions($blog_tp)->can_edit_templates); |
|---|