mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
Added unit tests
This commit is contained in:
@@ -156,7 +156,6 @@ class ActionArgumentSerializer(serializers.Serializer):
|
||||
choices = serializers.SerializerMethodField(required=False)
|
||||
|
||||
def get_choices(self, obj):
|
||||
print(obj)
|
||||
if "vloader" not in obj:
|
||||
return None
|
||||
loader = getattr(vloaders, obj["vloader"])
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
"""API v2 tests."""
|
||||
|
||||
from unittest import mock
|
||||
|
||||
from django.urls import reverse
|
||||
|
||||
from rest_framework.authtoken.models import Token
|
||||
|
||||
from modoboa.admin import factories as admin_factories
|
||||
from modoboa.core import models as core_models
|
||||
from modoboa.lib.tests import ModoAPITestCase
|
||||
from modoboa.sievefilters import mocks
|
||||
|
||||
|
||||
class FilterSetViewSetTestCase(ModoAPITestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(cls):
|
||||
"""Create some users."""
|
||||
super().setUpTestData()
|
||||
admin_factories.populate_database()
|
||||
cls.user = core_models.User.objects.get(username="user@test.com")
|
||||
|
||||
def setUp(self):
|
||||
"""Connect with a simpler user."""
|
||||
super().setUp()
|
||||
patcher = mock.patch("sievelib.managesieve.Client")
|
||||
self.mock_client = patcher.start()
|
||||
self.mock_client.return_value = mocks.ManagesieveClientMock()
|
||||
self.addCleanup(patcher.stop)
|
||||
|
||||
patcher = mock.patch("imaplib.IMAP4")
|
||||
self.mock_imap4 = patcher.start()
|
||||
self.mock_imap4.return_value = mocks.IMAP4Mock()
|
||||
self.addCleanup(patcher.stop)
|
||||
|
||||
def authenticate(self, username: str = "user@test.com"):
|
||||
# FIXME: replace ASAP with an oauth2 token
|
||||
token = Token.objects.create(
|
||||
user=core_models.User.objects.get(username=username)
|
||||
)
|
||||
self.client.credentials(HTTP_AUTHORIZATION="Token " + token.key)
|
||||
|
||||
def test_list(self):
|
||||
self.authenticate()
|
||||
url = reverse("v2:filterset-list")
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(len(resp.json()), 2)
|
||||
|
||||
def test_create(self):
|
||||
self.authenticate()
|
||||
url = reverse("v2:filterset-list")
|
||||
data = {"name": "Test script", "active": True}
|
||||
resp = self.client.post(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 201)
|
||||
|
||||
def test_update(self):
|
||||
self.authenticate()
|
||||
url = reverse("v2:filterset-detail", args=["unknown"])
|
||||
data = {"content": "# Empty script"}
|
||||
resp = self.client.put(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 404)
|
||||
|
||||
url = reverse("v2:filterset-detail", args=["main_script"])
|
||||
resp = self.client.put(url, data, format="json")
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
def test_activate(self):
|
||||
self.authenticate()
|
||||
url = reverse("v2:filterset-activate", args=["unknown"])
|
||||
resp = self.client.post(url)
|
||||
self.assertEqual(resp.status_code, 404)
|
||||
|
||||
url = reverse("v2:filterset-activate", args=["main_script"])
|
||||
resp = self.client.post(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
def test_download(self):
|
||||
self.authenticate()
|
||||
url = reverse("v2:filterset-download", args=["unknown"])
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 404)
|
||||
|
||||
url = reverse("v2:filterset-download", args=["main_script"])
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
|
||||
def test_delete(self):
|
||||
self.authenticate()
|
||||
url = reverse("v2:filterset-detail", args=["unknown"])
|
||||
resp = self.client.delete(url)
|
||||
self.assertEqual(resp.status_code, 404)
|
||||
|
||||
url = reverse("v2:filterset-detail", args=["main_script"])
|
||||
resp = self.client.delete(url)
|
||||
self.assertEqual(resp.status_code, 204)
|
||||
|
||||
def test_retrieve_condition_templates(self):
|
||||
self.authenticate()
|
||||
url = reverse("v2:filterset-condition-templates")
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
self.assertEqual(len(resp.json()), 5)
|
||||
|
||||
def test_retrieve_action_templates(self):
|
||||
self.authenticate()
|
||||
url = reverse("v2:filterset-action-templates")
|
||||
resp = self.client.get(url)
|
||||
self.assertEqual(resp.status_code, 200)
|
||||
actions = resp.json()
|
||||
self.assertEqual(len(actions), 4)
|
||||
self.assertIn("choices", actions[0]["args"][0])
|
||||
@@ -1,7 +1,6 @@
|
||||
"""Sievefilters viewsets."""
|
||||
|
||||
import copy
|
||||
from typing import Optional
|
||||
|
||||
from sievelib.commands import BadArgument, BadValue
|
||||
from sievelib.factory import FilterAlreadyExists
|
||||
@@ -70,7 +69,7 @@ class FilterSetViewSet(viewsets.ViewSet):
|
||||
"""Update filter set content."""
|
||||
sclient = self.get_sieve_client(request)
|
||||
try:
|
||||
fset = sclient.getscript(pk)
|
||||
sclient.getscript(pk)
|
||||
except SieveClientError:
|
||||
return response.Response(status=404)
|
||||
serializer = serializers.FilterSetContentSerializer(
|
||||
@@ -89,7 +88,7 @@ class FilterSetViewSet(viewsets.ViewSet):
|
||||
"""Activate an existing filter set."""
|
||||
sclient = self.get_sieve_client(request)
|
||||
try:
|
||||
fset = sclient.getscript(pk, format="fset")
|
||||
sclient.getscript(pk, format="fset")
|
||||
except SieveClientError:
|
||||
return response.Response(status=404)
|
||||
try:
|
||||
@@ -116,7 +115,7 @@ class FilterSetViewSet(viewsets.ViewSet):
|
||||
"""Delete an existing filter set."""
|
||||
sclient = self.get_sieve_client(request)
|
||||
try:
|
||||
fset = sclient.getscript(pk, format="fset")
|
||||
sclient.getscript(pk, format="fset")
|
||||
except SieveClientError:
|
||||
return response.Response(status=404)
|
||||
sclient.deletescript(pk)
|
||||
|
||||
@@ -63,7 +63,7 @@ class SieveClient:
|
||||
if self.msc is not None:
|
||||
try:
|
||||
self.msc.capability()
|
||||
except managesieve.Error as e:
|
||||
except managesieve.Error:
|
||||
pass
|
||||
else:
|
||||
return
|
||||
|
||||
@@ -26,9 +26,11 @@ if anyof (header :contains "Subject" "toto", not header :contains "To" "peé") {
|
||||
"""
|
||||
|
||||
|
||||
class ManagesieveClientMock(object):
|
||||
class ManagesieveClientMock:
|
||||
"""Fake managesieve client."""
|
||||
|
||||
errmsg: bytes = b""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.scripts = {
|
||||
"main_script": SAMPLE_SIEVE_SCRIPT,
|
||||
@@ -37,7 +39,7 @@ class ManagesieveClientMock(object):
|
||||
}
|
||||
|
||||
def connect(self, username, password, **kwargs):
|
||||
return username == "user@test.com" and password == "toto"
|
||||
return username == "user@test.com"
|
||||
|
||||
def logout(self):
|
||||
return True
|
||||
@@ -70,8 +72,11 @@ class ManagesieveClientMock(object):
|
||||
def deletescript(self, name):
|
||||
return True
|
||||
|
||||
def checkscript(self, content):
|
||||
return True
|
||||
|
||||
class IMAP4Mock(object):
|
||||
|
||||
class IMAP4Mock:
|
||||
"""Fake IMAP4 client."""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
# coding: utf-8
|
||||
|
||||
"""Sievefilters tests."""
|
||||
|
||||
from unittest import mock
|
||||
|
||||
Reference in New Issue
Block a user