diff --git a/flask_admin/tests/sqla/test_basic.py b/flask_admin/tests/sqla/test_basic.py index 0478fe287..b0fb2f348 100644 --- a/flask_admin/tests/sqla/test_basic.py +++ b/flask_admin/tests/sqla/test_basic.py @@ -2645,75 +2645,76 @@ def test_export_csv(app, db, admin): def test_string_null_behavior(app, db, admin): - class StringTestModel(db.Model): - id = db.Column(db.Integer, primary_key=True) - test_no = db.Column(db.Integer, nullable=False) - string_field = db.Column(db.String) - string_field_nonull = db.Column(db.String, nullable=False) - string_field_nonull_default = db.Column(db.String, nullable=False, default='') - text_field = db.Column(db.Text) - text_field_nonull = db.Column(db.Text, nullable=False) - text_field_nonull_default = db.Column(db.Text, nullable=False, default='') + with app.app_context(): + class StringTestModel(db.Model): + id = db.Column(db.Integer, primary_key=True) + test_no = db.Column(db.Integer, nullable=False) + string_field = db.Column(db.String) + string_field_nonull = db.Column(db.String, nullable=False) + string_field_nonull_default = db.Column(db.String, nullable=False, default='') + text_field = db.Column(db.Text) + text_field_nonull = db.Column(db.Text, nullable=False) + text_field_nonull_default = db.Column(db.Text, nullable=False, default='') - db.create_all() + db.create_all() - view = CustomModelView(StringTestModel, db.session) - admin.add_view(view) + view = CustomModelView(StringTestModel, db.session) + admin.add_view(view) - client = app.test_client() + client = app.test_client() - valid_params = { - "test_no": 1, - "string_field_nonull": STRING_CONSTANT, - "text_field_nonull": STRING_CONSTANT, - } - rv = client.post('/admin/stringtestmodel/new/', - data=valid_params) - assert rv.status_code == 302 - - # Assert on defaults - valid_inst = db.session.query(StringTestModel).filter(StringTestModel.test_no == 1).one() - assert valid_inst.string_field is None - assert valid_inst.string_field_nonull == STRING_CONSTANT - assert valid_inst.string_field_nonull_default == '' - assert valid_inst.text_field is None - assert valid_inst.text_field_nonull == STRING_CONSTANT - assert valid_inst.text_field_nonull_default == '' - - # Assert that nulls are caught on the non-null fields - invalid_string_field = { - "test_no": 2, - "string_field_nonull": None, - "text_field_nonull": STRING_CONSTANT, - } - rv = client.post('/admin/stringtestmodel/new/', - data=invalid_string_field) - assert rv.status_code == 200 - assert b'This field is required.' in rv.data - assert db.session.query(StringTestModel).filter(StringTestModel.test_no == 2).all() == [] - - invalid_text_field = { - "test_no": 3, - "string_field_nonull": STRING_CONSTANT, - "text_field_nonull": None, - } - rv = client.post('/admin/stringtestmodel/new/', - data=invalid_text_field) - assert rv.status_code == 200 - assert b'This field is required.' in rv.data - assert db.session.query(StringTestModel).filter(StringTestModel.test_no == 3).all() == [] - - # Assert that empty strings are converted to None on nullable fields. - empty_strings = { - "test_no": 4, - "string_field": "", - "text_field": "", - "string_field_nonull": STRING_CONSTANT, - "text_field_nonull": STRING_CONSTANT, - } - rv = client.post('/admin/stringtestmodel/new/', - data=empty_strings) - assert rv.status_code == 302 - empty_string_inst = db.session.query(StringTestModel).filter(StringTestModel.test_no == 4).one() - assert empty_string_inst.string_field is None - assert empty_string_inst.text_field is None + valid_params = { + "test_no": 1, + "string_field_nonull": STRING_CONSTANT, + "text_field_nonull": STRING_CONSTANT, + } + rv = client.post('/admin/stringtestmodel/new/', + data=valid_params) + assert rv.status_code == 302 + + # Assert on defaults + valid_inst = db.session.query(StringTestModel).filter(StringTestModel.test_no == 1).one() + assert valid_inst.string_field is None + assert valid_inst.string_field_nonull == STRING_CONSTANT + assert valid_inst.string_field_nonull_default == '' + assert valid_inst.text_field is None + assert valid_inst.text_field_nonull == STRING_CONSTANT + assert valid_inst.text_field_nonull_default == '' + + # Assert that nulls are caught on the non-null fields + invalid_string_field = { + "test_no": 2, + "string_field_nonull": None, + "text_field_nonull": STRING_CONSTANT, + } + rv = client.post('/admin/stringtestmodel/new/', + data=invalid_string_field) + assert rv.status_code == 200 + assert b'This field is required.' in rv.data + assert db.session.query(StringTestModel).filter(StringTestModel.test_no == 2).all() == [] + + invalid_text_field = { + "test_no": 3, + "string_field_nonull": STRING_CONSTANT, + "text_field_nonull": None, + } + rv = client.post('/admin/stringtestmodel/new/', + data=invalid_text_field) + assert rv.status_code == 200 + assert b'This field is required.' in rv.data + assert db.session.query(StringTestModel).filter(StringTestModel.test_no == 3).all() == [] + + # Assert that empty strings are converted to None on nullable fields. + empty_strings = { + "test_no": 4, + "string_field": "", + "text_field": "", + "string_field_nonull": STRING_CONSTANT, + "text_field_nonull": STRING_CONSTANT, + } + rv = client.post('/admin/stringtestmodel/new/', + data=empty_strings) + assert rv.status_code == 302 + empty_string_inst = db.session.query(StringTestModel).filter(StringTestModel.test_no == 4).one() + assert empty_string_inst.string_field is None + assert empty_string_inst.text_field is None