test_populate.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import pytest
  2. from sqlalchemy.exc import OperationalError
  3. from sqlalchemy_utils.functions import create_database, drop_database
  4. from flaskbb.extensions import alembic, db
  5. from flaskbb.utils.populate import delete_settings_from_fixture, \
  6. create_settings_from_fixture, update_settings_from_fixture, \
  7. create_default_groups, create_test_data, insert_bulk_data, \
  8. create_welcome_forum, create_user
  9. from flaskbb.fixtures.groups import fixture as group_fixture
  10. from flaskbb.fixtures.settings import fixture as settings_fixture
  11. from flaskbb.user.models import Group, User
  12. from flaskbb.forum.models import Category, Topic, Post
  13. from flaskbb.management.models import Setting, SettingsGroup
  14. def test_delete_settings_from_fixture(default_settings):
  15. groups_count = SettingsGroup.query.count()
  16. assert len(settings_fixture) == groups_count
  17. deleted = delete_settings_from_fixture(settings_fixture)
  18. assert len(settings_fixture) == len(deleted)
  19. assert not SettingsGroup.query.count()
  20. assert not Setting.query.count()
  21. def test_create_settings_from_fixture(database):
  22. assert not SettingsGroup.query.count()
  23. assert not Setting.query.count()
  24. created = create_settings_from_fixture(settings_fixture)
  25. assert len(settings_fixture) == len(created)
  26. assert SettingsGroup.query.count() == len(created)
  27. def test_update_settings_from_fixture(database):
  28. # No force-overwrite - the fixtures will be created because
  29. # do not exist.
  30. assert not SettingsGroup.query.count()
  31. assert not Setting.query.count()
  32. updated = update_settings_from_fixture(settings_fixture)
  33. assert len(updated) == SettingsGroup.query.count()
  34. # force-overwrite - the fixtures exist, but they will be overwritten now.
  35. force_updated = update_settings_from_fixture(settings_fixture,
  36. overwrite_group=True,
  37. overwrite_setting=True)
  38. assert len(force_updated) == SettingsGroup.query.count()
  39. updated_fixture = (
  40. ('general', {
  41. 'name': "General Settings",
  42. 'description': "How many items per page are displayed.",
  43. 'settings': (
  44. ('project_title', {
  45. 'value': "FlaskBB",
  46. 'value_type': "string",
  47. 'name': "Project title",
  48. 'description': "The title of the project.",
  49. }),
  50. ('test_fixture', {
  51. 'description': 'This is a test fixture',
  52. 'name': 'Test Fixture',
  53. 'value': 'FlaskBBTest',
  54. 'value_type': 'string'
  55. })
  56. )
  57. }),
  58. )
  59. updated = update_settings_from_fixture(updated_fixture)
  60. assert len(updated) == 1
  61. def test_create_user(default_groups):
  62. user = User.query.filter_by(username="admin").first()
  63. assert not user
  64. user = create_user(username="admin", password="test",
  65. email="test@example.org", groupname="admin")
  66. assert user.username == "admin"
  67. assert user.permissions["admin"]
  68. def test_create_welcome_forum(default_groups):
  69. assert not create_welcome_forum()
  70. create_user(username="admin", password="test",
  71. email="test@example.org", groupname="admin")
  72. assert create_welcome_forum()
  73. def test_create_test_data(database):
  74. assert Category.query.count() == 0
  75. data_created = create_test_data()
  76. assert Category.query.count() == data_created['categories']
  77. def test_insert_bulk_data(database):
  78. assert not insert_bulk_data(topic_count=1, post_count=1)
  79. create_test_data(categories=1, forums=1, topics=0)
  80. assert Topic.query.count() == 0
  81. topics, posts = insert_bulk_data(topic_count=1, post_count=1)
  82. assert Topic.query.count() == topics
  83. # -1 bc the topic post also counts as post
  84. assert Post.query.count() - 1 == posts
  85. def test_create_default_groups(database):
  86. """Test that the default groups are created correctly."""
  87. assert Group.query.count() == 0
  88. create_default_groups()
  89. assert Group.query.count() == len(group_fixture)
  90. for key, attributes in group_fixture.items():
  91. group = Group.query.filter_by(name=key).first()
  92. for attribute, value in attributes.items():
  93. assert getattr(group, attribute) == value
  94. def test_migrations_upgrade():
  95. with pytest.raises(OperationalError):
  96. User.query.all()
  97. # ensure that the database is created
  98. create_database(db.engine.url)
  99. alembic.upgrade()
  100. assert len(User.query.all()) == 0
  101. drop_database(db.engine.url)