diff --git a/pdfding/admin/service.py b/pdfding/admin/service.py
deleted file mode 100644
index 8ba73ddf..00000000
--- a/pdfding/admin/service.py
+++ /dev/null
@@ -1,15 +0,0 @@
-import requests
-
-
-def get_latest_version() -> str: # pragma: no cover
- """
- Gets the tag of the latest release of pdfding via the github rest api.
- """
-
- try:
- latest_release = requests.get('https://api.github.com/repos/mrmn2/PdfDing/releases/latest', timeout=1)
- latest_release_json = latest_release.json()
-
- return latest_release_json['tag_name']
- except Exception: # pragma: no cover
- return ''
diff --git a/pdfding/admin/templates/information.html b/pdfding/admin/templates/information.html
index e8d5107c..f2a054b7 100644
--- a/pdfding/admin/templates/information.html
+++ b/pdfding/admin/templates/information.html
@@ -26,18 +26,6 @@
{{ current_version }}
- {% if latest_version and current_version != 'UNKNOWN' and current_version != latest_version %}
-
-
- {% endif %}
diff --git a/pdfding/admin/tests/test_service.py b/pdfding/admin/tests/test_service.py
deleted file mode 100644
index 29912db1..00000000
--- a/pdfding/admin/tests/test_service.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from unittest.mock import Mock, patch
-
-from admin.service import get_latest_version
-from django.test import TestCase
-
-
-class TestService(TestCase):
- mock_response = Mock()
- mock_response.json = lambda: {'tag_name': '0.0.0'}
-
- @patch('admin.service.requests.get', return_value=mock_response)
- def test_get_latest_version(self, mock_get):
- generated_tag = get_latest_version()
-
- self.assertEqual(generated_tag, '0.0.0')
diff --git a/pdfding/admin/tests/test_views.py b/pdfding/admin/tests/test_views.py
index 98ff1ccf..61a269f2 100644
--- a/pdfding/admin/tests/test_views.py
+++ b/pdfding/admin/tests/test_views.py
@@ -1,5 +1,3 @@
-from unittest.mock import patch
-
from admin.views import AdminMixin, OverviewMixin
from django.contrib.auth.models import User
from django.test import Client, TestCase
@@ -41,8 +39,7 @@ def test_filter_objects(self):
self.assertEqual(user_emails, expected_result)
- @patch('admin.views.get_latest_version', return_value='0.0.0')
- def test_get_extra_context(self, mock_get_latest_version):
+ def test_get_extra_context(self):
response = self.client.get(f'{reverse('user_overview')}?search=@a&tags=admin')
generated_extra_context = OverviewMixin.get_extra_context(response.wsgi_request)
@@ -50,8 +47,7 @@ def test_get_extra_context(self, mock_get_latest_version):
self.assertEqual(generated_extra_context, expected_extra_context)
- @patch('admin.views.get_latest_version', return_value='0.0.0')
- def test_get_extra_context_empty_queries(self, mock_get_latest_version):
+ def test_get_extra_context_empty_queries(self):
response = self.client.get(reverse('user_overview'))
generated_extra_context = OverviewMixin.get_extra_context(response.wsgi_request)
@@ -99,8 +95,7 @@ def test_adjust_admin_rights_no_htmx(self):
response = self.client.post(reverse('admin_adjust_rights', kwargs={'identifier': self.user.id}))
self.assertRedirects(response, reverse('user_overview'), status_code=302)
- @patch('admin.views.get_latest_version', return_value='0.0.0')
- def test_get_information(self, mock_get_latest_version):
+ def test_get_information(self):
for i in range(1, 4):
User.objects.create_user(username=f'user_{i}', password='12345', email=f'{i}_b@a.com')
@@ -109,4 +104,3 @@ def test_get_information(self, mock_get_latest_version):
self.assertEqual(response.context['number_of_users'], 4)
self.assertEqual(response.context['number_of_pdfs'], 0)
self.assertEqual(response.context['current_version'], 'DEV')
- self.assertEqual(response.context['latest_version'], '0.0.0')
diff --git a/pdfding/admin/views.py b/pdfding/admin/views.py
index efeff937..ee894d8c 100644
--- a/pdfding/admin/views.py
+++ b/pdfding/admin/views.py
@@ -1,4 +1,3 @@
-from admin.service import get_latest_version
from base import base_views
from django.conf import settings
from django.contrib.auth.mixins import UserPassesTestMixin
@@ -136,13 +135,11 @@ def get(self, request: HttpRequest):
number_of_users = User.objects.all().count()
number_of_pdfs = Pdf.objects.all().count()
- latest_version = get_latest_version()
context = {
'number_of_users': number_of_users,
'number_of_pdfs': number_of_pdfs,
'current_version': settings.VERSION,
- 'latest_version': latest_version,
}
return render(request, 'information.html', context=context)
diff --git a/pdfding/core/context_processors.py b/pdfding/core/context_processors.py
index d59f6b8e..7e405138 100644
--- a/pdfding/core/context_processors.py
+++ b/pdfding/core/context_processors.py
@@ -10,5 +10,4 @@ def pdfding_context(request: HttpRequest): # pragma: no cover
'DEMO_MODE': settings.DEMO_MODE,
'VERSION': settings.VERSION,
'ALLOW_PDF_SUB_DIRECTORIES': settings.ALLOW_PDF_SUB_DIRECTORIES,
- 'SUPPORTER_EDITION': settings.SUPPORTER_EDITION,
}
diff --git a/pdfding/core/settings/dev.py b/pdfding/core/settings/dev.py
index cdc77dfb..c6d78647 100644
--- a/pdfding/core/settings/dev.py
+++ b/pdfding/core/settings/dev.py
@@ -32,8 +32,6 @@
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'some_key' # nosec B105
-SUPPORTER_EDITION = True
-
ACCOUNT_EMAIL_VERIFICATION = 'optional'
DEFAULT_FROM_EMAIL = 'info@localhost'
diff --git a/pdfding/core/settings/prod.py b/pdfding/core/settings/prod.py
index 08ae9671..5af6499c 100644
--- a/pdfding/core/settings/prod.py
+++ b/pdfding/core/settings/prod.py
@@ -1,7 +1,5 @@
from os import environ
-from django.contrib.auth.hashers import check_password
-
from .base import * # noqa: F401 F403
try:
@@ -195,15 +193,6 @@
else:
ALLOW_PDF_SUB_DIRECTORIES = False
-# supporter edition settings
-SUPPORTER_KEY_HASH = 'pbkdf2_sha256$1000000$supporter$ZHnPv0AcYm6ZV5Pcyw8ULh3C1Dd5EGD2XG49gWpeTns='
-SUPPORTER_KEY = environ.get('SUPPORTER_KEY', '')
-
-if check_password(SUPPORTER_KEY, SUPPORTER_KEY_HASH):
- SUPPORTER_EDITION = True
-else:
- SUPPORTER_EDITION = False
-
# demo mode
if environ.get('DEMO_MODE', 'FALSE') == 'TRUE':
DEMO_MODE = True
diff --git a/pdfding/e2e/test_admin_e2e.py b/pdfding/e2e/test_admin_e2e.py
index 82df1d27..843582d6 100644
--- a/pdfding/e2e/test_admin_e2e.py
+++ b/pdfding/e2e/test_admin_e2e.py
@@ -1,7 +1,4 @@
-from unittest.mock import patch
-
from django.contrib.auth.models import User
-from django.test import override_settings
from django.urls import reverse
from helpers import PdfDingE2ETestCase
from pdf.models.pdf_models import Pdf
@@ -81,36 +78,6 @@ def test_load_next_page(self):
expect(self.page.locator("#user-13")).to_contain_text('12@a.com')
expect(self.page.locator("#next_page_2_toggle")).not_to_be_visible()
- @patch('admin.views.get_latest_version', return_value='0.0.0')
- def test_new_version_available(self, mock_get_latest_version):
- with sync_playwright() as p:
- self.open(reverse("instance_info"), p)
-
- expect(self.page.locator("body")).to_contain_text("New Version Available!")
- expect(self.page.locator("#new_version")).to_contain_text("0.0.0")
-
- @patch('admin.views.get_latest_version', return_value='DEV')
- def test_new_version_same(self, mock_get_latest_version):
- with sync_playwright() as p:
- self.open(reverse("instance_info"), p)
-
- expect(self.page.locator("body")).not_to_contain_text("New Version Available!")
-
- @patch('admin.views.get_latest_version', return_value='0.0.0')
- @override_settings(VERSION='UNKNOWN')
- def test_new_version_unknown(self, mock_get_latest_version):
- with sync_playwright() as p:
- self.open(reverse("instance_info"), p)
-
- expect(self.page.locator("body")).not_to_contain_text("New Version Available!")
-
- @patch('admin.views.get_latest_version', return_value='')
- def test_new_version_empty(self, mock_get_latest_version):
- with sync_playwright() as p:
- self.open(reverse("instance_info"), p)
-
- expect(self.page.locator("body")).not_to_contain_text("New Version Available!")
-
def test_search_admin(self):
with sync_playwright() as p:
self.open(f"{reverse('user_overview')}?tags=admin", p)
diff --git a/pdfding/e2e/test_pdf_overview_e2e.py b/pdfding/e2e/test_pdf_overview_e2e.py
index 1514775f..360bb92d 100644
--- a/pdfding/e2e/test_pdf_overview_e2e.py
+++ b/pdfding/e2e/test_pdf_overview_e2e.py
@@ -1,4 +1,3 @@
-from datetime import datetime, timedelta, timezone
from pathlib import Path
from unittest.mock import patch
@@ -592,31 +591,3 @@ def test_progress_bar_off_settings(self):
with sync_playwright() as p:
self.open(reverse('pdf_overview'), p)
expect(self.page.locator("#progressbar-1")).not_to_be_visible()
-
- @override_settings(SUPPORTER_EDITION=False)
- def test_nagging_modal_needs_nagging(self):
- self.user.profile.last_time_nagged = datetime.now(tz=timezone.utc) - timedelta(weeks=9)
- self.user.profile.save()
-
- self.assertTrue(self.user.profile.needs_nagging)
-
- with sync_playwright() as p:
- self.open(reverse('pdf_overview'), p)
- expect(self.page.locator("#nagging")).to_be_visible()
-
- self.page.get_by_role("button", name="Leave me alone").click()
- expect(self.page.locator("#nagging")).not_to_be_visible()
-
- changed_user = User.objects.get(id=self.user.id)
- self.assertFalse(changed_user.profile.needs_nagging)
-
- with sync_playwright() as p:
- # test opening again
- self.open(reverse('pdf_overview'), p)
- expect(self.page.locator("#nagging")).not_to_be_visible()
-
- @override_settings(SUPPORTER_EDITION=True)
- def test_nagging_modal_not_needs_nagging(self):
- with sync_playwright() as p:
- self.open(reverse('pdf_overview'), p)
- expect(self.page.locator("#nagging")).not_to_be_visible()
diff --git a/pdfding/e2e/test_users_e2e.py b/pdfding/e2e/test_users_e2e.py
index 0eaa5bd6..6cf71be9 100644
--- a/pdfding/e2e/test_users_e2e.py
+++ b/pdfding/e2e/test_users_e2e.py
@@ -308,26 +308,8 @@ def test_login_demo_mode(self, mock_uuid4, mock_create_demo_user):
class EditionE2ETestCase(PdfDingE2ETestCase):
- @override_settings(SUPPORTER_EDITION=True)
- def test_supporter_edition_sidebar(self):
- with sync_playwright() as p:
- self.open(reverse('home'), p)
- expect(self.page.locator("#sponsor")).not_to_be_visible()
- expect(self.page.locator("#demo_mode")).not_to_be_visible()
- expect(self.page.locator("#supporter")).to_be_visible()
-
- @override_settings(SUPPORTER_EDITION=False, DEMO_MODE=False)
- def test_not_supporter_edition_sidebar(self):
- with sync_playwright() as p:
- self.open(reverse('home'), p)
- expect(self.page.locator("#sponsor")).to_be_visible()
- expect(self.page.locator("#demo_mode")).not_to_be_visible()
- expect(self.page.locator("#supporter")).not_to_be_visible()
-
@override_settings(SUPPORTER_EDITION=False, DEMO_MODE=True)
def test_demo_mode_sidebar(self):
with sync_playwright() as p:
self.open(reverse('home'), p)
- expect(self.page.locator("#sponsor")).not_to_be_visible()
expect(self.page.locator("#demo_mode")).to_be_visible()
- expect(self.page.locator("#supporter")).not_to_be_visible()
diff --git a/pdfding/pdf/templates/includes/pdf_overview/nagging.html b/pdfding/pdf/templates/includes/pdf_overview/nagging.html
deleted file mode 100644
index 89d64ab6..00000000
--- a/pdfding/pdf/templates/includes/pdf_overview/nagging.html
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
Hello there
-
- I am Marcel, the developer of PdfDing. Pardon my nagging but developing software,
- this app is no exception, requires a lot of time. Sponsoring enables me to spend
- more time on making PdfDing even better. And you will probably make my day ...
-
-
-
-
-
Tip: The supporter tiers hide everything Sponsorship related forever.
-
-
- Leave me alone
-
-
-
diff --git a/pdfding/pdf/templates/pdf_overview.html b/pdfding/pdf/templates/pdf_overview.html
index c985bf34..8d9fe4b3 100644
--- a/pdfding/pdf/templates/pdf_overview.html
+++ b/pdfding/pdf/templates/pdf_overview.html
@@ -2,10 +2,10 @@
{% block content %}
+ :class="{ 'opacity-15': show_tag_name_modal || show_preview_modal || show_delete_pdf_modal }">
{% include 'includes/sidebar.html' %}
@@ -57,9 +57,6 @@
class="fixed inset-x-0 top-40 mx-auto my-auto w-80! lg:w-[28rem]! z-20">
- {% if needs_nagging %}
- {% include 'includes/pdf_overview/nagging.html' %}
- {% endif %}
{% endblock %}
diff --git a/pdfding/pdf/tests/test_views/test_pdf_views.py b/pdfding/pdf/tests/test_views/test_pdf_views.py
index ff0aaf35..88306acf 100644
--- a/pdfding/pdf/tests/test_views/test_pdf_views.py
+++ b/pdfding/pdf/tests/test_views/test_pdf_views.py
@@ -1,4 +1,4 @@
-from datetime import datetime, timedelta, timezone
+from datetime import datetime, timezone
from pathlib import Path
from unittest import mock
from unittest.mock import patch
@@ -402,7 +402,6 @@ def test_fuzzy_filter_pdfs(self):
filtered_pdfs = pdf_views.OverviewMixin.fuzzy_filter_pdfs(Pdf.objects.all(), 'self hosted')
self.assertEqual(sorted(list(filtered_pdfs), key=lambda a: a.name), [pdf_self_hosting, pdf_self_hosted])
- @override_settings(SUPPORTER_EDITION=True)
@patch('pdf.services.tag_services.TagServices.get_tag_info_dict', return_value='tag_info_dict')
def test_get_extra_context(self, mock_get_tag_info_dict):
response = self.client.get(f'{reverse('pdf_overview')}?search=searching&tags=tagging')
@@ -415,14 +414,12 @@ def test_get_extra_context(self, mock_get_tag_info_dict):
'special_pdf_selection': '',
'page': 'pdf_overview',
'layout': 'Compact',
- 'needs_nagging': False,
'current_collection_id': str(self.user.id),
'current_collection_name': 'Default',
}
self.assertEqual(generated_extra_context, expected_extra_context)
- @override_settings(SUPPORTER_EDITION=True)
@patch('pdf.services.tag_services.TagServices.get_tag_info_dict', return_value='tag_info_dict')
def test_get_extra_context_selection(self, mock_get_tag_info_dict):
response = self.client.get(f'{reverse('pdf_overview')}?selection=starred')
@@ -435,14 +432,12 @@ def test_get_extra_context_selection(self, mock_get_tag_info_dict):
'special_pdf_selection': 'starred',
'page': 'pdf_overview_starred',
'layout': 'Compact',
- 'needs_nagging': False,
'current_collection_id': str(self.user.id),
'current_collection_name': 'Default',
}
self.assertEqual(generated_extra_context, expected_extra_context)
- @override_settings(SUPPORTER_EDITION=True)
@patch('pdf.services.tag_services.TagServices.get_tag_info_dict', return_value='tag_info_dict')
def test_get_extra_context_selection_invalid(self, mock_get_tag_info_dict):
response = self.client.get(f'{reverse('pdf_overview')}?selection=invalid')
@@ -455,14 +450,12 @@ def test_get_extra_context_selection_invalid(self, mock_get_tag_info_dict):
'special_pdf_selection': '',
'page': 'pdf_overview',
'layout': 'Compact',
- 'needs_nagging': False,
'current_collection_id': str(self.user.id),
'current_collection_name': 'Default',
}
self.assertEqual(generated_extra_context, expected_extra_context)
- @override_settings(SUPPORTER_EDITION=True)
@patch('pdf.services.tag_services.TagServices.get_tag_info_dict', return_value='tag_info_dict')
def test_get_extra_context_empty_queries(self, mock_get_tag_info_dict):
response = self.client.get(reverse('pdf_overview'))
@@ -475,42 +468,12 @@ def test_get_extra_context_empty_queries(self, mock_get_tag_info_dict):
'special_pdf_selection': '',
'page': 'pdf_overview',
'layout': 'Compact',
- 'needs_nagging': False,
'current_collection_id': str(self.user.id),
'current_collection_name': 'Default',
}
self.assertEqual(generated_extra_context, expected_extra_context)
- @override_settings(SUPPORTER_EDITION=False)
- def test_do_extra_action_reset(self):
- self.user.profile.last_time_nagged = datetime.now(tz=timezone.utc) - timedelta(weeks=9)
- self.user.profile.save()
-
- self.assertTrue(self.user.profile.needs_nagging)
-
- self.client.get(reverse('pdf_overview'))
-
- changed_user = User.objects.get(id=self.user.id)
-
- self.assertFalse(changed_user.profile.needs_nagging)
- self.assertTrue((changed_user.profile.last_time_nagged - datetime.now(tz=timezone.utc)) < timedelta(minutes=1))
-
- @override_settings(SUPPORTER_EDITION=False)
- def test_do_extra_action_no_reset(self):
- current_datetime = datetime.now(tz=timezone.utc) - timedelta(weeks=6)
- self.user.profile.last_time_nagged = current_datetime
- self.user.profile.save()
-
- self.assertFalse(self.user.profile.needs_nagging)
-
- self.client.get(reverse('pdf_overview'))
-
- changed_user = User.objects.get(id=self.user.id)
-
- self.assertFalse(changed_user.profile.needs_nagging)
- self.assertEqual(changed_user.profile.last_time_nagged, current_datetime)
-
class TestPdfMixin(TestCase):
username = 'user'
diff --git a/pdfding/pdf/views/pdf_views.py b/pdfding/pdf/views/pdf_views.py
index 5019815f..fedc6ee6 100644
--- a/pdfding/pdf/views/pdf_views.py
+++ b/pdfding/pdf/views/pdf_views.py
@@ -216,7 +216,6 @@ def get_extra_context(request: HttpRequest) -> dict:
extra_context = {
'layout': request.user.profile.layout,
- 'needs_nagging': request.user.profile.needs_nagging,
'page': page,
'search_query': request.GET.get('search', ''),
'special_pdf_selection': special_pdf_selection,
@@ -576,15 +575,6 @@ class Overview(OverviewMixin, base_views.BaseOverview):
paginating the PDFs.
"""
- def do_extra_action(self, request: HttpRequest):
- """When nagging modal is shown, set last time nagged to current datetime"""
-
- profile = request.user.profile
-
- if profile.needs_nagging:
- profile.last_time_nagged = datetime.now(tz=timezone.utc)
- profile.save()
-
class OverviewQuery(BasePdfMixin, base_views.BaseOverviewQuery):
"""View for performing searches and sorting on the PDF overview page."""
diff --git a/pdfding/templates/layouts/base_sidebar.html b/pdfding/templates/layouts/base_sidebar.html
index 2dc25115..242cfbcc 100644
--- a/pdfding/templates/layouts/base_sidebar.html
+++ b/pdfding/templates/layouts/base_sidebar.html
@@ -12,28 +12,10 @@
PdfDing
{{ VERSION }}
- {% if SUPPORTER_EDITION %}
-
- Supporter Edition
-
- {% elif DEMO_MODE %}
+ {% if DEMO_MODE %}
Demo Mode
- {% else %}
-
{% endif %}
diff --git a/pdfding/users/migrations/0021_add_a_little_nagging.py b/pdfding/users/migrations/0021_add_a_little_nagging.py
index 0d4c93f1..bc07730a 100644
--- a/pdfding/users/migrations/0021_add_a_little_nagging.py
+++ b/pdfding/users/migrations/0021_add_a_little_nagging.py
@@ -1,6 +1,5 @@
# Generated by Django 5.2.7 on 2025-11-06 17:50
-import users.models
from django.db import migrations, models
@@ -14,6 +13,6 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='profile',
name='last_time_nagged',
- field=models.DateTimeField(default=users.models.get_last_time_nagged_initial),
+ field=models.DateTimeField(auto_now_add=True),
),
]
diff --git a/pdfding/users/migrations/0026_remove_nagging.py b/pdfding/users/migrations/0026_remove_nagging.py
new file mode 100644
index 00000000..17da8ff2
--- /dev/null
+++ b/pdfding/users/migrations/0026_remove_nagging.py
@@ -0,0 +1,17 @@
+# Generated by Django 5.2.8 on 2026-01-18 16:19
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('users', '0025_remove_unneeded_null_true'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='profile',
+ name='last_time_nagged',
+ ),
+ ]
diff --git a/pdfding/users/models.py b/pdfding/users/models.py
index ae27d7f3..6fd3ac65 100644
--- a/pdfding/users/models.py
+++ b/pdfding/users/models.py
@@ -1,6 +1,3 @@
-from datetime import datetime, timedelta, timezone
-
-from django.conf import settings
from django.contrib.auth.models import User
from django.db import models
from django.db.models import QuerySet
@@ -10,10 +7,6 @@
from pdf.models.workspace_models import Workspace
-def get_last_time_nagged_initial(): # pragma: no cover
- return datetime.now(tz=timezone.utc) - timedelta(weeks=5)
-
-
class Profile(models.Model):
"""The user profile model of PdfDing"""
@@ -84,7 +77,6 @@ class LayoutChoice(models.TextChoices):
custom_theme_color_secondary = models.CharField(max_length=7, default='#cc826a')
dark_mode = models.CharField(choices=DarkMode.choices, max_length=6, default=DarkMode.DARK)
layout = models.CharField(choices=LayoutChoice.choices, max_length=7, default=LayoutChoice.COMPACT)
- last_time_nagged = models.DateTimeField(default=get_last_time_nagged_initial)
number_of_pdfs = models.IntegerField(default=0)
pdf_inverted_mode = models.CharField(choices=EnabledChoice.choices, max_length=8, default=EnabledChoice.DISABLED)
pdf_keep_screen_awake = models.CharField(
@@ -112,18 +104,6 @@ def dark_mode_str(self) -> str: # pragma: no cover
return str.lower(str(self.dark_mode))
- @property
- def needs_nagging(self):
- """
- Check if a user needs to be nagged to sponsor the project. Only nags once every 8 weeks. Users
- of the Supporter Edition will never be nagged.
- """
-
- if not settings.SUPPORTER_EDITION and (datetime.now(tz=timezone.utc) - self.last_time_nagged).days > 7 * 8:
- return True
- else:
- return False
-
@property
def pdfs_total_size_with_unit(self):
"""Return the size of all PDFs with the units KB, MB, GB depending on the size."""
diff --git a/pdfding/users/tests/test_models.py b/pdfding/users/tests/test_models.py
index c3a226d6..c67b173c 100644
--- a/pdfding/users/tests/test_models.py
+++ b/pdfding/users/tests/test_models.py
@@ -1,5 +1,3 @@
-from datetime import datetime, timedelta, timezone
-
from django.contrib.auth.models import User
from django.test import TestCase, override_settings
from pdf.models.collection_models import Collection
@@ -27,27 +25,6 @@ def test_dark_mode_str(self):
self.assertEqual(self.user.profile.dark_mode_str, 'dark')
- @override_settings(SUPPORTER_EDITION=True)
- def test_needs_nagging_supporter_edition(self):
- self.user.profile.last_time_nagged = datetime.now(tz=timezone.utc) - timedelta(weeks=9)
- self.user.profile.save()
-
- self.assertEqual(self.user.profile.needs_nagging, False)
-
- @override_settings(SUPPORTER_EDITION=False)
- def test_needs_nagging_needed_non_supporter(self):
- self.user.profile.last_time_nagged = datetime.now(tz=timezone.utc) - timedelta(weeks=9)
- self.user.profile.save()
-
- self.assertEqual(self.user.profile.needs_nagging, True)
-
- @override_settings(SUPPORTER_EDITION=False)
- def test_needs_nagging_not_needed_non_supporter(self):
- self.user.profile.last_time_nagged = datetime.now(tz=timezone.utc) - timedelta(days=40)
- self.user.profile.save()
-
- self.assertEqual(self.user.profile.needs_nagging, False)
-
def test_pdfs_total_size_with_unit(self):
profile = self.user.profile
profile.pdfs_total_size = 10000