diff --git a/.gitignore b/.gitignore
index 11164f0193906b0be7a568b29a8a04444705ebf7..b3fa1ad84666b0e6ee760ea3b6714aaef35fb864 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,3 +56,6 @@ docs/_build/
 
 # Test
 .tox/
+.coverage
+.mypy_cache/
+htmlcov/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index dcdec3c5956617ba23b75766c5d49aea6e9aed7a..27a9c8b5f89ac3378dd9586118fe073a21deb1d3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,8 +1,8 @@
 include:
     - project: "AlekSIS/official/AlekSIS"
       file: /ci/general.yml
-#    - project: "AlekSIS/official/AlekSIS"
-#      file: /ci/test/test.yml
+    - project: "AlekSIS/official/AlekSIS"
+      file: /ci/test/test.yml
     - project: "AlekSIS/official/AlekSIS"
       file: /ci/test/lint.yml
     - project: "AlekSIS/official/AlekSIS"
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 5d702b571d661808c585d49bd6560d0b2d975e6e..5f4e9ef1335d4f4c08bd56e0a7e7007a183e73f4 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -6,6 +6,14 @@ All notable changes to this project will be documented in this file.
 The format is based on `Keep a Changelog`_,
 and this project adheres to `Semantic Versioning`_.
 
+Unreleased
+----------
+
+Fixed
+~~~~~
+
+* The _Delete personal note_ action didn't work due to wrong usage of ``bulk_update``.
+
 `2.0rc4`_ - 2021-08-01
 ----------------------
 
diff --git a/aleksis/apps/alsijil/actions.py b/aleksis/apps/alsijil/actions.py
index 2d42d6134e8bd7e617f918ce864ad0a479761a3a..9c307017ee629eec9f03cc170ed673af92b306b8 100644
--- a/aleksis/apps/alsijil/actions.py
+++ b/aleksis/apps/alsijil/actions.py
@@ -40,7 +40,9 @@ def delete_personal_note(modeladmin, request, queryset):
     for personal_note in queryset:
         personal_note.reset_values()
         notes.append(personal_note)
-    PersonalNote.objects.bulk_update(notes)
+    PersonalNote.objects.bulk_update(
+        notes, fields=["absent", "excused", "late", "excuse_type", "remarks"]
+    )
 
 
 delete_personal_note.short_description = _("Delete")
diff --git a/aleksis/apps/alsijil/tests/test_actions.py b/aleksis/apps/alsijil/tests/test_actions.py
new file mode 100644
index 0000000000000000000000000000000000000000..6f1bd6ef4ce3900ddc6ea7dac5df6f3a25dd90fc
--- /dev/null
+++ b/aleksis/apps/alsijil/tests/test_actions.py
@@ -0,0 +1,96 @@
+from datetime import date, time
+
+import pytest
+
+from aleksis.apps.alsijil.actions import (
+    delete_personal_note,
+    mark_as_excuse_type_generator,
+    mark_as_excused,
+    mark_as_unexcused,
+)
+from aleksis.apps.alsijil.models import ExcuseType, PersonalNote
+from aleksis.apps.chronos.models import Event, TimePeriod
+from aleksis.core.models import Person
+
+pytestmark = pytest.mark.django_db
+
+
+def _generate_event(day: date):
+    period_from = TimePeriod.objects.create(
+        weekday=0, period=1, time_start=time(10, 00), time_end=time(11, 00)
+    )
+    period_to = TimePeriod.objects.create(
+        weekday=0, period=2, time_start=time(11, 00), time_end=time(12, 00)
+    )
+
+    event = Event.objects.create(
+        date_start=day, date_end=day, period_from=period_from, period_to=period_to
+    )
+    return event
+
+
+def _prepare_notes():
+    """Create some minimal personal notes."""
+    person, __ = Person.objects.get_or_create(first_name="Jane", last_name="Doe")
+
+    excuse_type, __ = ExcuseType.objects.get_or_create(short_name="Foo", name="Fooooooooooooo")
+    notes = [
+        PersonalNote(
+            person=person,
+            event=_generate_event(date(2021, 10, 1)),
+            absent=True,
+            remarks="This is baz.",
+        ),
+        PersonalNote(person=person, event=_generate_event(date(2021, 11, 1)), absent=True),
+        PersonalNote(
+            person=person, event=_generate_event(date(2022, 10, 1)), absent=True, excused=True
+        ),
+        PersonalNote(
+            person=person,
+            event=_generate_event(date(2021, 3, 1)),
+            absent=True,
+            excused=True,
+            excuse_type=excuse_type,
+        ),
+        PersonalNote(person=person, event=_generate_event(date(2021, 10, 4)), late=10),
+        PersonalNote(
+            person=person, event=_generate_event(date(2032, 10, 11)), remarks="Good work!"
+        ),
+        PersonalNote(person=person, event=_generate_event(date(2032, 10, 11))),
+    ]
+    PersonalNote.objects.bulk_create(notes)
+    return notes
+
+
+def test_mark_as_excused_action():
+    notes = _prepare_notes()
+    assert PersonalNote.objects.filter(excused=True).count() == 2
+    mark_as_excused(None, None, PersonalNote.objects.all())
+    assert PersonalNote.objects.filter(excused=True).count() == 4
+    assert PersonalNote.objects.filter(excuse_type=None, excused=True).count() == 4
+
+
+def test_mark_as_unexcused_action():
+    notes = _prepare_notes()
+    assert PersonalNote.objects.filter(excused=True).count() == 2
+    mark_as_unexcused(None, None, PersonalNote.objects.all())
+    assert PersonalNote.objects.filter(excused=True).count() == 0
+    assert PersonalNote.objects.filter(excuse_type=None, excused=True).count() == 0
+
+
+def test_mark_as_excuse_type_generator_action():
+    excuse_type, __ = ExcuseType.objects.get_or_create(short_name="Foo", name="Fooooooooooooo")
+    notes = _prepare_notes()
+    assert PersonalNote.objects.filter(excused=True).count() == 2
+    assert PersonalNote.objects.filter(excused=True, excuse_type=excuse_type).count() == 1
+    mark_as_foo = mark_as_excuse_type_generator(excuse_type=excuse_type)
+    mark_as_foo(None, None, PersonalNote.objects.all())
+    assert PersonalNote.objects.filter(excused=True).count() == 4
+    assert PersonalNote.objects.filter(excuse_type=excuse_type, excused=True).count() == 4
+
+
+def test_delete_personal_note_action():
+    notes = _prepare_notes()
+    assert PersonalNote.objects.not_empty().count() == 6
+    delete_personal_note(None, None, PersonalNote.objects.all())
+    assert PersonalNote.objects.not_empty().count() == 0