Skip to content

Commit

Permalink
fixing migration + tests
Browse files Browse the repository at this point in the history
  • Loading branch information
sdreher committed Aug 14, 2014
1 parent b666fad commit bcc161e
Show file tree
Hide file tree
Showing 7 changed files with 222 additions and 17 deletions.
57 changes: 57 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
MANAGE=./manage.py
APP=mediathread
FLAKE8=./ve/bin/flake8

jenkins: ./ve/bin/python validate test flake8

./ve/bin/python: requirements.txt bootstrap.py virtualenv.py
./bootstrap.py

test: ./ve/bin/python
$(MANAGE) jenkins

flake8: ./ve/bin/python
$(FLAKE8) $(APP) --max-complexity=17

runserver: ./ve/bin/python validate
$(MANAGE) runserver

migrate: ./ve/bin/python validate jenkins
$(MANAGE) migrate

validate: ./ve/bin/python
$(MANAGE) validate

shell: ./ve/bin/python
$(MANAGE) shell_plus

clean:
rm -rf ve
rm -rf media/CACHE
rm -rf reports
rm -f celerybeat-schedule
rm -rf .coverage
find . -name '*.pyc' -exec rm {} \;

pull:
git pull
make validate
make test
make migrate
make flake8

rebase:
git pull --rebase
make validate
make test
make migrate
make flake8

# run this one the very first time you check
# this out on a new machine to set up dev
# database, etc. You probably *DON'T* want
# to run it after that, though.
install: ./ve/bin/python validate jenkins
createdb $(APP)
$(MANAGE) syncdb --noinput
make migrate
157 changes: 154 additions & 3 deletions mediathread/main/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
#pylint: disable-msg=R0904
#pylint: disable-msg=E1103
from courseaffils.models import Course
from django.contrib.auth.models import User
from django.http.response import Http404
from django.test import TestCase
from django.test.client import Client
from django.test.client import Client, RequestFactory
from mediathread.assetmgr.models import Asset
from mediathread.main.views import MigrateCourseView
from mediathread.projects.models import Project
import json


Expand All @@ -26,9 +31,155 @@ def test_smoke(self):
self.assertEquals(response.status_code, 200)


class MigrateCourseViewTest(TestCase):
fixtures = ['unittest_sample_course.json',
'unittest_sample_projects.json']

def setUp(self):
self.factory = RequestFactory()
self.faculty = User.objects.get(username='test_instructor_two')

self.superuser = User.objects.create(username='ccnmtl',
password='test',
is_superuser=True,
is_staff=True)

self.sample_course = Course.objects.get(title='Sample Course')
self.alt_course = Course.objects.get(title="Alternate Course")

def test_as_student(self):
self.assertTrue(
self.client.login(username='test_student_one', password='test'))
response = self.client.get('/dashboard/migrate/')
self.assertEquals(response.status_code, 403)

def test_not_logged_in(self):
response = self.client.get('/dashboard/migrate/')
self.assertEquals(response.status_code, 302)

def test_get_context_data(self):
request = RequestFactory().get('/dashboard/migrate/')
request.user = User.objects.get(username='test_instructor_two')
request.course = self.sample_course

view = MigrateCourseView()
view.request = request

ctx = view.get_context_data()

self.assertEquals(len(ctx['current_course_faculty']), 2)
self.assertEquals(ctx['current_course_faculty'][0].username,
'test_instructor')
self.assertEquals(ctx['current_course_faculty'][1].username,
'test_instructor_two')

self.assertEquals(len(ctx['available_courses']), 2)
self.assertEquals(ctx['available_courses'][0].title,
'Alternate Course')
self.assertEquals(ctx['available_courses'][1].title,
'Sample Course')

request.user = self.superuser
ctx = view.get_context_data()
self.assertEquals(len(ctx['available_courses']), 2)
self.assertEquals(ctx['available_courses'][0].title,
'Alternate Course')
self.assertEquals(ctx['available_courses'][1].title,
'Sample Course')

def test_post_invalidcourse(self):
data = {
'fromCourse': 23
}

request = RequestFactory().post('/dashboard/migrate/', data)
request.user = self.superuser
request.course = self.sample_course

view = MigrateCourseView()
view.request = request

self.assertRaises(Http404, view.post, request)

def test_post_on_behalf_of_student(self):
student = User.objects.get(username='test_student_alt')
data = {
'fromCourse': self.alt_course.id,
'on_behalf_of': student.id
}

request = RequestFactory().post('/dashboard/migrate/', data)
request.user = self.superuser
request.course = self.sample_course

view = MigrateCourseView()
view.request = request
response = view.post(request)

the_json = json.loads(response.content)
self.assertFalse(the_json['success'])

def test_post_on_behalf_of_faculty(self):
teacher = User.objects.get(username='test_instructor_alt')
data = {
'fromCourse': self.alt_course.id,
'on_behalf_of': teacher.id
}

request = RequestFactory().post('/dashboard/migrate/', data)
request.user = self.superuser
request.course = self.sample_course

view = MigrateCourseView()
view.request = request
response = view.post(request)

the_json = json.loads(response.content)
self.assertFalse(the_json['success'])

def test_post(self):
asset1 = Asset.objects.get(
course=self.sample_course,
title="The Armory - Home to CCNMTL'S CUMC Office")
project1 = Project.objects.get(
course=self.sample_course, title='Sample Course Assignment')
data = {
'fromCourse': self.sample_course.id,
'asset_ids[]': [asset1.id],
'project_ids[]': [project1.id]
}

# Migrate assets from SampleCourse into Alternate Course
# test_instructor_two is a member of both courses
request = RequestFactory().post('/dashboard/migrate/', data)
request.user = User.objects.get(username='test_instructor_two')
request.course = self.alt_course

view = MigrateCourseView()
view.request = request
response = view.post(request)

the_json = json.loads(response.content)
self.assertTrue(the_json['success'])
self.assertEquals(the_json['asset_count'], 4)
self.assertEquals(the_json['project_count'], 1)
self.assertEquals(the_json['note_count'], 6)

Asset.objects.get(
course=self.alt_course,
title="The Armory - Home to CCNMTL'S CUMC Office")
Asset.objects.get(
course=self.alt_course,
title="Mediathread: Introduction")
Asset.objects.get(course=self.alt_course, title="MAAP Award Reception")
Asset.objects.get(course=self.alt_course, title="Project Portfolio")

project1 = Project.objects.get(
course=self.alt_course, title='Sample Course Assignment')
self.assertEquals(len(project1.citations()), 5)


class MigrateMaterialsTest(TestCase):
# Use ``fixtures`` & ``urls`` as normal. See Django's ``TestCase``
# documentation for the gory details.
fixtures = ['unittest_sample_course.json',
'unittest_sample_projects.json']

Expand Down
12 changes: 6 additions & 6 deletions mediathread/main/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,6 @@ def post(self, request):
# maps old ids to new objects
object_map = {'assets': {},
'notes': {},
'note_count': 0,
'projects': {}}

owner = request.user
Expand All @@ -291,14 +290,14 @@ def post(self, request):
'message': '%s is not a course member or faculty member'})
return HttpResponse(json_stream, mimetype='application/json')

if 'asset_ids' in request.POST:
asset_ids = json.loads(request.POST.get('asset_ids'))
if 'asset_ids[]' in request.POST:
asset_ids = request.POST.getlist('asset_ids[]')
assets = Asset.objects.filter(id__in=asset_ids)
object_map = Asset.objects.migrate(
assets, request.course, owner, faculty, object_map)

if 'project_ids' in request.POST:
project_ids = json.loads(request.POST.get('project_ids'))
if 'project_ids[]' in request.POST:
project_ids = request.POST.getlist('project_ids[]')
projects = Project.objects.filter(id__in=project_ids)
object_map = Project.objects.migrate(
projects, request.course, owner, object_map)
Expand All @@ -307,7 +306,8 @@ def post(self, request):
'success': True,
'asset_count': len(object_map['assets']),
'project_count': len(object_map['projects']),
'note_count': object_map['note_count']})
'note_count': len(object_map['notes'])})

return HttpResponse(json_stream, mimetype='application/json')


Expand Down
3 changes: 1 addition & 2 deletions mediathread/projects/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,7 @@ def migrate(self, project_set, course, user, object_map):
note_model = models.get_model('djangosherd', 'sherdnote')
asset_model = models.get_model('assetmgr', 'asset')

for project_json in project_set:
old_project = Project.objects.get(id=project_json['id'])
for old_project in project_set:
project_body = old_project.body
citations = note_model.objects.references_in_string(project_body,
user)
Expand Down
7 changes: 1 addition & 6 deletions mediathread/projects/tests/test_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
from mediathread.djangosherd.models import SherdNote
from mediathread.projects.models import Project
from structuredcollaboration.models import Collaboration
import json


class ProjectTest(TestCase):
Expand Down Expand Up @@ -50,9 +49,6 @@ def test_migrate_one(self):
self.assertEquals(new_project.course, alt_course)
self.assertEquals(new_project.visibility_short(), "Assignment")

project_set = [{"id": 5,
"title": "Sample Course Assignment"}]

def test_migrate_set(self):
self.assertTrue(True)

Expand All @@ -63,8 +59,7 @@ def test_migrate_set(self):

user = User.objects.get(username='test_instructor_two')

project_json = json.dumps(self.project_set)
projects = json.loads(project_json)
projects = Project.objects.filter(title="Sample Course Assignment")

object_map = {'assets': {}, 'notes': {}, 'projects': {}}
object_map = Project.objects.migrate(projects, course,
Expand Down
1 change: 1 addition & 0 deletions mediathread/settings_shared.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# flake8: noqa
# Django settings for mediathread project.

# if you add a 'deploy_specific' directory
Expand Down
2 changes: 2 additions & 0 deletions mediathread/settings_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
LETTUCE_DJANGO_APP = ['lettuce.django']
INSTALLED_APPS = INSTALLED_APPS + LETTUCE_DJANGO_APP

COMPRESS_ROOT = "/Users/sdreher/workspace/mediathread/media/"


# Full run
# time(./manage.py harvest --settings=mediathread.settings_test \
Expand Down

0 comments on commit bcc161e

Please sign in to comment.