From ee3f4f937c99ef3db92afc2fcba746003ec694f0 Mon Sep 17 00:00:00 2001 From: Akarys42 Date: Mon, 28 Oct 2019 18:20:07 +0100 Subject: Add a attachments field to the message model --- pydis_site/apps/api/models/bot/message.py | 6 ++++++ pydis_site/apps/api/serializers.py | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/models/bot/message.py b/pydis_site/apps/api/models/bot/message.py index 31316a01..72b0b61a 100644 --- a/pydis_site/apps/api/models/bot/message.py +++ b/pydis_site/apps/api/models/bot/message.py @@ -51,6 +51,12 @@ class Message(ModelReprMixin, models.Model): ), help_text="Embeds attached to this message." ) + attachments = pgfields.ArrayField( + models.URLField( + max_length=512 + ), + help_text="Attachments attached to this message." + ) @property def timestamp(self) -> datetime: diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py index 8a605612..e091ff4f 100644 --- a/pydis_site/apps/api/serializers.py +++ b/pydis_site/apps/api/serializers.py @@ -49,7 +49,8 @@ class DeletedMessageSerializer(ModelSerializer): fields = ( 'id', 'author', 'channel_id', 'content', - 'embeds', 'deletion_context' + 'embeds', 'deletion_context', + 'attachments' ) -- cgit v1.2.3 From 541850858cb1fe7da61fa94ed4f8d3e0f787e3a7 Mon Sep 17 00:00:00 2001 From: Akarys42 Date: Mon, 28 Oct 2019 18:22:00 +0100 Subject: Add migration for message.attachments --- .../migrations/0047_deletedmessage_attachments.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py (limited to 'pydis_site') diff --git a/pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py b/pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py new file mode 100644 index 00000000..a738faff --- /dev/null +++ b/pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.6 on 2019-10-28 17:12 + +import django.contrib.postgres.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0046_reminder_jump_url'), + ] + + operations = [ + migrations.AddField( + model_name='deletedmessage', + name='attachments', + field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(max_length=512), default=[], help_text='Attachments attached to this message.', size=None), + preserve_default=False, + ), + ] -- cgit v1.2.3 From 803331562bcc8bf5b09b2a7e9fcfbe00e8796ea9 Mon Sep 17 00:00:00 2001 From: Akarys42 Date: Mon, 28 Oct 2019 18:23:47 +0100 Subject: Show attachments in staff logs --- pydis_site/templates/staff/logs.html | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/templates/staff/logs.html b/pydis_site/templates/staff/logs.html index 9c8ed7d3..a0bfa2a7 100644 --- a/pydis_site/templates/staff/logs.html +++ b/pydis_site/templates/staff/logs.html @@ -24,6 +24,11 @@
{{ message.content|linebreaks }}
+
+ {% for attachment in message.attachments %} + Attachment + {% endfor %} +
{% for embed in message.embeds %}
-- cgit v1.2.3 From 14cde62b4d8358032f1b1f706250efaaf9c646ea Mon Sep 17 00:00:00 2001 From: Akarys42 Date: Mon, 28 Oct 2019 18:50:23 +0100 Subject: Write tests for message.attachments --- pydis_site/apps/api/tests/test_deleted_messages.py | 9 ++++++--- pydis_site/apps/staff/tests/test_logs_view.py | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_deleted_messages.py b/pydis_site/apps/api/tests/test_deleted_messages.py index d1e9f2f5..b3a8197b 100644 --- a/pydis_site/apps/api/tests/test_deleted_messages.py +++ b/pydis_site/apps/api/tests/test_deleted_messages.py @@ -25,14 +25,16 @@ class DeletedMessagesWithoutActorTests(APISubdomainTestCase): 'id': 55, 'channel_id': 5555, 'content': "Terror Billy is a meanie", - 'embeds': [] + 'embeds': [], + 'attachments': [] }, { 'author': cls.author.id, 'id': 56, 'channel_id': 5555, 'content': "If you purge this, you're evil", - 'embeds': [] + 'embeds': [], + 'attachments': [] } ] } @@ -64,7 +66,8 @@ class DeletedMessagesWithActorTests(APISubdomainTestCase): 'id': 12903, 'channel_id': 1824, 'content': "I hate trailing commas", - 'embeds': [] + 'embeds': [], + 'attachments': [] }, ] } diff --git a/pydis_site/apps/staff/tests/test_logs_view.py b/pydis_site/apps/staff/tests/test_logs_view.py index 32cb6bbf..b01e3f3e 100644 --- a/pydis_site/apps/staff/tests/test_logs_view.py +++ b/pydis_site/apps/staff/tests/test_logs_view.py @@ -37,6 +37,7 @@ class TestLogsView(TestCase): channel_id=1984, content='I think my tape has run out...', embeds=[], + attachments=[], deletion_context=cls.deletion_context, ) @@ -101,6 +102,7 @@ class TestLogsView(TestCase): channel_id=1984, content='Does that mean this thing will halt?', embeds=[cls.embed_one, cls.embed_two], + attachments=['https://http.cat/100', 'https://http.cat/402'], deletion_context=cls.deletion_context, ) -- cgit v1.2.3 From 904edb20f694c40435ba27f5a96f759dbf87f3e3 Mon Sep 17 00:00:00 2001 From: Matteo Bertucci Date: Thu, 31 Oct 2019 13:16:15 +0100 Subject: Allow empty attachment field --- .../api/migrations/0048_alter_deletedmessage_api.py | 19 +++++++++++++++++++ pydis_site/apps/api/models/bot/message.py | 1 + 2 files changed, 20 insertions(+) create mode 100644 pydis_site/apps/api/migrations/0048_alter_deletedmessage_api.py (limited to 'pydis_site') diff --git a/pydis_site/apps/api/migrations/0048_alter_deletedmessage_api.py b/pydis_site/apps/api/migrations/0048_alter_deletedmessage_api.py new file mode 100644 index 00000000..364f57b1 --- /dev/null +++ b/pydis_site/apps/api/migrations/0048_alter_deletedmessage_api.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.6 on 2019-10-31 12:14 + +import django.contrib.postgres.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0047_deletedmessage_attachments'), + ] + + operations = [ + migrations.AlterField( + model_name='deletedmessage', + name='attachments', + field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(max_length=512), blank=True, help_text='Attachments attached to this message.', size=None), + ), + ] diff --git a/pydis_site/apps/api/models/bot/message.py b/pydis_site/apps/api/models/bot/message.py index 72b0b61a..8b18fc9f 100644 --- a/pydis_site/apps/api/models/bot/message.py +++ b/pydis_site/apps/api/models/bot/message.py @@ -55,6 +55,7 @@ class Message(ModelReprMixin, models.Model): models.URLField( max_length=512 ), + blank=True, help_text="Attachments attached to this message." ) -- cgit v1.2.3 From 80c5799cb3538dcfff48b2f9f017097abb65ab72 Mon Sep 17 00:00:00 2001 From: Matteo Bertucci Date: Fri, 15 Nov 2019 10:04:29 +0100 Subject: Allow blank attachment field --- pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py b/pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py index a738faff..f335e003 100644 --- a/pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py +++ b/pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py @@ -14,7 +14,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='deletedmessage', name='attachments', - field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(max_length=512), default=[], help_text='Attachments attached to this message.', size=None), + field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(max_length=512), default=[], blank=True, help_text='Attachments attached to this message.', size=None), preserve_default=False, ), ] -- cgit v1.2.3 From 912ecffab9797fa86ed90590438de3bd1211f2c8 Mon Sep 17 00:00:00 2001 From: Matteo Bertucci Date: Fri, 15 Nov 2019 10:05:02 +0100 Subject: Delete useless migration file --- .../api/migrations/0048_alter_deletedmessage_api.py | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 pydis_site/apps/api/migrations/0048_alter_deletedmessage_api.py (limited to 'pydis_site') diff --git a/pydis_site/apps/api/migrations/0048_alter_deletedmessage_api.py b/pydis_site/apps/api/migrations/0048_alter_deletedmessage_api.py deleted file mode 100644 index 364f57b1..00000000 --- a/pydis_site/apps/api/migrations/0048_alter_deletedmessage_api.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 2.2.6 on 2019-10-31 12:14 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0047_deletedmessage_attachments'), - ] - - operations = [ - migrations.AlterField( - model_name='deletedmessage', - name='attachments', - field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(max_length=512), blank=True, help_text='Attachments attached to this message.', size=None), - ), - ] -- cgit v1.2.3 From 4b58cf53a7931ab0b3091266afa6e15dd0b985a0 Mon Sep 17 00:00:00 2001 From: Matteo Bertucci Date: Fri, 15 Nov 2019 10:16:49 +0100 Subject: Update migration history --- .../migrations/0047_deletedmessage_attachments.py | 20 -------------------- .../migrations/0049_deletedmessage_attachments.py | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 20 deletions(-) delete mode 100644 pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py create mode 100644 pydis_site/apps/api/migrations/0049_deletedmessage_attachments.py (limited to 'pydis_site') diff --git a/pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py b/pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py deleted file mode 100644 index f335e003..00000000 --- a/pydis_site/apps/api/migrations/0047_deletedmessage_attachments.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 2.2.6 on 2019-10-28 17:12 - -import django.contrib.postgres.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0046_reminder_jump_url'), - ] - - operations = [ - migrations.AddField( - model_name='deletedmessage', - name='attachments', - field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(max_length=512), default=[], blank=True, help_text='Attachments attached to this message.', size=None), - preserve_default=False, - ), - ] diff --git a/pydis_site/apps/api/migrations/0049_deletedmessage_attachments.py b/pydis_site/apps/api/migrations/0049_deletedmessage_attachments.py new file mode 100644 index 00000000..9cbde96d --- /dev/null +++ b/pydis_site/apps/api/migrations/0049_deletedmessage_attachments.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.6 on 2019-10-28 17:12 + +import django.contrib.postgres.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0048_add_infractions_unique_constraints_active'), + ] + + operations = [ + migrations.AddField( + model_name='deletedmessage', + name='attachments', + field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(max_length=512), default=[], blank=True, help_text='Attachments attached to this message.', size=None), + preserve_default=False, + ), + ] -- cgit v1.2.3 From 8e4ed686ebe06e8e15604d204969042efb434b30 Mon Sep 17 00:00:00 2001 From: Akarys42 Date: Wed, 20 Nov 2019 18:21:16 +0100 Subject: Test for the attachment image to be in the staff log --- pydis_site/apps/staff/tests/test_logs_view.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/staff/tests/test_logs_view.py b/pydis_site/apps/staff/tests/test_logs_view.py index b01e3f3e..1415c558 100644 --- a/pydis_site/apps/staff/tests/test_logs_view.py +++ b/pydis_site/apps/staff/tests/test_logs_view.py @@ -151,6 +151,21 @@ class TestLogsView(TestCase): self.assertInHTML(embed_colour_needle.format(colour=embed_one_colour), html_response) self.assertInHTML(embed_colour_needle.format(colour=embed_two_colour), html_response) + def test_if_both_attachments_are_included_html_response(self): + url = reverse('logs', host="staff", args=(self.deletion_context.id,)) + response = self.client.get(url) + + html_response = response.content.decode() + attachment_needle = 'Attachment' + self.assertInHTML( + attachment_needle.format(url=self.deleted_message_two.attachments[0]), + html_response + ) + self.assertInHTML( + attachment_needle.format(url=self.deleted_message_two.attachments[1]), + html_response + ) + def test_if_html_in_content_is_properly_escaped(self): url = reverse('logs', host="staff", args=(self.deletion_context.id,)) response = self.client.get(url) -- cgit v1.2.3 From c8207ab9af12e9b068ca3362788c0c164c48e64a Mon Sep 17 00:00:00 2001 From: Leon Sandøy Date: Tue, 17 Dec 2019 00:05:59 +0100 Subject: Pad the discriminator with zeroes in profile. previously, lemon#0001 would display as just lemon#1. This commit fixes this. All credit goes to @gdude2002 --- pydis_site/utils/account.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/utils/account.py b/pydis_site/utils/account.py index e64919de..2d699c88 100644 --- a/pydis_site/utils/account.py +++ b/pydis_site/utils/account.py @@ -73,7 +73,7 @@ class SocialAccountAdapter(DefaultSocialAccountAdapter): """ if social_login.account.provider == "discord": discriminator = social_login.account.extra_data["discriminator"] - data["username"] = f"{data['username']}#{discriminator}" + data["username"] = f"{data['username']}#{discriminator:0>4}" data["name"] = data["username"] return super().populate_user(request, social_login, data) -- cgit v1.2.3 From 3f2adb8ab93bb520d6fb7fb6980585c2fcb41cff Mon Sep 17 00:00:00 2001 From: Jeremiah Boby Date: Mon, 23 Dec 2019 00:39:20 +0000 Subject: Add Code Jam 6 banner to the homepage --- pydis_site/templates/home/index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/templates/home/index.html b/pydis_site/templates/home/index.html index dfcc6715..3b150767 100644 --- a/pydis_site/templates/home/index.html +++ b/pydis_site/templates/home/index.html @@ -37,11 +37,11 @@

- {# Intro video #} + {# Code Jam banner #}
- + + +
-- cgit v1.2.3 From aeece0158dce335ca795c115f9975a5a7ff2163e Mon Sep 17 00:00:00 2001 From: Leon Sandøy Date: Mon, 6 Jan 2020 13:43:06 +0100 Subject: Adding iframes to HTML whitelist This will allow us to put stuff like YouTube embeds in wiki articles... hopefully. I didn't test it. --- pydis_site/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/settings.py b/pydis_site/settings.py index 66376c4e..e8b71e76 100644 --- a/pydis_site/settings.py +++ b/pydis_site/settings.py @@ -376,7 +376,7 @@ WIKI_MARKDOWN_HTML_ATTRIBUTES = { } WIKI_MARKDOWN_HTML_WHITELIST = [ - 'article', 'section', 'button' + 'article', 'section', 'button', 'iframe' ] -- cgit v1.2.3 From 86acb429bafc703684aa0bd47b6495c2044d89dd Mon Sep 17 00:00:00 2001 From: Sebastiaan Zeeff <33516116+SebastiaanZ@users.noreply.github.com> Date: Mon, 6 Jan 2020 14:04:41 +0100 Subject: Adding iframe attributes to attribute whitelist To properly show YouTube-embeds, we need to allow some attributes on `iframe` tags. I've added all attributes that are normal for such an embed, including `width` and `height` (which we may not need if we want to make the frame resize to its parent). --- pydis_site/settings.py | 1 + 1 file changed, 1 insertion(+) (limited to 'pydis_site') diff --git a/pydis_site/settings.py b/pydis_site/settings.py index e8b71e76..72cc0ab9 100644 --- a/pydis_site/settings.py +++ b/pydis_site/settings.py @@ -373,6 +373,7 @@ WIKI_MARKDOWN_HTML_ATTRIBUTES = { 'img': ['class', 'id', 'src', 'alt', 'width', 'height'], 'section': ['class', 'id'], 'article': ['class', 'id'], + 'iframe': ['width', 'height', 'src', 'frameborder', 'allow', 'allowfullscreen'], } WIKI_MARKDOWN_HTML_WHITELIST = [ -- cgit v1.2.3 From 2552f22a25913adbbc024dfe6b8948b5e7acd18f Mon Sep 17 00:00:00 2001 From: bendiller Date: Tue, 7 Jan 2020 03:14:22 -0700 Subject: Instantiate test_reminders module; implement UnauthedReminderAPITests --- pydis_site/apps/api/tests/test_reminders.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 pydis_site/apps/api/tests/test_reminders.py (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py new file mode 100644 index 00000000..55fb8000 --- /dev/null +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -0,0 +1,27 @@ +from django_hosts.resolvers import reverse + +from .base import APISubdomainTestCase + + +class UnauthedReminderAPITests(APISubdomainTestCase): + def setUp(self): + super().setUp() + self.client.force_authenticate(user=None) + + def test_list_returns_401(self): + url = reverse('bot:reminder-list', host='api') + response = self.client.get(url) + + self.assertEqual(response.status_code, 401) + + def test_create_returns_401(self): + url = reverse('bot:reminder-list', host='api') + response = self.client.post(url, data={'not': 'important'}) + + self.assertEqual(response.status_code, 401) + + def test_delete_returns_401(self): + url = reverse('bot:reminder-detail', args=('1234',), host='api') + response = self.client.delete(url) + + self.assertEqual(response.status_code, 401) -- cgit v1.2.3 From 647a3576402cbcb83f2998e0277c2d4774d55ee8 Mon Sep 17 00:00:00 2001 From: bendiller Date: Tue, 7 Jan 2020 03:14:56 -0700 Subject: Implement EmptyDatabaseReminderAPITests --- pydis_site/apps/api/tests/test_reminders.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index 55fb8000..01f6d8e4 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -25,3 +25,18 @@ class UnauthedReminderAPITests(APISubdomainTestCase): response = self.client.delete(url) self.assertEqual(response.status_code, 401) + + +class EmptyDatabaseReminderAPITests(APISubdomainTestCase): + def test_list_all_returns_empty_list(self): + url = reverse('bot:reminder-list', host='api') + response = self.client.get(url) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), []) + + def test_delete_returns_404(self): + url = reverse('bot:reminder-detail', args=('1234',), host='api') + response = self.client.delete(url) + + self.assertEqual(response.status_code, 404) -- cgit v1.2.3 From 8c23efacc061bd0018075aed689d0123fc8d8d84 Mon Sep 17 00:00:00 2001 From: Matteo Bertucci Date: Mon, 13 Jan 2020 13:08:29 +0100 Subject: Update migration dependency to the latest merged --- pydis_site/apps/api/migrations/0049_deletedmessage_attachments.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/migrations/0049_deletedmessage_attachments.py b/pydis_site/apps/api/migrations/0049_deletedmessage_attachments.py index 9cbde96d..31ac239a 100644 --- a/pydis_site/apps/api/migrations/0049_deletedmessage_attachments.py +++ b/pydis_site/apps/api/migrations/0049_deletedmessage_attachments.py @@ -7,7 +7,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('api', '0048_add_infractions_unique_constraints_active'), + ('api', '0049_offensivemessage'), ] operations = [ -- cgit v1.2.3 From 74c03c067ec17324bee83a633ff8b4dca0c3a8aa Mon Sep 17 00:00:00 2001 From: bendiller Date: Mon, 13 Jan 2020 06:59:44 -0700 Subject: Implement ReminderCreationTests --- pydis_site/apps/api/tests/test_reminders.py | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index 01f6d8e4..cb5e5867 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -1,6 +1,9 @@ +from datetime import datetime + from django_hosts.resolvers import reverse from .base import APISubdomainTestCase +from ..models import User class UnauthedReminderAPITests(APISubdomainTestCase): @@ -40,3 +43,35 @@ class EmptyDatabaseReminderAPITests(APISubdomainTestCase): response = self.client.delete(url) self.assertEqual(response.status_code, 404) + + +class ReminderCreationTests(APISubdomainTestCase): + def setUp(self): + super().setUp() + self.author = User.objects.create( + id=1234, + name='Mermaid Man', + discriminator=1234, + avatar_hash=None, + ) + self.data = { + 'author': self.author.id, + 'content': 'Remember to...wait what was it again?', + 'expiration': datetime.utcnow().isoformat(), + 'jump_url': "https://www.google.com", + 'channel_id': 123, + } + url = reverse('bot:reminder-list', host='api') + response = self.client.post(url, data=self.data) + self.assertEqual(response.status_code, 201) + + def test_reminder_in_full_list(self): + url = reverse('bot:reminder-list', host='api') + response = self.client.get(url) + + self.assertEqual(response.status_code, 200) + + self.data['expiration'] += 'Z' # Massaging a quirk of the response time format + self.data['active'] = True + self.data['id'] = 1 + self.assertEqual(response.json(), [self.data]) -- cgit v1.2.3 From 1301b2274f9f9d0fcaa2e6632d47737a92a1e741 Mon Sep 17 00:00:00 2001 From: bendiller Date: Mon, 13 Jan 2020 10:17:54 -0700 Subject: Implement ReminderDeletionTests --- pydis_site/apps/api/tests/test_reminders.py | 33 ++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index cb5e5867..e1bd95de 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -3,7 +3,7 @@ from datetime import datetime from django_hosts.resolvers import reverse from .base import APISubdomainTestCase -from ..models import User +from ..models import Reminder, User class UnauthedReminderAPITests(APISubdomainTestCase): @@ -75,3 +75,34 @@ class ReminderCreationTests(APISubdomainTestCase): self.data['active'] = True self.data['id'] = 1 self.assertEqual(response.json(), [self.data]) + + +class ReminderDeletionTests(APISubdomainTestCase): + @classmethod + def setUpTestData(cls): + cls.author = User.objects.create( + id=6789, + name='Barnacle Boy', + discriminator=6789, + avatar_hash=None, + ) + + cls.reminder = Reminder.objects.create( + author=cls.author, + content="Don't forget to set yourself a reminder", + expiration= datetime.utcnow().isoformat(), + jump_url="https://www.decliningmentalfaculties.com", + channel_id=123 + ) + + def test_delete_unknown_reminder_returns_404(self): + url = reverse('bot:reminder-detail', args=('something',), host='api') + response = self.client.delete(url) + + self.assertEqual(response.status_code, 404) + + def test_delete_known_reminder_returns_204(self): + url = reverse('bot:reminder-detail', args=(self.reminder.id,), host='api') + response = self.client.delete(url) + + self.assertEqual(response.status_code, 204) -- cgit v1.2.3 From 3ae762e826d3ff09cc0c795a709f2fa1e8f29a6a Mon Sep 17 00:00:00 2001 From: bendiller Date: Mon, 13 Jan 2020 11:58:05 -0700 Subject: Implement ReminderUpdateTests --- pydis_site/apps/api/tests/test_reminders.py | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index e1bd95de..d79dbffc 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -106,3 +106,34 @@ class ReminderDeletionTests(APISubdomainTestCase): response = self.client.delete(url) self.assertEqual(response.status_code, 204) + + +class ReminderUpdateTests(APISubdomainTestCase): + @classmethod + def setUpTestData(cls): + cls.author = User.objects.create( + id=666, + name='Man Ray', + discriminator=666, + avatar_hash=None, + ) + + cls.reminder = Reminder.objects.create( + author=cls.author, + content="Squash those do-gooders", + expiration=datetime.utcnow().isoformat(), + jump_url="https://www.decliningmentalfaculties.com", + channel_id=123 + ) + + cls.data = {'content': 'Oops I forgot'} + + def test_patch_updates_record(self): + url = reverse('bot:reminder-detail', args=(self.reminder.id,), host='api') + response = self.client.patch(url, data=self.data) + self.assertEqual(response.status_code, 200) + + url = reverse('bot:reminder-list', host='api') + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json()[0]['content'], self.data['content']) -- cgit v1.2.3 From 02d2ce00b05facec9f6d34d5c854cd7f72e94b58 Mon Sep 17 00:00:00 2001 From: bendiller Date: Mon, 13 Jan 2020 11:58:40 -0700 Subject: Tiny linting edit --- pydis_site/apps/api/tests/test_reminders.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index d79dbffc..97742544 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -90,7 +90,7 @@ class ReminderDeletionTests(APISubdomainTestCase): cls.reminder = Reminder.objects.create( author=cls.author, content="Don't forget to set yourself a reminder", - expiration= datetime.utcnow().isoformat(), + expiration=datetime.utcnow().isoformat(), jump_url="https://www.decliningmentalfaculties.com", channel_id=123 ) -- cgit v1.2.3 From b1801cfabb7a7ade3f67b86a14a64bc48cb59bf7 Mon Sep 17 00:00:00 2001 From: bendiller Date: Sun, 2 Feb 2020 12:00:59 -0700 Subject: Rework ReminderCreationTests --- pydis_site/apps/api/tests/test_reminders.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index 97742544..29430f40 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -46,15 +46,17 @@ class EmptyDatabaseReminderAPITests(APISubdomainTestCase): class ReminderCreationTests(APISubdomainTestCase): - def setUp(self): - super().setUp() - self.author = User.objects.create( + @classmethod + def setUpTestData(cls): + cls.author = User.objects.create( id=1234, name='Mermaid Man', discriminator=1234, avatar_hash=None, ) - self.data = { + + def test_accepts_valid_data(self): + data = { 'author': self.author.id, 'content': 'Remember to...wait what was it again?', 'expiration': datetime.utcnow().isoformat(), @@ -62,19 +64,18 @@ class ReminderCreationTests(APISubdomainTestCase): 'channel_id': 123, } url = reverse('bot:reminder-list', host='api') - response = self.client.post(url, data=self.data) + response = self.client.post(url, data=data) self.assertEqual(response.status_code, 201) + self.assertIsNotNone(Reminder.objects.get(id=1)) - def test_reminder_in_full_list(self): + def test_rejects_invalid_data(self): + data = { + 'author': self.author.id, # Missing multiple required fields + } url = reverse('bot:reminder-list', host='api') - response = self.client.get(url) - - self.assertEqual(response.status_code, 200) - - self.data['expiration'] += 'Z' # Massaging a quirk of the response time format - self.data['active'] = True - self.data['id'] = 1 - self.assertEqual(response.json(), [self.data]) + response = self.client.post(url, data=data) + self.assertEqual(response.status_code, 400) + self.assertRaises(Reminder.DoesNotExist, Reminder.objects.get, **{'id': 1}) class ReminderDeletionTests(APISubdomainTestCase): -- cgit v1.2.3 From 9663690bc34ef363e62fa2b63012f1bd8f9a8a47 Mon Sep 17 00:00:00 2001 From: bendiller Date: Sun, 2 Feb 2020 12:48:06 -0700 Subject: Rework test_patch_updates_record to avoid list API endpoint --- pydis_site/apps/api/tests/test_reminders.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index 29430f40..06a194c1 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -132,9 +132,6 @@ class ReminderUpdateTests(APISubdomainTestCase): def test_patch_updates_record(self): url = reverse('bot:reminder-detail', args=(self.reminder.id,), host='api') response = self.client.patch(url, data=self.data) - self.assertEqual(response.status_code, 200) - url = reverse('bot:reminder-list', host='api') - response = self.client.get(url) self.assertEqual(response.status_code, 200) - self.assertEqual(response.json()[0]['content'], self.data['content']) + self.assertEqual(Reminder.objects.get(id=self.reminder.id).content, self.data['content']) -- cgit v1.2.3 From ba5532eaf2eb2ceef938d19e5c78af5129dc66e2 Mon Sep 17 00:00:00 2001 From: bendiller Date: Sun, 2 Feb 2020 12:51:42 -0700 Subject: Improve deletion test (asserting that deleted record no longer exists) --- pydis_site/apps/api/tests/test_reminders.py | 1 + 1 file changed, 1 insertion(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index 06a194c1..a06a5974 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -107,6 +107,7 @@ class ReminderDeletionTests(APISubdomainTestCase): response = self.client.delete(url) self.assertEqual(response.status_code, 204) + self.assertRaises(Reminder.DoesNotExist, Reminder.objects.get, **{'id': self.reminder.id}) class ReminderUpdateTests(APISubdomainTestCase): -- cgit v1.2.3 From dd7297c33850b6ac5d966b66a91aaca6b3448a2b Mon Sep 17 00:00:00 2001 From: bendiller Date: Sun, 2 Feb 2020 13:55:08 -0700 Subject: Add ReminderListTests --- pydis_site/apps/api/tests/test_reminders.py | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index a06a5974..fdbc829e 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -1,5 +1,6 @@ from datetime import datetime +from django.forms.models import model_to_dict from django_hosts.resolvers import reverse from .base import APISubdomainTestCase @@ -110,6 +111,42 @@ class ReminderDeletionTests(APISubdomainTestCase): self.assertRaises(Reminder.DoesNotExist, Reminder.objects.get, **{'id': self.reminder.id}) +class ReminderListTests(APISubdomainTestCase): + @classmethod + def setUpTestData(cls): + cls.author = User.objects.create( + id=6789, + name='Patrick Star', + discriminator=6789, + avatar_hash=None, + ) + + cls.reminder = Reminder.objects.create( + author=cls.author, + content="We should take Bikini Bottom, and push it somewhere else!", + expiration=datetime.utcnow().isoformat(), + jump_url="https://www.icantseemyforehead.com", + channel_id=123 + ) + + cls.rem_dict = model_to_dict(cls.reminder) + cls.rem_dict['expiration'] += 'Z' # Massaging a quirk of the response time format + + def test_reminder_in_full_list(self): + url = reverse('bot:reminder-list', host='api') + response = self.client.get(url) + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), [self.rem_dict]) + + def test_filter_search(self): + url = reverse('bot:reminder-list', host='api') + response = self.client.get(f'{url}?search={self.author.name}') + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), [self.rem_dict]) + + class ReminderUpdateTests(APISubdomainTestCase): @classmethod def setUpTestData(cls): -- cgit v1.2.3 From d966231b917357f4e0db901958b30cdd7ef6f4c3 Mon Sep 17 00:00:00 2001 From: scragly <29337040+scragly@users.noreply.github.com> Date: Mon, 3 Feb 2020 23:44:45 +1000 Subject: Unbleach Wiki Disables the sanitisation of HTML in wiki articles. --- pydis_site/settings.py | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/settings.py b/pydis_site/settings.py index 72cc0ab9..65ef2463 100644 --- a/pydis_site/settings.py +++ b/pydis_site/settings.py @@ -360,25 +360,7 @@ WIKI_MESSAGE_TAG_CSS_CLASS = { messages.WARNING: "is-warning", } -WIKI_MARKDOWN_HTML_STYLES = [ - 'max-width', - 'min-width', - 'margin', - 'padding', - 'width', - 'height', -] - -WIKI_MARKDOWN_HTML_ATTRIBUTES = { - 'img': ['class', 'id', 'src', 'alt', 'width', 'height'], - 'section': ['class', 'id'], - 'article': ['class', 'id'], - 'iframe': ['width', 'height', 'src', 'frameborder', 'allow', 'allowfullscreen'], -} - -WIKI_MARKDOWN_HTML_WHITELIST = [ - 'article', 'section', 'button', 'iframe' -] +WIKI_MARKDOWN_SANITIZE_HTML = False # Wiki permissions -- cgit v1.2.3 From 1c5a1b9ba6850272cd1a521f75d455ce60f86c51 Mon Sep 17 00:00:00 2001 From: bendiller Date: Mon, 3 Feb 2020 08:38:08 -0700 Subject: Fix unnecessary kwarg syntax --- pydis_site/apps/api/tests/test_reminders.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index fdbc829e..33b705b0 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -76,7 +76,7 @@ class ReminderCreationTests(APISubdomainTestCase): url = reverse('bot:reminder-list', host='api') response = self.client.post(url, data=data) self.assertEqual(response.status_code, 400) - self.assertRaises(Reminder.DoesNotExist, Reminder.objects.get, **{'id': 1}) + self.assertRaises(Reminder.DoesNotExist, Reminder.objects.get, id=1) class ReminderDeletionTests(APISubdomainTestCase): @@ -108,7 +108,7 @@ class ReminderDeletionTests(APISubdomainTestCase): response = self.client.delete(url) self.assertEqual(response.status_code, 204) - self.assertRaises(Reminder.DoesNotExist, Reminder.objects.get, **{'id': self.reminder.id}) + self.assertRaises(Reminder.DoesNotExist, Reminder.objects.get, id=self.reminder.id) class ReminderListTests(APISubdomainTestCase): -- cgit v1.2.3 From b0068347e3aefe49ab68c4af653df9d14564df5b Mon Sep 17 00:00:00 2001 From: bendiller Date: Mon, 3 Feb 2020 08:48:23 -0700 Subject: Improve test failure clarity (reduce unhandled exceptions in assertions) --- pydis_site/apps/api/tests/test_reminders.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index 33b705b0..618e4e54 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -67,7 +67,7 @@ class ReminderCreationTests(APISubdomainTestCase): url = reverse('bot:reminder-list', host='api') response = self.client.post(url, data=data) self.assertEqual(response.status_code, 201) - self.assertIsNotNone(Reminder.objects.get(id=1)) + self.assertIsNotNone(Reminder.objects.filter(id=1).first()) def test_rejects_invalid_data(self): data = { @@ -172,4 +172,4 @@ class ReminderUpdateTests(APISubdomainTestCase): response = self.client.patch(url, data=self.data) self.assertEqual(response.status_code, 200) - self.assertEqual(Reminder.objects.get(id=self.reminder.id).content, self.data['content']) + self.assertEqual(Reminder.objects.filter(id=self.reminder.id).first().content, self.data['content']) -- cgit v1.2.3 From 254d7ac7354f5bb1f7e23efb6faa04a221b3d907 Mon Sep 17 00:00:00 2001 From: bendiller Date: Mon, 3 Feb 2020 08:50:38 -0700 Subject: Improve test failure clarity (reduce unhandled exceptions in assertions) --- pydis_site/apps/api/tests/test_reminders.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index 618e4e54..f3dd5eec 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -172,4 +172,7 @@ class ReminderUpdateTests(APISubdomainTestCase): response = self.client.patch(url, data=self.data) self.assertEqual(response.status_code, 200) - self.assertEqual(Reminder.objects.filter(id=self.reminder.id).first().content, self.data['content']) + self.assertEqual( + Reminder.objects.filter(id=self.reminder.id).first().content, + self.data['content'] + ) -- cgit v1.2.3 From 410460f92a49f05f7ec667a83651ff175e1a07f7 Mon Sep 17 00:00:00 2001 From: bendiller Date: Mon, 3 Feb 2020 10:07:43 -0700 Subject: Add second reminder to list tests, implement `test_filter_field` test --- pydis_site/apps/api/tests/test_reminders.py | 30 +++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index f3dd5eec..83b992f7 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -121,7 +121,7 @@ class ReminderListTests(APISubdomainTestCase): avatar_hash=None, ) - cls.reminder = Reminder.objects.create( + cls.reminder_one = Reminder.objects.create( author=cls.author, content="We should take Bikini Bottom, and push it somewhere else!", expiration=datetime.utcnow().isoformat(), @@ -129,22 +129,40 @@ class ReminderListTests(APISubdomainTestCase): channel_id=123 ) - cls.rem_dict = model_to_dict(cls.reminder) - cls.rem_dict['expiration'] += 'Z' # Massaging a quirk of the response time format + cls.reminder_two = Reminder.objects.create( + author=cls.author, + content="Gahhh-I love being purple!", + expiration=datetime.utcnow().isoformat(), + jump_url="https://www.goofygoobersicecreampartyboat.com", + channel_id=123, + active=False + ) + + cls.rem_dict_one = model_to_dict(cls.reminder_one) + cls.rem_dict_one['expiration'] += 'Z' # Massaging a quirk of the response time format + cls.rem_dict_two = model_to_dict(cls.reminder_two) + cls.rem_dict_two['expiration'] += 'Z' # Massaging a quirk of the response time format - def test_reminder_in_full_list(self): + def test_reminders_in_full_list(self): url = reverse('bot:reminder-list', host='api') response = self.client.get(url) self.assertEqual(response.status_code, 200) - self.assertEqual(response.json(), [self.rem_dict]) + self.assertEqual(response.json(), [self.rem_dict_one, self.rem_dict_two]) def test_filter_search(self): url = reverse('bot:reminder-list', host='api') response = self.client.get(f'{url}?search={self.author.name}') self.assertEqual(response.status_code, 200) - self.assertEqual(response.json(), [self.rem_dict]) + self.assertEqual(response.json(), [self.rem_dict_one, self.rem_dict_two]) + + def test_filter_field(self): + url = reverse('bot:reminder-list', host='api') + response = self.client.get(f'{url}?active=true') + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), [self.rem_dict_one]) class ReminderUpdateTests(APISubdomainTestCase): -- cgit v1.2.3 From 1b0f366827567d755fd4b6944090c83cad3269cb Mon Sep 17 00:00:00 2001 From: bendiller Date: Mon, 3 Feb 2020 14:23:35 -0700 Subject: Improve robustness with regard to ordering --- pydis_site/apps/api/tests/test_reminders.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_reminders.py b/pydis_site/apps/api/tests/test_reminders.py index 83b992f7..3441e0cc 100644 --- a/pydis_site/apps/api/tests/test_reminders.py +++ b/pydis_site/apps/api/tests/test_reminders.py @@ -148,14 +148,14 @@ class ReminderListTests(APISubdomainTestCase): response = self.client.get(url) self.assertEqual(response.status_code, 200) - self.assertEqual(response.json(), [self.rem_dict_one, self.rem_dict_two]) + self.assertCountEqual(response.json(), [self.rem_dict_one, self.rem_dict_two]) def test_filter_search(self): url = reverse('bot:reminder-list', host='api') response = self.client.get(f'{url}?search={self.author.name}') self.assertEqual(response.status_code, 200) - self.assertEqual(response.json(), [self.rem_dict_one, self.rem_dict_two]) + self.assertCountEqual(response.json(), [self.rem_dict_one, self.rem_dict_two]) def test_filter_field(self): url = reverse('bot:reminder-list', host='api') -- cgit v1.2.3 From fcea687aa193cb24657efa1fbf9bd1a87d55c335 Mon Sep 17 00:00:00 2001 From: scragly <29337040+scragly@users.noreply.github.com> Date: Thu, 6 Feb 2020 00:42:08 +1000 Subject: Update resources reference in head navbar. Due to the tweak in the wiki page structure, the Tools page is now under resources, and Learning Resources is now just Resources. --- pydis_site/templates/base/navbar.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/templates/base/navbar.html b/pydis_site/templates/base/navbar.html index 2ba5bdd4..376dab5a 100644 --- a/pydis_site/templates/base/navbar.html +++ b/pydis_site/templates/base/navbar.html @@ -63,9 +63,9 @@