1+ from unittest .mock import patch
2+
13from flask import url_for
24
35from app import config
4- from app .models import EmailChange
6+ from app .db import Session
7+ from app .models import EmailChange , BlockedDomain
58from app .utils import canonicalize_email
69from tests .utils import login , random_email , create_new_user
710
@@ -26,3 +29,159 @@ def test_setup_done(flask_client):
2629 assert email_change is not None
2730 assert email_change .new_email == canonicalize_email (noncanonical_email )
2831 config .SKIP_MX_LOOKUP_ON_CHECK = False
32+
33+
34+ def test_add_blocked_domain_none (flask_client ):
35+ user = create_new_user ()
36+ login (flask_client , user )
37+
38+ # Missing domain-name
39+ r = flask_client .post (
40+ url_for ("dashboard.setting" ),
41+ data = {
42+ "form-name" : "blocked-domains-add" ,
43+ },
44+ follow_redirects = True ,
45+ )
46+ assert r .status_code == 200
47+ assert BlockedDomain .filter_by (user_id = user .id ).count () == 0
48+
49+
50+ def test_add_blocked_domain_empty (flask_client ):
51+ user = create_new_user ()
52+ login (flask_client , user )
53+
54+ # Empty domain-name
55+ r = flask_client .post (
56+ url_for ("dashboard.setting" ),
57+ data = {
58+ "form-name" : "blocked-domains-add" ,
59+ "domain-name" : "" ,
60+ },
61+ follow_redirects = True ,
62+ )
63+ assert r .status_code == 200
64+ assert BlockedDomain .filter_by (user_id = user .id ).count () == 0
65+
66+
67+ def test_add_blocked_domain_success (flask_client ):
68+ user = create_new_user ()
69+ login (flask_client , user )
70+
71+ r = flask_client .post (
72+ url_for ("dashboard.setting" ),
73+ data = {
74+ "form-name" : "blocked-domains-add" ,
75+ "domain-name" : " ExAmple.COM " ,
76+ },
77+ follow_redirects = True ,
78+ )
79+ assert r .status_code == 200
80+
81+ blocked_domains = BlockedDomain .filter_by (user_id = user .id ).all ()
82+ assert len (blocked_domains ) == 1
83+ assert blocked_domains [0 ].domain == "example.com"
84+
85+
86+ def test_remove_blocked_domain_no_id (flask_client ):
87+ user = create_new_user ()
88+
89+ login (flask_client , user )
90+
91+ # Missing domain_id
92+ with patch ("app.dashboard.views.setting.BlockedDomain.delete" ) as mock_delete :
93+ r = flask_client .post (
94+ url_for ("dashboard.setting" ),
95+ data = {
96+ "form-name" : "blocked-domains-remove" ,
97+ "domain_name" : "example.com" ,
98+ },
99+ follow_redirects = True ,
100+ )
101+ assert r .status_code == 200
102+ mock_delete .assert_not_called ()
103+
104+
105+ def test_remove_blocked_domain_invalid_id (flask_client ):
106+ user = create_new_user ()
107+ login (flask_client , user )
108+
109+ # Invalid domain_id
110+ with patch ("app.dashboard.views.setting.BlockedDomain.delete" ) as mock_delete :
111+ r = flask_client .post (
112+ url_for ("dashboard.setting" ),
113+ data = {
114+ "form-name" : "blocked-domains-remove" ,
115+ "domain_id" : 9999 ,
116+ "domain_name" : "example.com" ,
117+ },
118+ follow_redirects = True ,
119+ )
120+ assert r .status_code == 200
121+ mock_delete .assert_not_called ()
122+
123+
124+ def test_remove_blocked_domain_success (flask_client ):
125+ user = create_new_user ()
126+ bd = BlockedDomain .create (user_id = user .id , domain = "example.com" )
127+ Session .commit ()
128+
129+ login (flask_client , user )
130+
131+ r = flask_client .post (
132+ url_for ("dashboard.setting" ),
133+ data = {
134+ "form-name" : "blocked-domains-remove" ,
135+ "domain_id" : bd .id ,
136+ "domain_name" : bd .domain ,
137+ },
138+ follow_redirects = True ,
139+ )
140+ assert r .status_code == 200
141+ assert BlockedDomain .get (bd .id ) is None
142+
143+
144+ def test_remove_blocked_domain_not_owned (flask_client ):
145+ user1 = create_new_user ()
146+ user2 = create_new_user ()
147+
148+ bd = BlockedDomain .create (user_id = user1 .id , domain = "example.com" )
149+ Session .commit ()
150+
151+ login (flask_client , user2 )
152+
153+ # Try to remove user1's blocked domain as user2
154+ r = flask_client .post (
155+ url_for ("dashboard.setting" ),
156+ data = {
157+ "form-name" : "blocked-domains-remove" ,
158+ "domain_id" : bd .id ,
159+ "domain_name" : "example.com" ,
160+ },
161+ follow_redirects = True ,
162+ )
163+ assert r .status_code == 200
164+ assert BlockedDomain .get (bd .id ) is not None
165+
166+
167+ def test_remove_blocked_domain_name_missing (flask_client ):
168+ user = create_new_user ()
169+ bd = BlockedDomain .create (user_id = user .id , domain = "example.com" )
170+ Session .commit ()
171+
172+ login (flask_client , user )
173+
174+ # Missing domain_name
175+ with patch ("app.dashboard.views.setting.BlockedDomain.delete" ) as mock_delete :
176+ r = flask_client .post (
177+ url_for ("dashboard.setting" ),
178+ data = {
179+ "form-name" : "blocked-domains-remove" ,
180+ "domain_id" : bd .id ,
181+ },
182+ follow_redirects = True ,
183+ )
184+ assert r .status_code == 200
185+ # Check that it didn't delete the domain
186+ assert BlockedDomain .get (bd .id ) is not None
187+ mock_delete .assert_not_called ()
0 commit comments