API & Client - update registration activation on user register/delete
+ minor refactor on administration (fix #15)
This commit is contained in:
@ -1,4 +1,6 @@
|
||||
from fittrackee_api import db
|
||||
from flask import current_app
|
||||
from sqlalchemy.event import listens_for
|
||||
|
||||
from ..users.models import User
|
||||
|
||||
@ -26,3 +28,25 @@ class AppConfig(db.Model):
|
||||
"max_zip_file_size": self.max_zip_file_size,
|
||||
"max_users": self.max_users,
|
||||
}
|
||||
|
||||
|
||||
def update_app_config():
|
||||
config = AppConfig.query.first()
|
||||
if config:
|
||||
current_app.config[
|
||||
'is_registration_enabled'
|
||||
] = config.is_registration_enabled
|
||||
|
||||
|
||||
@listens_for(User, 'after_insert')
|
||||
def on_user_insert(mapper, connection, user):
|
||||
@listens_for(db.Session, 'after_flush', once=True)
|
||||
def receive_after_flush(session, context):
|
||||
update_app_config()
|
||||
|
||||
|
||||
@listens_for(User, 'after_delete')
|
||||
def on_user_delete(mapper, connection, old_user):
|
||||
@listens_for(db.Session, 'after_flush', once=True)
|
||||
def receive_after_flush(session, context):
|
||||
update_app_config()
|
||||
|
@ -62,7 +62,6 @@ def app_config():
|
||||
config.max_single_file_size = 1048576
|
||||
config.max_zip_file_size = 10485760
|
||||
config.max_users = 0
|
||||
config.registration = False
|
||||
db.session.add(config)
|
||||
db.session.commit()
|
||||
return config
|
||||
|
@ -836,3 +836,70 @@ def test_update_user_invalid_picture(app, user_1):
|
||||
assert data['status'] == 'fail'
|
||||
assert data['message'] == 'File extension not allowed.'
|
||||
assert response.status_code == 400
|
||||
|
||||
|
||||
def test_it_disables_registration_on_user_registration(
|
||||
app_no_config, app_config, user_1_admin, user_2
|
||||
):
|
||||
app_config.max_users = 3
|
||||
client = app_no_config.test_client()
|
||||
client.post(
|
||||
'/api/auth/register',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
username='sam',
|
||||
email='sam@test.com',
|
||||
password='12345678',
|
||||
password_conf='12345678',
|
||||
)
|
||||
),
|
||||
content_type='application/json',
|
||||
)
|
||||
response = client.post(
|
||||
'/api/auth/register',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
username='new',
|
||||
email='new@test.com',
|
||||
password='12345678',
|
||||
password_conf='12345678',
|
||||
)
|
||||
),
|
||||
content_type='application/json',
|
||||
)
|
||||
assert response.status_code == 403
|
||||
data = json.loads(response.data.decode())
|
||||
assert data['status'] == 'error'
|
||||
assert data['message'] == 'Error. Registration is disabled.'
|
||||
|
||||
|
||||
def test_it_does_not_disable_registration_on_user_registration(
|
||||
app_no_config, app_config, user_1_admin, user_2,
|
||||
):
|
||||
app_config.max_users = 4
|
||||
client = app_no_config.test_client()
|
||||
client.post(
|
||||
'/api/auth/register',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
username='sam',
|
||||
email='sam@test.com',
|
||||
password='12345678',
|
||||
password_conf='12345678',
|
||||
)
|
||||
),
|
||||
content_type='application/json',
|
||||
)
|
||||
response = client.post(
|
||||
'/api/auth/register',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
username='new',
|
||||
email='new@test.com',
|
||||
password='12345678',
|
||||
password_conf='12345678',
|
||||
)
|
||||
),
|
||||
content_type='application/json',
|
||||
)
|
||||
assert response.status_code == 201
|
||||
|
@ -1252,3 +1252,70 @@ def test_admin_can_not_delete_its_own_account_if_no_other_admin(
|
||||
'You can not delete your account, no other user has admin rights.'
|
||||
in data['message']
|
||||
)
|
||||
|
||||
|
||||
def test_it_enables_registration_on_user_delete(
|
||||
app_no_config, app_config, user_1_admin, user_2, user_3
|
||||
):
|
||||
app_config.max_users = 3
|
||||
client = app_no_config.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='admin@example.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.delete(
|
||||
'/api/users/toto',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
response = client.post(
|
||||
'/api/auth/register',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
username='justatest',
|
||||
email='test@test.com',
|
||||
password='12345678',
|
||||
password_conf='12345678',
|
||||
)
|
||||
),
|
||||
content_type='application/json',
|
||||
)
|
||||
assert response.status_code == 201
|
||||
|
||||
|
||||
def test_it_does_not_enable_registration_on_user_delete(
|
||||
app_no_config, app_config, user_1_admin, user_2, user_3
|
||||
):
|
||||
app_config.max_users = 2
|
||||
client = app_no_config.test_client()
|
||||
resp_login = client.post(
|
||||
'/api/auth/login',
|
||||
data=json.dumps(dict(email='admin@example.com', password='12345678')),
|
||||
content_type='application/json',
|
||||
)
|
||||
client.delete(
|
||||
'/api/users/toto',
|
||||
headers=dict(
|
||||
Authorization='Bearer '
|
||||
+ json.loads(resp_login.data.decode())['auth_token']
|
||||
),
|
||||
)
|
||||
response = client.post(
|
||||
'/api/auth/register',
|
||||
data=json.dumps(
|
||||
dict(
|
||||
username='justatest',
|
||||
email='test@test.com',
|
||||
password='12345678',
|
||||
password_conf='12345678',
|
||||
)
|
||||
),
|
||||
content_type='application/json',
|
||||
)
|
||||
assert response.status_code == 403
|
||||
data = json.loads(response.data.decode())
|
||||
assert data['status'] == 'error'
|
||||
assert data['message'] == 'Error. Registration is disabled.'
|
||||
|
Reference in New Issue
Block a user