Skip to content

Commit

Permalink
Publisher cleanup.
Browse files Browse the repository at this point in the history
ECOM-7314
  • Loading branch information
waheedahmed committed Feb 28, 2017
1 parent 7828932 commit 02c46b4
Show file tree
Hide file tree
Showing 8 changed files with 2 additions and 405 deletions.
4 changes: 0 additions & 4 deletions course_discovery/apps/publisher/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -344,10 +344,6 @@ class Seat(TimeStampedModel, ChangedByMixin):
def __str__(self):
return '{course}: {type}'.format(course=self.course_run.course.title, type=self.type)

@property
def post_back_url(self):
return reverse('publisher:publisher_seats_edit', kwargs={'pk': self.id})

@property
def is_valid_seat(self):
return self.type == self.AUDIT or self.type in [self.VERIFIED, self.PROFESSIONAL] and self.price > 0
Expand Down
6 changes: 0 additions & 6 deletions course_discovery/apps/publisher/tests/test_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -320,12 +320,6 @@ def test_str(self):
)
)

def test_post_back_url(self):
self.assertEqual(
self.seat.post_back_url,
reverse('publisher:publisher_seats_edit', kwargs={'pk': self.seat.id})
)


class UserAttributeTests(TestCase):
""" Tests for the publisher `UserAttribute` model. """
Expand Down
169 changes: 0 additions & 169 deletions course_discovery/apps/publisher/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -493,175 +493,6 @@ def test_create_course_run_and_seat(self):
self.assertEqual(new_seat.course_run.course.course_team_admin, new_user)


class SeatsCreateUpdateViewTests(TestCase):
""" Tests for the publisher `CreateSeatView` and `UpdateSeatView`. """

def setUp(self):
super(SeatsCreateUpdateViewTests, self).setUp()
self.seat = factories.SeatFactory(type=Seat.PROFESSIONAL, credit_hours=0)
self.organization_extension = factories.OrganizationExtensionFactory()
self.seat.course_run.course.organizations.add(self.organization_extension.organization)
self.seat_dict = model_to_dict(self.seat)
self.seat_dict.pop('upgrade_deadline')
self.user = UserFactory()
self.site = Site.objects.get(pk=settings.SITE_ID)
self.client.login(username=self.user.username, password=USER_PASSWORD)
self.seat_edit_url = reverse('publisher:publisher_seats_edit', kwargs={'pk': self.seat.id})

def test_seat_form_without_login(self):
""" Verify that user can't access new seat form page when not logged in. """
self.client.logout()
response = self.client.get(reverse('publisher:publisher_seats_new'))

self.assertRedirects(
response,
expected_url='{url}?next={next}'.format(
url=reverse('login'),
next=reverse('publisher:publisher_seats_new')
),
status_code=302,
target_status_code=302
)

def test_seat_view_page(self):
""" Verify that we can open new seat page. """
response = self.client.get(reverse('publisher:publisher_seats_new'))
# Assert that we can load seat page.
self.assertEqual(response.status_code, 200)

def test_create_seat(self):
""" Verify that we can create a new seat. """
seat_price = 670.00
self.seat_dict['price'] = seat_price
response = self.client.post(reverse('publisher:publisher_seats_new'), self.seat_dict)
seat = Seat.objects.get(course_run=self.seat.course_run, price=seat_price)

self.user.groups.add(self.organization_extension.group)
# edit permission require on seat edit page only.
assign_perm(
OrganizationExtension.EDIT_COURSE_RUN, self.organization_extension.group, self.organization_extension
)
self.assertRedirects(
response,
expected_url=reverse('publisher:publisher_seats_edit', kwargs={'pk': seat.id}),
status_code=302,
target_status_code=200
)

self.assertEqual(seat.price, seat_price)

def test_update_seat_with_admin(self):
""" Verify that publisher admin can update an existing seat. """
self.user.groups.add(Group.objects.get(name=ADMIN_GROUP_NAME))
self.assertEqual(self.seat.type, Seat.PROFESSIONAL)
updated_seat_price = 470.00
self.seat_dict['price'] = updated_seat_price
self.seat_dict['type'] = Seat.VERIFIED
self.assertNotEqual(self.seat.price, updated_seat_price)
self.assertNotEqual(self.seat.changed_by, self.user)
response = self.client.post(
reverse('publisher:publisher_seats_edit', kwargs={'pk': self.seat.id}),
self.seat_dict
)

self.assertRedirects(
response,
expected_url=self.seat_edit_url,
status_code=302,
target_status_code=200
)

seat = Seat.objects.get(id=self.seat.id)
# Assert that seat is updated.
self.assertEqual(seat.price, updated_seat_price)
self.assertEqual(seat.changed_by, self.user)
self.assertEqual(seat.type, Seat.VERIFIED)

self.seat_dict['type'] = Seat.HONOR
response = self.client.post(self.seat_edit_url, self.seat_dict)
seat = Seat.objects.get(id=self.seat.id)
# Assert that we can change seat type.
self.assertEqual(seat.type, Seat.HONOR)

self.assertRedirects(
response,
expected_url=self.seat_edit_url,
status_code=302,
target_status_code=200
)

# add new and check the comment on edit page.
comment = CommentFactory(content_object=self.seat, user=self.user, site=self.site)
response = self.client.get(self.seat_edit_url)
self.assertContains(response, 'Comment:')
self.assertContains(response, comment.comment)

def test_edit_seat_page_with_non_staff(self):
""" Verify that non internal user can't access seat edit page without permission. """
non_internal_user, __ = create_non_staff_user_and_login(self)
response = self.client.get(reverse('publisher:publisher_seats_edit', kwargs={'pk': self.seat.id}))

self.assertEqual(response.status_code, 403)

non_internal_user.groups.add(Group.objects.get(name=INTERNAL_USER_GROUP_NAME))
response = self.client.get(reverse('publisher:publisher_seats_edit', kwargs={'pk': self.seat.id}))

self.assertEqual(response.status_code, 200)

def test_update_seat_with_internal_user(self):
""" Tests update seat for internal user. """
non_internal_user, __ = create_non_staff_user_and_login(self)

self.assertEqual(self.seat.type, Seat.PROFESSIONAL)
updated_seat_price = 470.00
self.seat_dict['price'] = updated_seat_price
self.seat_dict['type'] = Seat.VERIFIED
self.assertNotEqual(self.seat.price, updated_seat_price)

response = self.client.post(
reverse('publisher:publisher_seats_edit', kwargs={'pk': self.seat.id}),
self.seat_dict
)

# verify that non internal user can't update course seat without permission
self.assertEqual(response.status_code, 403)

non_internal_user.groups.add(Group.objects.get(name=INTERNAL_USER_GROUP_NAME))

response = self.client.post(
reverse('publisher:publisher_seats_edit', kwargs={'pk': self.seat.id}),
self.seat_dict
)

self.assertRedirects(
response,
expected_url=reverse('publisher:publisher_seats_edit', kwargs={'pk': self.seat.id}),
status_code=302,
target_status_code=200
)

seat = Seat.objects.get(id=self.seat.id)
# Assert that seat is updated.
self.assertEqual(seat.price, updated_seat_price)
self.assertEqual(seat.type, Seat.VERIFIED)

self.seat_dict['type'] = Seat.HONOR
response = self.client.post(
reverse('publisher:publisher_seats_edit', kwargs={'pk': self.seat.id}),
self.seat_dict
)
seat = Seat.objects.get(id=self.seat.id)
# Assert that we can change seat type.
self.assertEqual(seat.type, Seat.HONOR)

self.assertRedirects(
response,
expected_url=reverse('publisher:publisher_seats_edit', kwargs={'pk': self.seat.id}),
status_code=302,
target_status_code=200
)


@ddt.ddt
class CourseRunDetailTests(TestCase):
""" Tests for the course-run detail view. """
Expand Down
2 changes: 0 additions & 2 deletions course_discovery/apps/publisher/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@
),
url(r'^course_runs/(?P<pk>\d+)/$', views.CourseRunDetailView.as_view(), name='publisher_course_run_detail'),
url(r'^course_runs/(?P<pk>\d+)/edit/$', views.CourseRunEditView.as_view(), name='publisher_course_runs_edit'),
url(r'^seats/new/$', views.CreateSeatView.as_view(), name='publisher_seats_new'),
url(r'^seats/(?P<pk>\d+)/edit/$', views.UpdateSeatView.as_view(), name='publisher_seats_edit'),
url(
r'^user/toggle/email_settings/$',
views.ToggleEmailNotification.as_view(),
Expand Down
40 changes: 2 additions & 38 deletions course_discovery/apps/publisher/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,16 @@
from course_discovery.apps.core.models import User
from course_discovery.apps.publisher import emails, mixins
from course_discovery.apps.publisher.choices import CourseRunStateChoices, CourseStateChoices, PublisherUserRole
from course_discovery.apps.publisher.forms import CustomCourseForm, CustomCourseRunForm, CustomSeatForm, SeatForm
from course_discovery.apps.publisher.forms import CustomCourseForm, CustomCourseRunForm, CustomSeatForm
from course_discovery.apps.publisher.models import (Course, CourseRun, CourseRunState, CourseState, CourseUserRole,
OrganizationExtension, Seat, UserAttributes)
OrganizationExtension, UserAttributes)
from course_discovery.apps.publisher.utils import (get_internal_users, is_internal_user, is_project_coordinator_user,
is_publisher_admin, make_bread_crumbs)
from course_discovery.apps.publisher.wrappers import CourseRunWrapper

logger = logging.getLogger(__name__)


SEATS_HIDDEN_FIELDS = ['price', 'currency', 'upgrade_deadline', 'credit_provider', 'credit_hours']

ROLE_WIDGET_HEADINGS = {
PublisherUserRole.PartnerManager: _('PARTNER MANAGER'),
PublisherUserRole.ProjectCoordinator: _('PROJECT COORDINATOR'),
Expand Down Expand Up @@ -614,40 +612,6 @@ def post(self, request, *args, **kwargs):
return render(request, self.template_name, context, status=400)


class CreateSeatView(mixins.LoginRequiredMixin, mixins.FormValidMixin, CreateView):
""" Create Seat View."""
model = Seat
form_class = SeatForm
template_name = 'publisher/seat_form.html'
success_url = 'publisher:publisher_seats_edit'

def get_context_data(self, **kwargs):
context = super(CreateSeatView, self).get_context_data(**kwargs)
context['hidden_fields'] = SEATS_HIDDEN_FIELDS
return context

def get_success_url(self):
return reverse(self.success_url, kwargs={'pk': self.object.id})


class UpdateSeatView(mixins.LoginRequiredMixin, mixins.PublisherPermissionMixin, mixins.FormValidMixin, UpdateView):
""" Update Seat View."""
model = Seat
form_class = SeatForm
permission = OrganizationExtension.EDIT_COURSE_RUN
template_name = 'publisher/seat_form.html'
success_url = 'publisher:publisher_seats_edit'

def get_context_data(self, **kwargs):
context = super(UpdateSeatView, self).get_context_data(**kwargs)
context['hidden_fields'] = SEATS_HIDDEN_FIELDS
context['comment_object'] = self.object
return context

def get_success_url(self):
return reverse(self.success_url, kwargs={'pk': self.object.id})


class ToggleEmailNotification(mixins.LoginRequiredMixin, View):
""" Toggle User Email Notification Settings."""

Expand Down
Loading

0 comments on commit 02c46b4

Please sign in to comment.