diff --git a/systers_portal/common/tests/test_views.py b/systers_portal/common/tests/test_views.py index 8b913a64..8976302f 100644 --- a/systers_portal/common/tests/test_views.py +++ b/systers_portal/common/tests/test_views.py @@ -38,7 +38,7 @@ def test_login_logout(self): # Log in the user self.client.login(username=u.username, password=u.password) # Check response code for logout - response = self.client.get(reverse('logout')) + response = self.client.get(reverse('account_logout')) self.assertEqual(response.status_code, 302) # Log out the user self.client.logout() diff --git a/systers_portal/meetup/forms.py b/systers_portal/meetup/forms.py index 753aff62..4a714f24 100644 --- a/systers_portal/meetup/forms.py +++ b/systers_portal/meetup/forms.py @@ -37,9 +37,10 @@ class RequestMeetupForm(ModelFormWithHelper): """ Form to create a new Meetup Request. """ class Meta: model = RequestMeetup - fields = ('title', 'slug', 'date', 'time', 'venue', 'description') + fields = ('title', 'slug', 'date', 'start_time', 'end_time', 'venue', 'description') widgets = {'date': forms.DateInput(attrs={'type': 'text', 'class': 'datepicker'}), - 'time': forms.TimeInput(attrs={'type': 'text', 'class': 'timepicker'})} + 'start_time': forms.TimeInput(attrs={'type': 'text', 'class': 'timepicker'}), + 'end_time': forms.TimeInput(attrs={'type': 'text', 'class': 'timepicker'})} helper_class = SubmitCancelFormHelper helper_cancel_href = "{% url 'about_meetup_location' meetup_location.slug %}" @@ -70,16 +71,14 @@ def clean_date(self): code="date_in_past") return date - def clean_time(self): - """Check that if the date is the current date, the time is not the current time. If so, - raise an error.""" - time = self.cleaned_data.get('time') - date = self.cleaned_data.get('date') - if time: - if date == timezone.now().date() and time < timezone.now().time(): - raise forms.ValidationError("Time should not be a time that has already passed.", - code="time_in_past") - return time + def clean_end_time(self): + """Check that if start time is less than end time.""" + start_time = self.cleaned_data.get('start_time') + end_time = self.cleaned_data.get('end_time') + + if end_time < start_time: + raise forms.ValidationError("End time should not be less than Start Time.") + return end_time class AddMeetupForm(ModelFormWithHelper): @@ -91,9 +90,11 @@ class AddMeetupForm(ModelFormWithHelper): """ class Meta: model = Meetup - fields = ('title', 'slug', 'date', 'time', 'venue', 'description', 'meetup_picture') + fields = ('title', 'slug', 'date', 'start_time', 'end_time', 'venue', 'description', + 'meetup_picture') widgets = {'date': forms.DateInput(attrs={'type': 'text', 'class': 'datepicker'}), - 'time': forms.TimeInput(attrs={'type': 'text', 'class': 'timepicker'})} + 'start_time': forms.TimeInput(attrs={'type': 'text', 'class': 'timepicker'}), + 'end_time': forms.TimeInput(attrs={'type': 'text', 'class': 'timepicker'})} helper_class = SubmitCancelFormHelper helper_cancel_href = "{% url 'about_meetup_location' meetup_location.slug %}" @@ -121,24 +122,23 @@ def clean_date(self): raise forms.ValidationError("Date should not be before today's date.") return date - def clean_time(self): - """Check that if the date is the current date, the time is not the current time. If so, - raise an error.""" - time = self.cleaned_data.get('time') - date = self.cleaned_data.get('date') - if time: - if date == timezone.now().date() and time < timezone.now().time(): - raise forms.ValidationError("Time should not be a time that has already passed.") - return time + def clean_end_time(self): + """Check that if start time is less than end time.""" + start_time = self.cleaned_data.get('start_time') + end_time = self.cleaned_data.get('end_time') + if end_time < start_time: + raise forms.ValidationError("End time should not be less than Start Time.") + return end_time class EditMeetupForm(ModelFormWithHelper): """Form to edit Meetup""" class Meta: model = Meetup - fields = ('title', 'slug', 'date', 'time', 'description', 'venue') + fields = ('title', 'slug', 'date', 'start_time', 'end_time', 'description', 'venue') widgets = {'date': forms.DateInput(attrs={'type': 'date', 'class': 'datepicker'}), - 'time': forms.TimeInput(attrs={'type': 'time', 'class': 'timepicker'})} + 'start_time': forms.TimeInput(attrs={'type': 'time', 'class': 'timepicker'}), + 'end_time': forms.TimeInput(attrs={'type': 'time', 'class': 'timepicker'})} helper_class = SubmitCancelFormHelper helper_cancel_href = "{% url 'view_meetup' meetup_location.slug meetup.slug %}" diff --git a/systers_portal/meetup/migrations/0003_meetup_start_time.py b/systers_portal/meetup/migrations/0003_meetup_start_time.py new file mode 100644 index 00000000..78293b3c --- /dev/null +++ b/systers_portal/meetup/migrations/0003_meetup_start_time.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2020-04-16 06:44 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('meetup', '0002_meetup_meetup_picture'), + ] + + operations = [ + migrations.AddField( + model_name='meetup', + name='start_time', + field=models.TimeField(null=True, verbose_name=b'Start Time'), + ), + ] diff --git a/systers_portal/meetup/migrations/0004_auto_20200512_1414.py b/systers_portal/meetup/migrations/0004_auto_20200512_1414.py new file mode 100644 index 00000000..6749e97d --- /dev/null +++ b/systers_portal/meetup/migrations/0004_auto_20200512_1414.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2020-05-12 14:14 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('meetup', '0003_meetup_start_time'), + ] + + operations = [ + migrations.RemoveField( + model_name='meetup', + name='time', + ), + migrations.RemoveField( + model_name='requestmeetup', + name='time', + ), + migrations.AddField( + model_name='requestmeetup', + name='end_time', + field=models.TimeField(null=True, verbose_name=b'End Time'), + ), + migrations.AddField( + model_name='requestmeetup', + name='start_time', + field=models.TimeField(null=True, verbose_name=b'Start Time'), + ), + ] diff --git a/systers_portal/meetup/models.py b/systers_portal/meetup/models.py index e26ff3a3..8a0caa32 100644 --- a/systers_portal/meetup/models.py +++ b/systers_portal/meetup/models.py @@ -93,7 +93,7 @@ class Meetup(models.Model): slug = models.SlugField(max_length=50, unique=True, verbose_name="Slug") date = models.DateField(verbose_name="Date") end_date = models.DateField(verbose_name="End Date", null=True) - time = models.TimeField(verbose_name="Time", blank=True) + start_time = models.TimeField(verbose_name="Start Time", null=True) end_time = models.TimeField(verbose_name="End Time", null=True) venue = models.CharField(max_length=512, verbose_name="Venue", blank=True) description = models.TextField(verbose_name="Description") @@ -114,7 +114,8 @@ class RequestMeetup(models.Model): title = models.CharField(max_length=50, verbose_name="Title",) slug = models.SlugField(max_length=50, unique=True, verbose_name="Slug") date = models.DateField(verbose_name="Date") - time = models.TimeField(verbose_name="Time", blank=True) + start_time = models.TimeField(verbose_name="Start Time", null=True) + end_time = models.TimeField(verbose_name="End Time", null=True) venue = models.CharField(max_length=512, verbose_name="Venue", blank=True) description = RichTextField(verbose_name="Description") meetup_location = models.ForeignKey(MeetupLocation, verbose_name="Meetup Location") diff --git a/systers_portal/meetup/tests/test_forms.py b/systers_portal/meetup/tests/test_forms.py index d9edaac9..896ce7d6 100644 --- a/systers_portal/meetup/tests/test_forms.py +++ b/systers_portal/meetup/tests/test_forms.py @@ -4,7 +4,6 @@ from django.utils.timezone import timedelta from cities_light.models import City, Country from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import ValidationError from django.core import mail from meetup.forms import (AddMeetupForm, EditMeetupForm, AddMeetupLocationMemberForm, @@ -34,7 +33,9 @@ def setUp(self): self.meetup = Meetup.objects.create(title='Foo Bar Baz', slug='foobarbaz', date=timezone.now().date(), - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is test Meetup', meetup_location=self.meetup_location, created_by=self.systers_user, @@ -68,9 +69,10 @@ def test_add_request_meetup_form(self): self.assertFalse(form.is_valid()) date = (timezone.now() + timedelta(2)).date() - time = timezone.now().time() - data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'time': time, - 'description': "It's a test meetup."} + start_time = timezone.now().time() + end_time = (timezone.now() + timedelta(minutes=30)).time() + data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'start_time': start_time, + 'end_time': end_time, 'description': "It's a test meetup."} form = RequestMeetupForm(data=data, created_by=self.user, meetup_location=self.meetup_location) self.assertTrue(form.is_valid()) @@ -84,28 +86,29 @@ def test_add_request_meetup_form(self): self.assertIn('New Meetup Request', mail.outbox[0].subject) def test_request_meetup_form_with_past_date(self): - """Test add Meetup form with a date that has passed.""" + """Test add Request Meetup form with a date that has passed.""" date = (timezone.now() - timedelta(2)).date() - time = timezone.now().time() - data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'time': time, - 'description': "It's a test meetup."} - form = AddMeetupForm(data=data, created_by=self.systers_user, - meetup_location=self.meetup_location) + start_time = timezone.now().time() + end_time = (timezone.now() + timedelta(minutes=30)).time() + data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'start_time': start_time, + 'end_time': end_time, 'description': "It's a test meetup."} + form = RequestMeetupForm(data=data, created_by=self.systers_user, + meetup_location=self.meetup_location) self.assertFalse(form.is_valid()) self.assertTrue(form.errors['date'], ["Date should not be before today's date."]) - def test_request_meetup_form_with_passed_time(self): - """Test add Meetup form with a time that has passed.""" + def test_request_meetup_form_with_start_time_less_than_end_time(self): + """Test add Request Meetup form with end time is less than start time""" date = timezone.now().date() - time = (timezone.now() - timedelta(2)).time() - data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'time': time, - 'description': "It's a test meetup."} - form = AddMeetupForm(data=data, created_by=self.systers_user, - meetup_location=self.meetup_location) + start_time = timezone.now().time() + end_time = (timezone.now() - timedelta(minutes=30)).time() + data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'start_time': start_time, + 'end_time': end_time, 'description': "It's a test meetup."} + form = RequestMeetupForm(data=data, created_by=self.systers_user, + meetup_location=self.meetup_location) self.assertFalse(form.is_valid()) - self.assertTrue(form.errors['time'], - ["Time should not be a time that has already passed."]) - self.assertRaises(ValidationError, form.clean_time()) + self.assertTrue(form.errors['end_time'], + ["End time should not be less than Start Time."]) class AddMeetupFormTestCase(MeetupFormTestCaseBase, TestCase): @@ -125,8 +128,10 @@ def test_add_meetup_form(self): self.assertFalse(form.is_valid()) date = (timezone.now() + timedelta(2)).date() - time = timezone.now().time() - data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'time': time, + start_time = timezone.now().time() + end_time = (timezone.now() + timedelta(minutes=30)).time() + data = {'title': 'Foo', 'slug': 'foo', 'date': date, + 'start_time': start_time, 'end_time': end_time, 'description': "It's a test meetup."} form = AddMeetupForm(data=data, created_by=self.user, meetup_location=self.meetup_location) @@ -145,25 +150,27 @@ def test_add_meetup_form(self): def test_add_meetup_form_with_past_date(self): """Test add Meetup form with a date that has passed.""" date = (timezone.now() - timedelta(2)).date() - time = timezone.now().time() - data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'time': time, - 'description': "It's a test meetup."} + start_time = timezone.now().time() + end_time = (timezone.now() + timedelta(minutes=30)).time() + data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'start_time': start_time, + 'end_time': end_time, 'description': "It's a test meetup."} form = AddMeetupForm(data=data, created_by=self.systers_user, meetup_location=self.meetup_location) self.assertFalse(form.is_valid()) self.assertTrue(form.errors['date'], ["Date should not be before today's date."]) - def test_add_meetup_form_with_passed_time(self): - """Test add Meetup form with a time that has passed.""" + def test_request_meetup_form_with_start_time_less_than_end_time(self): + """Test add Meetup form with end time is less than start time""" date = timezone.now().date() - time = (timezone.now() - timedelta(2)).time() - data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'time': time, - 'description': "It's a test meetup."} + start_time = timezone.now().time() + end_time = (timezone.now() - timedelta(minutes=30)).time() + data = {'title': 'Foo', 'slug': 'foo', 'date': date, 'start_time': start_time, + 'end_time': end_time, 'description': "It's a test meetup."} form = AddMeetupForm(data=data, created_by=self.systers_user, meetup_location=self.meetup_location) self.assertFalse(form.is_valid()) - self.assertTrue(form.errors['time'], - ["Time should not be a time that has already passed."]) + self.assertTrue(form.errors['end_time'], + ["End time should not be less than Start Time."]) class EditMeetupFormTestCase(MeetupFormTestCaseBase, TestCase): @@ -174,9 +181,11 @@ def test_edit_meetup_form(self): self.assertFalse(form.is_valid()) date = (timezone.now() + timedelta(2)).date() - time = timezone.now().time() + start_time = timezone.now().time() + end_time = (timezone.now() - timedelta(minutes=30)).time() - data = {'slug': 'foobar', 'title': 'Foo Bar', 'date': date, 'time': time, + data = {'slug': 'foobar', 'title': 'Foo Bar', 'date': date, + 'start_time': start_time, 'end_time': end_time, 'description': "It's a test meetup.", 'venue': 'test address'} form = EditMeetupForm(instance=self.meetup, data=data) self.assertTrue(form.is_valid()) diff --git a/systers_portal/meetup/tests/test_models.py b/systers_portal/meetup/tests/test_models.py index bd1dce0f..ffcb70bb 100644 --- a/systers_portal/meetup/tests/test_models.py +++ b/systers_portal/meetup/tests/test_models.py @@ -1,6 +1,7 @@ from django.contrib.auth.models import User from django.test import TestCase from django.utils import timezone +from django.utils.timezone import timedelta from cities_light.models import City, Country from meetup.models import (Meetup, MeetupLocation, Rsvp, SupportRequest, RequestMeetupLocation, @@ -40,8 +41,10 @@ class MeetupTestCase(MeetupBaseTestCase, TestCase): def setUp(self): super(MeetupTestCase, self).setUp() self.meetup = Meetup.objects.create(title="Test Meetup", slug="baz", - date=timezone.now().date(), time=timezone.now().time(), - venue="FooBar colony", + date=timezone.now().date(), start_time=timezone.now(). + time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), venue="FooBar colony", description="This is a testing meetup.", meetup_location=self.meetup_location, created_by=self.systers_user) @@ -56,8 +59,10 @@ def setUp(self): super(RequestMeetupTestCase, self).setUp() self.meetup_request = \ RequestMeetup.objects.create(title="Test Meetup Request", slug="baz", - date=timezone.now().date(), time=timezone.now().time(), - venue="FooBar colony", + date=timezone.now().date(), start_time=timezone.now(). + time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), venue="FooBar colony", description="This is a testing meetup request.", meetup_location=self.meetup_location, created_by=self.systers_user) @@ -68,7 +73,7 @@ def test_str(self): def test_get_verbose_fields(self): fields = self.meetup_request.get_verbose_fields() - self.assertEqual(len(fields), 12) + self.assertEqual(len(fields), 13) self.assertTrue(fields[1], ('Title', 'Test Meetup Request')) @@ -76,8 +81,10 @@ class RsvpTestCase(MeetupBaseTestCase, TestCase): def setUp(self): super(RsvpTestCase, self).setUp() self.meetup = Meetup.objects.create(title="Test Meetup", slug="baz", - date=timezone.now().date(), time=timezone.now().time(), - venue="FooBar colony", + date=timezone.now().date(), start_time=timezone.now(). + time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), venue="FooBar colony", description="This is a testing meetup.", meetup_location=self.meetup_location, created_by=self.systers_user) @@ -91,8 +98,10 @@ class SupportRequestTestCase(MeetupBaseTestCase, TestCase): def setUp(self): super(SupportRequestTestCase, self).setUp() self.meetup = Meetup.objects.create(title="Test Meetup", slug="baz", - date=timezone.now().date(), time=timezone.now().time(), - venue="FooBar colony", + date=timezone.now().date(), start_time=timezone.now(). + time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), venue="FooBar colony", description="This is a testing meetup.", meetup_location=self.meetup_location, created_by=self.systers_user) diff --git a/systers_portal/meetup/tests/test_views.py b/systers_portal/meetup/tests/test_views.py index 54527d45..730b19f8 100644 --- a/systers_portal/meetup/tests/test_views.py +++ b/systers_portal/meetup/tests/test_views.py @@ -2,6 +2,7 @@ from django.core.urlresolvers import reverse from django.test import TestCase, Client from django.utils import timezone +from django.utils.timezone import timedelta from cities_light.models import City, Country from django.contrib.contenttypes.models import ContentType from django.core import mail @@ -28,7 +29,9 @@ def setUp(self): self.meetup_location.moderators.add(self.systers_user) self.meetup = Meetup.objects.create(title='Foo Bar Baz', slug='foo-bar-baz', date=timezone.now().date(), - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is test Meetup', meetup_location=self.meetup_location, created_by=self.systers_user, @@ -66,7 +69,9 @@ def test_view_all_upcoming_meetups_list_view(self): description="It's a test meetup location", leader=self.systers_user) self.meetup2 = Meetup.objects.create(title='Bar Baz', slug='bazbar', date=(timezone.now() + timezone.timedelta(2)).date(), - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is new test Meetup', meetup_location=self.meetup_location2, created_by=self.systers_user, @@ -102,7 +107,9 @@ def test_view_meetup_location_list_view(self): description="It's a test meetup location", leader=self.systers_user) self.meetup2 = Meetup.objects.create(title='Bar Baz', slug='bazbar', date=(timezone.now() + timezone.timedelta(2)).date(), - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is new test Meetup', meetup_location=self.meetup_location2, created_by=self.systers_user, @@ -188,8 +195,10 @@ def test_post_add_meetup_view(self): self.client.login(username='foo', password='foobar') date = (timezone.now() + timezone.timedelta(2)).date() - time = timezone.now().time() - data = {'title': 'BarTest', 'slug': 'bartest', 'date': date, 'time': time, + start_time = timezone.now().time() + end_time = (timezone.now() + timedelta(minutes=30)).time(), + data = {'title': 'BarTest', 'slug': 'bartest', 'date': date, + 'start_time': start_time, 'end_time': end_time, 'description': "It's a test meetup."} response = self.client.post(url, data=data) self.assertEqual(response.status_code, 302) @@ -218,9 +227,10 @@ def test_post_request_meetup_view(self): self.client.login(username='foo', password='foobar') date = (timezone.now() + timezone.timedelta(2)).date() - time = timezone.now().time() - data = {'title': 'BarTest', 'slug': 'bartest', 'date': date, 'time': time, - 'description': "It's a test meetup."} + start_time = timezone.now().time() + end_time = (timezone.now() + timedelta(minutes=30)).time() + data = {'title': 'BarTest', 'slug': 'bartest', 'date': date, 'start_time': start_time, + 'end_time': end_time, 'description': "It's a test meetup."} response = self.client.post(url, data=data, created_by=self.systers_user, meetup_location=self.meetup_location) self.assertEqual(response.status_code, 302) @@ -234,13 +244,16 @@ class NewMeetupRequestsListViewTestCase(MeetupLocationViewBaseTestCase, TestCase def setUp(self): super(NewMeetupRequestsListViewTestCase, self).setUp() self.meetup_request1 = RequestMeetup.objects.create( - title="Bar Talk", slug="bar", date=timezone.now().date(), time=timezone.now().time(), - description="This is a test meetup location request1", created_by=self.systers_user, - meetup_location=self.meetup_location) + title="Bar Talk", slug="bar", date=timezone.now().date(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)).time(), + description="This is a test meetup location request1", + created_by=self.systers_user, meetup_location=self.meetup_location) self.meetup_request2 = RequestMeetup.objects.create( - title="Foo Talk", slug="foo", date=timezone.now().date(), time=timezone.now().time(), - description="This is a test meetup location request2", created_by=self.systers_user, - meetup_location=self.meetup_location) + title="Foo Talk", slug="foo", date=timezone.now().date(), + start_time=timezone.now().time(), end_time=(timezone.now() + timedelta(minutes=30)). + time(), description="This is a test meetup location request2", + created_by=self.systers_user, meetup_location=self.meetup_location) self.password = 'foobar' self.user2 = User.objects.create(username='foobar', password=self.password, email='foo@test.com') @@ -272,9 +285,11 @@ class ViewMeetupRequestViewTestCase(MeetupLocationViewBaseTestCase, TestCase): def setUp(self): super(ViewMeetupRequestViewTestCase, self).setUp() self.meetup_request = RequestMeetup.objects.create( - title="Foo Talk", slug="bar", date=timezone.now().date(), time=timezone.now().time(), - description="This is a test meetup location request", created_by=self.systers_user, - meetup_location=self.meetup_location) + title="Foo Talk", slug="bar", date=timezone.now().date(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)).time(), + description="This is a test meetup location request", + created_by=self.systers_user, meetup_location=self.meetup_location) self.password = 'foobar' self.user2 = User.objects.create(username='foobar', password=self.password, email='foo@test.com') @@ -304,9 +319,11 @@ class ApproveRequestMeetupViewTestCase(MeetupLocationViewBaseTestCase, TestCase) def setUp(self): super(ApproveRequestMeetupViewTestCase, self).setUp() self.meetup_request = RequestMeetup.objects.create( - title="Foo Talk", slug="bar", date=timezone.now().date(), time=timezone.now().time(), - description="This is a test meetup location request", created_by=self.systers_user, - meetup_location=self.meetup_location) + title="Foo Talk", slug="bar", date=timezone.now().date(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)).time(), + description="This is a test meetup location request", + created_by=self.systers_user, meetup_location=self.meetup_location) self.password = 'foobar' self.user2 = User.objects.create(username='foobar', password=self.password, email='foo@test.com') @@ -339,7 +356,9 @@ def test_approve_request_meetup_view_slug(self): kwargs={'meetup_slug': 'bar', 'slug': 'foo'}) Meetup.objects.create(title='Foo Bar Baz', slug='bar', date=timezone.now().date(), - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is test Meetup', meetup_location=self.meetup_location, created_by=self.systers_user, @@ -354,7 +373,9 @@ class RejectMeetupRequestViewTestCase(MeetupLocationViewBaseTestCase, TestCase): def setUp(self): super(RejectMeetupRequestViewTestCase, self).setUp() self.meetup_request = RequestMeetup.objects.create( - title="Foo Talk", slug="bar", date=timezone.now().date(), time=timezone.now().time(), + title="Foo Talk", slug="bar", date=timezone.now().date(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)).time(), description="This is a test meetup request", created_by=self.systers_user, meetup_location=self.meetup_location) self.password = 'foobar' @@ -409,7 +430,9 @@ def setUp(self): super(DeleteMeetupViewTestCase, self).setUp() self.meetup2 = Meetup.objects.create(title='Fooba', slug='fooba', date=timezone.now().date(), - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is test Meetup', meetup_location=self.meetup_location, created_by=self.systers_user, @@ -480,8 +503,10 @@ def test_post_edit_meetup_view(self): self.assertEqual(response.status_code, 403) date = (timezone.now() + timezone.timedelta(2)).date() - time = timezone.now().time() - data = {'title': 'BarTes', 'slug': 'bartes', 'date': date, 'time': time, + start_time = timezone.now().time() + end_time = (timezone.now() + timedelta(minutes=30)).time() + data = {'title': 'BarTes', 'slug': 'bartes', 'date': date, + 'start_time': start_time, 'end_time': end_time, 'description': "It's a edit test meetup."} self.client.login(username='foo', password='foobar') response = self.client.post(url, data=data) @@ -494,7 +519,9 @@ def setUp(self): super(UpcomingMeetupsViewTestCase, self).setUp() self.meetup2 = Meetup.objects.create(title='Bar Baz', slug='bazbar', date=(timezone.now() + timezone.timedelta(2)).date(), - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is new test Meetup', meetup_location=self.meetup_location, created_by=self.systers_user, @@ -518,7 +545,9 @@ def setUp(self): # a future meetup. This should not show up under 'past meetups'. self.meetup2 = Meetup.objects.create(title='Bar Baz', slug='bazbar', date=(timezone.now() + timezone.timedelta(2)).date(), - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is new test Meetup', meetup_location=self.meetup_location, created_by=self.systers_user, @@ -526,7 +555,9 @@ def setUp(self): # a past meetup. This should show up under 'past meetups'. self.meetup3 = Meetup.objects.create(title='Foo Baz', slug='foobar', date=(timezone.now() - timezone.timedelta(2)).date(), - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is new test Meetup', meetup_location=self.meetup_location, created_by=self.systers_user, @@ -1898,7 +1929,9 @@ def setUp(self): # a meetup after the posted date self.meetup = Meetup.objects.create(title='Foo Bar Baz', slug='foo-bar-baz', date='2018-06-16', - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is test Meetup', venue='Foo Systers', meetup_location=self.meetup_location, @@ -1908,7 +1941,9 @@ def setUp(self): # a meetup before the posted date self.meetup2 = Meetup.objects.create(title='Foo Baz', slug='foobar', date='2018-06-12', - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is new test Meetup', venue='Foo Systers', meetup_location=self.meetup_location, @@ -1970,7 +2005,9 @@ def setUp(self): description="It's a meetup location", sponsors="BarBaz", leader=self.systers_user) self.meetup = Meetup.objects.create(title='Foo Bar Baz', slug='foo-bar-baz', date='2018-09-16', - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is test Meetup', venue='Foo Systers', meetup_location=self.meetup_location, @@ -1978,7 +2015,9 @@ def setUp(self): last_updated=timezone.now()) self.meetup2 = Meetup.objects.create(title='Foo Baz', slug='foobar', date='2018-06-12', - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is new test Meetup', venue='Foo Systers', meetup_location=self.meetup_location, @@ -1986,7 +2025,9 @@ def setUp(self): last_updated=timezone.now()) self.meetup3 = Meetup.objects.create(title='Foob Baz', slug='foobarbaz', date='2018-06-13', - time=timezone.now().time(), + start_time=timezone.now().time(), + end_time=(timezone.now() + timedelta(minutes=30)). + time(), description='This is test Meetup', venue='Foo Systers', meetup_location=self.meetup_location1, diff --git a/systers_portal/meetup/views.py b/systers_portal/meetup/views.py index 72bb4f0d..0208455c 100644 --- a/systers_portal/meetup/views.py +++ b/systers_portal/meetup/views.py @@ -78,7 +78,7 @@ class NewMeetupRequestsListView(LoginRequiredMixin, PermissionRequiredMixin, Mee def get_queryset(self, **kwargs): """Set ListView queryset to all the unapproved meetup requests""" request_meetups_list = RequestMeetup.objects.filter( - meetup_location=self.meetup_location, is_approved=False).order_by('date', 'time') + meetup_location=self.meetup_location, is_approved=False).order_by('date', 'start_time') return request_meetups_list def get_meetup_location(self): @@ -148,7 +148,8 @@ def get_redirect_url(self, *args, **kwargs): new_meetup.title = meetup_request.title new_meetup.slug = meetup_request.slug new_meetup.date = meetup_request.date - new_meetup.time = meetup_request.time + new_meetup.start_time = meetup_request.start_time + new_meetup.end_time = meetup_request.end_time new_meetup.venue = meetup_request.venue new_meetup.description = meetup_request.description new_meetup.meetup_location = meetup_request.meetup_location @@ -385,7 +386,7 @@ class AllUpcomingMeetupsView(ListView): def get_context_data(self, **kwargs): meetup_list = Meetup.objects.filter( - date__gte=datetime.date.today()).order_by('date', 'time') + date__gte=datetime.date.today()).order_by('date', 'start_time') context = super(AllUpcomingMeetupsView, self).get_context_data(**kwargs) context['cities_list'] = City.objects.all() context['meetup_locations'] = MeetupLocation.objects.all() @@ -402,7 +403,7 @@ class MeetupLocationList(ListView): def get_context_data(self, **kwargs): context = super(MeetupLocationList, self).get_context_data(**kwargs) context['meetup_list'] = Meetup.objects.filter( - date__gte=datetime.date.today()).order_by('date', 'time') + date__gte=datetime.date.today()).order_by('date', 'start_time') return context @@ -558,7 +559,7 @@ def get_queryset(self, **kwargs): self.meetup_location = get_object_or_404(MeetupLocation, slug=self.kwargs['slug']) meetup_list = Meetup.objects.filter( meetup_location=self.meetup_location, - date__gte=datetime.date.today()).order_by('date', 'time') + date__gte=datetime.date.today()).order_by('date', 'start_time') return meetup_list def get_meetup_location(self): @@ -577,7 +578,7 @@ def get_queryset(self, **kwargs): self.meetup_location = get_object_or_404(MeetupLocation, slug=self.kwargs['slug']) meetup_list = Meetup.objects.filter( meetup_location=self.meetup_location, - date__lt=datetime.date.today()).order_by('date', 'time') + date__lt=datetime.date.today()).order_by('date', 'start_time') return meetup_list def get_meetup_location(self): diff --git a/systers_portal/templates/base.html b/systers_portal/templates/base.html index 69ea2af5..8b40e5f7 100644 --- a/systers_portal/templates/base.html +++ b/systers_portal/templates/base.html @@ -121,7 +121,7 @@
  • Change password
  • - {% url 'logout' as url %} + {% url 'account_logout' as url %}
  • Logout
  • @@ -154,7 +154,7 @@
  • Change password
  • - {% url 'logout' as url %} + {% url 'account_logout' as url %}
  • Logout
  • diff --git a/systers_portal/templates/meetup/meetup.html b/systers_portal/templates/meetup/meetup.html index a6b66df7..cde5669d 100644 --- a/systers_portal/templates/meetup/meetup.html +++ b/systers_portal/templates/meetup/meetup.html @@ -5,12 +5,16 @@

    {{ meetup.title }}

    Date: {{ meetup.date }} -     - Time: {{ meetup.time|time:"H:i" }} +  

    Venue: {{ meetup.venue }}

    +

    + Start Time: {{ meetup.start_time }} +   + End Time: {{ meetup.end_time }} +


    {{ meetup.description|safe }}

    diff --git a/systers_portal/templates/meetup/upcoming_meetups.html b/systers_portal/templates/meetup/upcoming_meetups.html index 7e69a397..f5fb6579 100644 --- a/systers_portal/templates/meetup/upcoming_meetups.html +++ b/systers_portal/templates/meetup/upcoming_meetups.html @@ -15,8 +15,9 @@

    Date: {{ meetup.date }} - Time: {{ meetup.time|time:"H:i"|default:"TBA" }} Venue: {{ meetup.venue|default:"TBA" }} + Start Time: {{ meetup.start_time|default:"TBA" }} + End Time: {{ meetup.end_time|default:"TBA" }}

    {{ meetup.description|safe|truncatewords:30 }}