Skip to content

Commit a97bd9e

Browse files
committed
Merge pull request #418 from ccnmtl/version-view
Project Version View Fix
2 parents 8cab76b + 7c8e4de commit a97bd9e

File tree

4 files changed

+50
-5
lines changed

4 files changed

+50
-5
lines changed

mediathread/factories.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def create_collaboration(self, create, extracted, **kwargs):
6565
if create:
6666
Collaboration.objects.get_or_create(
6767
content_type=ContentType.objects.get_for_model(Course),
68-
object_pk=str(self.pk))
68+
object_pk=str(self.pk), slug=self.slug())
6969

7070

7171
class SourceFactory(factory.DjangoModelFactory):

mediathread/projects/tests/test_models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ def test_reset_publish_to_world(self):
365365
policy='PublicEditorsAreOwners')
366366
self.assertEquals(
367367
public.public_url(),
368-
'/s/collaboration/%s/' % public.get_collaboration().id)
368+
'/s/%s/project/%s/' % (self.sample_course.slug(), public.id))
369369

370370
Project.objects.reset_publish_to_world(self.sample_course)
371371
self.assertIsNone(public.public_url())

mediathread/projects/tests/test_views.py

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66
from django.core.urlresolvers import reverse
77
from django.test import TestCase
88
from django.test.client import RequestFactory
9+
import reversion
910

1011
from mediathread.factories import MediathreadTestMixin, UserFactory, \
1112
AssetFactory, SherdNoteFactory, ProjectFactory, AssignmentItemFactory, \
1213
ProjectNoteFactory
1314
from mediathread.projects.models import Project, \
14-
RESPONSE_VIEW_POLICY, RESPONSE_VIEW_NEVER, RESPONSE_VIEW_SUBMITTED
15+
RESPONSE_VIEW_POLICY, RESPONSE_VIEW_NEVER, RESPONSE_VIEW_SUBMITTED, \
16+
PUBLISH_WHOLE_WORLD
1517
from mediathread.projects.views import SelectionAssignmentView, ProjectItemView
16-
import reversion
1718

1819

1920
class ProjectViewTest(MediathreadTestMixin, TestCase):
@@ -339,6 +340,48 @@ def test_project_revisions(self):
339340
the_json = loads(response.content)
340341
self.assertEquals(len(the_json['revisions']), 1)
341342

343+
def test_project_view_readonly(self):
344+
version = self.project_private.versions().next()
345+
url = reverse('project-view-readonly',
346+
kwargs={'project_id': self.project_private.id,
347+
'version_number': version.revision_id})
348+
349+
# anonymous
350+
response = self.client.get(url, {})
351+
self.assertEquals(response.status_code, 403)
352+
353+
# forbidden
354+
self.client.login(username=self.student_two.username, password='test')
355+
response = self.client.get(url, {})
356+
self.assertEquals(response.status_code, 403)
357+
358+
# owner
359+
self.client.login(username=self.student_one.username, password='test')
360+
response = self.client.get(url, {})
361+
self.assertEquals(response.status_code, 200)
362+
363+
# ajax
364+
response = self.client.get(url, {},
365+
HTTP_X_REQUESTED_WITH='XmlHttpRequest')
366+
self.assertEquals(response.status_code, 200)
367+
368+
def test_project_public_view(self):
369+
url = self.project_private.get_collaboration().get_absolute_url()
370+
371+
# still private
372+
response = self.client.get(url, {})
373+
self.assertEquals(response.status_code, 403)
374+
375+
# reset to public
376+
self.project_private.create_or_update_collaboration(
377+
PUBLISH_WHOLE_WORLD[0])
378+
self.project_private.date_submitted = datetime.now()
379+
self.project_private.save()
380+
381+
url = self.project_private.public_url()
382+
response = self.client.get(url, {})
383+
self.assertEquals(response.status_code, 200)
384+
342385
def test_project_workspace_errors(self):
343386
project_id = self.project_private.id
344387
url = reverse('project-workspace', args=[project_id])

mediathread/projects/views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,9 @@ def project_view_readonly(request, project_id, version_number=None):
251251
context_instance=RequestContext(request))
252252
else:
253253
if version_number:
254-
version = get_object_or_404(Version, revision_id=version_number)
254+
version = get_object_or_404(Version,
255+
object_id=str(project.id),
256+
revision_id=version_number)
255257
project = version.object_version.object
256258

257259
panels = []

0 commit comments

Comments
 (0)