Repository: watchdogpolska/feder

Issue:
Tytuły podstron
Wymagają aktualizacji tytuły (```<title>(…)</title>```) większości podstron w serwisie, aby odzwierciedlały podstronę na której użytkownik się znajduje. Coś bliskiego odwróconemu breadcrumbs bez linków może być.  To wymaga więdzy wyłącznie z zakresu HTML-a, a można poobcować z aplikacją. Django-debug-toolbar dokładnie wskazuje, który plik wymaga modyfikacji.
AttributeError: 'Settings' object has no attribute 'EMAIL_NOTIFICATION'
```
AttributeError: 'Settings' object has no attribute 'EMAIL_NOTIFICATION'
  File "django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "django/core/handlers/base.py", line 249, in _legacy_get_response
    response = self._get_response(request)
  File "django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "django/views/generic/base.py", line 88, in dispatch
    return handler(request, *args, **kwargs)
  File "atom/views.py", line 81, in post
    response = super(ActionMessageMixin, self).post(request, *args, **kwargs)
  File "atom/views.py", line 55, in post
    self.action()
  File "feder/letters/views.py", line 234, in action
    link_object=self.object)
  File "django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "django/db/models/query.py", line 394, in create
    obj.save(force_insert=True, using=self.db)
  File "django/db/models/base.py", line 806, in save
    force_update=force_update, update_fields=update_fields)
  File "django/db/models/base.py", line 846, in save_base
    update_fields=update_fields, raw=raw, using=using,
  File "django/dispatch/dispatcher.py", line 193, in send
    for receiver in self._live_receivers(sender)
  File "feder/alerts/models.py", line 74, in notify_users
    from_email=settings.EMAIL_NOTIFICATION,
  File "django/conf/__init__.py", line 57, in __getattr__
    val = getattr(self._wrapped, name)
```


Discussion:
@ad-m Mogę się tym zająć 
1. Zauważyłem, że "główne" podstrony mają title poprawny. Rozumiem, że chodzi o strony np. pojedynczej instytucji, sprawy, monitoringu itp.?
@jacekll , tak, aby było na zakładce było widać czego dotyczy podstrona. 
@ad-m czy wystarczy skonfigurować adres e-mail nadawcy? Jeśli tak, to jaki adres ustawić? w config/settings/common.py?
@jacekll , tak, wystarczy skonfigurować, ja proponuje domyślny ``no-reply@siecobywatelska.pl`` i zrealizować to poprzez [django-environ](https://github.com/joke2k/django-environ), aby można było w razie czego zmienić, albo aby ktoś używający aplikacji mógł to zmienić. 

BTW. Polecam [The Twele-Factor App](https://12factor.net/pl/), jeżeli nie znasz. 

Ten błąd mi wyskoczył w praktyce, a nie został objęty żadnymi testami, więc przy okazji możesz też pierw napisać test, który failuje, a dopiero wtedy naprawić (zabezpieczenie przed regresją tego issues), bo wskazuje to, że mamy jakiś problem z pokryciem ``File "feder/letters/views.py", line 234`` .

Resolving patch:
diff --git a/config/settings/common.py b/config/settings/common.py
--- a/config/settings/common.py
+++ b/config/settings/common.py
@@ -326,6 +326,8 @@
     },
     'gilab': {'SCOPE': ['read_user', 'openid']}
 }
+EMAIL_NOTIFICATION = env('EMAIL_NOTIFICATION', default='no-reply@siecobywatelska.pl')
+
 EMAILLABS_APP_KEY = env('EMAILLABS_APP_KEY', default="Dummy")
 
 EMAILLABS_SECRET_KEY = env('EMAILLABS_SECRET_KEY', default="Dummy")


Test patch:
diff --git a/feder/alerts/tests.py b/feder/alerts/tests.py
--- a/feder/alerts/tests.py
+++ b/feder/alerts/tests.py
@@ -37,6 +37,11 @@ class AlertCreateViewTestCase(ObjectMixin, PermissionStatusMixin, TestCase):
     def get_url(self):
         return reverse('alerts:create', kwargs={"monitoring": self.monitoring.pk})
 
+    def test_create(self):
+        self.grant_permission()
+        self.client.login(username='john', password='pass')
+        self.client.post(self.get_url(), {'reason': 'test'})
+
 
 class AlertUpdateViewTestCase(ObjectMixin, PermissionStatusMixin, TestCase):
     permission = ['monitorings.change_alert', ]
@@ -65,7 +70,7 @@ def test_status_action(self):
         self.alert.refresh_from_db()
         self.assertEqual(self.alert.solver, self.user)
         self.assertEqual(self.alert.status, True)
-
         self.client.post(self.get_url(), {})
         self.alert.refresh_from_db()
         self.assertEqual(self.alert.status, False)
+