Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion donations/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import csv
from django.shortcuts import render
from django.http import JsonResponse, HttpResponse
from .models import ThankYouNote, DonationPopup
from .models import ThankYouNote, DonationPopup, Fundraiser


class ThankYouNoteAdmin(admin.ModelAdmin):
Expand Down Expand Up @@ -56,5 +56,20 @@ class DonationPopupAdmin(admin.ModelAdmin):
'hide_donation_popup')


class FundraiserAdmin(admin.ModelAdmin):
display_list = ('color_scheme',
'message_type',
'headline',
'message',
'button_text',
'button_url',
'box_headline',
'box_html',
'fundraiser_image',
'goal_amount',
'goal_time',)


admin.site.register(ThankYouNote, ThankYouNoteAdmin)
admin.site.register(DonationPopup, DonationPopupAdmin)
admin.site.register(Fundraiser, FundraiserAdmin)
30 changes: 30 additions & 0 deletions donations/migrations/0006_fundraiser.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Generated by Django 3.2.9 on 2022-01-06 14:58

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('donations', '0005_auto_20211021_1045'),
]

operations = [
migrations.CreateModel(
name='Fundraiser',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('color_scheme', models.CharField(blank=True, choices=[('Red', 'red'), ('Blue', 'blue'), ('Green', 'green'), ('Orange', 'orange')], default='', max_length=255)),
('message_type', models.CharField(blank=True, choices=[('Goal', 'goal'), ('Message', 'message')], default='', max_length=255)),
('headline', models.TextField(blank=True, default='', null=True)),
('message', models.TextField(blank=True, default='', null=True)),
('button_text', models.CharField(max_length=255)),
('button_url', models.CharField(max_length=255)),
('box_headline', models.TextField(blank=True, default='', null=True)),
('box_html', models.TextField(blank=True, default='', null=True)),
('fundraiser_image', models.ImageField(blank=True, null=True, upload_to='')),
('goal_amount', models.IntegerField(blank=True, null=True)),
('goal_time', models.DateTimeField(blank=True, null=True)),
],
),
]
37 changes: 36 additions & 1 deletion donations/models.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
from django.db import models

COLOR_SCHEME_CHOICES = (
('red', 'Red'),
('blue', 'Blue'),
('green', 'Green'),
('orange', 'Orange'),
)

MESSAGE_TYPE_CHOICES = (
('goal', 'Goal'),
('message', 'Message'),
)


class ThankYouNote(models.Model):
thank_you_note = models.TextField(default="", blank=True)
first_name = models.CharField(max_length=255, default="", blank=True)
Expand Down Expand Up @@ -28,5 +41,27 @@ def __str__(self):

def save(self, *args, **kwargs):
if DonationPopup.objects.exists() and not self.pk:
raise ValidationError('There is can be only one donation popup instance')
raise ValidationError('There can be only one donation popup instance')
return super(DonationPopup, self).save(*args, **kwargs)


class Fundraiser(models.Model):
color_scheme = models.CharField(max_length=255,
choices=COLOR_SCHEME_CHOICES,
blank=True,
default='')
message_type = models.CharField(max_length=255,
choices=MESSAGE_TYPE_CHOICES,
blank=True,
default='')
headline = models.TextField(blank=True, null=True, default="")
message = models.TextField(blank=True, null=True, default="")
button_text = models.CharField(max_length=255)
button_url = models.CharField(max_length=255)
box_headline = models.TextField(blank=True, null=True, default="")
box_html = models.TextField(blank=True, null=True, default="")
fundraiser_image = models.ImageField(null=True, blank=True)
goal_amount = models.IntegerField(blank=True, null=True)
goal_time = models.DateTimeField(blank=True, null=True)


19 changes: 18 additions & 1 deletion donations/serializers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .models import ThankYouNote, DonationPopup
from .models import ThankYouNote, DonationPopup, Fundraiser
from rest_framework import serializers


Expand Down Expand Up @@ -36,3 +36,20 @@ class Meta:
'giving_optional',
'go_to_pdf_link_text',
'hide_donation_popup')


class FundraiserSerializer(serializers.ModelSerializer):
class Meta:
model = Fundraiser
fields = ('color_scheme',
'message_type',
'headline',
'message',
'button_text',
'button_url',
'box_headline',
'box_html',
'fundraiser_image',
'goal_amount',
'goal_time',)

30 changes: 28 additions & 2 deletions donations/tests.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.test import TestCase

from donations.models import DonationPopup, ThankYouNote
from donations.serializers import DonationPopupSerializer
from donations.models import DonationPopup, ThankYouNote, Fundraiser
from donations.serializers import DonationPopupSerializer, FundraiserSerializer

from rest_framework import status
from rest_framework.test import APITestCase
Expand Down Expand Up @@ -44,3 +44,29 @@ def test_thank_you_note_api_post(self):
self.assertEqual(tyn[0]['first_name'], 'Jessica')
self.assertEqual(tyn[0]['consent_to_share_or_contact'], True)
self.assertEqual(tyn[0]['contact_email_address'], 'jess@example.com')


class FundraiserTest(APITestCase, TestCase):

def setUp(self):
fr = Fundraiser.objects.create(
color_scheme="blue",
message_type="goal",
headline="this is a headline",
message="Test message",
button_text="Give Today",
button_url="https://openstax.org/give",
box_headline="This is a box headline",
box_html="this goes <strong>in</strong> a box",
fundraiser_image="data-science3x.max-165x165.png",
goal_amount=2314,
goal_time="2022-01-12T09:07:01-06:00"
)
fr.save()

def test_fundraiser_api_get(self):
response = self.client.get('/apps/cms/api/donations/fundraiser/', format='json')
fundraiser = Fundraiser.objects.all()
serializer = FundraiserSerializer(fundraiser, many=True)
self.assertEqual(response.data[0]['headline'], serializer.data[0]['headline'])
self.assertEqual(response.status_code, status.HTTP_200_OK)
1 change: 1 addition & 0 deletions donations/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

router = routers.SimpleRouter()
router.register(r'donation-popup', views.DonationPopupViewSet, basename='DonationPopup')
router.register(r'fundraiser', views.FundraiserViewSet, basename='Fundraiser')

urlpatterns = [
url(r'', include(router.urls)),
Expand Down
10 changes: 8 additions & 2 deletions donations/views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from rest_framework import viewsets
from .models import ThankYouNote, DonationPopup
from .serializers import ThankYouNoteSerializer, DonationPopupSerializer
from .models import ThankYouNote, DonationPopup, Fundraiser
from .serializers import ThankYouNoteSerializer, DonationPopupSerializer, FundraiserSerializer
from rest_framework.decorators import action
from django.utils import timezone
from django.http import JsonResponse
Expand Down Expand Up @@ -33,4 +33,10 @@ def post(self, request):
class DonationPopupViewSet(viewsets.ModelViewSet):
serializer_class = DonationPopupSerializer
queryset = DonationPopup.objects.all()
http_method_names = ['get']


class FundraiserViewSet(viewsets.ModelViewSet):
serializer_class = FundraiserSerializer
queryset = Fundraiser.objects.all()
http_method_names = ['get']