content.py 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. # -*- coding: utf-8 -*-
  2. from depot.io.utils import FileIntent
  3. import transaction
  4. from tracim import models
  5. from tracim.fixtures import Fixture
  6. from tracim.fixtures.users_and_groups import Test
  7. from tracim.lib.core.content import ContentApi
  8. from tracim.lib.core.userworkspace import RoleApi
  9. from tracim.lib.core.workspace import WorkspaceApi
  10. from tracim.models.data import ContentType
  11. from tracim.models.data import UserRoleInWorkspace
  12. from tracim.models.revision_protection import new_revision
  13. class Content(Fixture):
  14. require = [Test]
  15. def insert(self):
  16. admin = self._session.query(models.User) \
  17. .filter(models.User.email == 'admin@admin.admin') \
  18. .one()
  19. bob = self._session.query(models.User) \
  20. .filter(models.User.email == 'bob@fsf.local') \
  21. .one()
  22. admin_workspace_api = WorkspaceApi(
  23. current_user=admin,
  24. session=self._session,
  25. config=self._config,
  26. )
  27. bob_workspace_api = WorkspaceApi(
  28. current_user=bob,
  29. session=self._session,
  30. config=self._config
  31. )
  32. content_api = ContentApi(
  33. current_user=admin,
  34. session=self._session,
  35. config=self._config
  36. )
  37. role_api = RoleApi(
  38. current_user=admin,
  39. session=self._session,
  40. config=self._config,
  41. )
  42. # Workspaces
  43. business_workspace = admin_workspace_api.create_workspace(
  44. 'Business',
  45. description='All importants documents',
  46. save_now=True,
  47. )
  48. recipe_workspace = admin_workspace_api.create_workspace(
  49. 'Recipes',
  50. description='Our best recipes',
  51. save_now=True,
  52. )
  53. other_workspace = bob_workspace_api.create_workspace(
  54. 'Others',
  55. description='Other Workspace',
  56. save_now=True,
  57. )
  58. # Workspaces roles
  59. role_api.create_one(
  60. user=bob,
  61. workspace=recipe_workspace,
  62. role_level=UserRoleInWorkspace.CONTENT_MANAGER,
  63. with_notif=False,
  64. )
  65. # Folders
  66. tool_workspace = content_api.create(
  67. content_type=ContentType.Folder,
  68. workspace=business_workspace,
  69. label='Tools',
  70. do_save=True,
  71. )
  72. menu_workspace = content_api.create(
  73. content_type=ContentType.Folder,
  74. workspace=business_workspace,
  75. label='Menus',
  76. do_save=True,
  77. )
  78. dessert_folder = content_api.create(
  79. content_type=ContentType.Folder,
  80. workspace=recipe_workspace,
  81. label='Desserts',
  82. do_save=True,
  83. )
  84. salads_folder = content_api.create(
  85. content_type=ContentType.Folder,
  86. workspace=recipe_workspace,
  87. label='Salads',
  88. do_save=True,
  89. )
  90. other_folder = content_api.create(
  91. content_type=ContentType.Folder,
  92. workspace=other_workspace,
  93. label='Infos',
  94. do_save=True,
  95. )
  96. # Pages, threads, ..
  97. tiramisu_page = content_api.create(
  98. content_type=ContentType.Page,
  99. workspace=recipe_workspace,
  100. parent=dessert_folder,
  101. label='Tiramisu Recipe',
  102. do_save=True,
  103. )
  104. best_cake_thread = content_api.create(
  105. content_type=ContentType.Thread,
  106. workspace=recipe_workspace,
  107. parent=dessert_folder,
  108. label='Best Cakes ?',
  109. do_save=False,
  110. )
  111. best_cake_thread.description = 'What is the best cake ?'
  112. self._session.add(best_cake_thread)
  113. apple_pie_recipe = content_api.create(
  114. content_type=ContentType.File,
  115. workspace=recipe_workspace,
  116. parent=dessert_folder,
  117. label='Apple_Pie',
  118. do_save=False,
  119. )
  120. apple_pie_recipe.file_extension = '.txt'
  121. apple_pie_recipe.depot_file = FileIntent(
  122. b'Apple pie Recipe',
  123. 'apple_Pie.txt',
  124. 'text/plain',
  125. )
  126. self._session.add(apple_pie_recipe)
  127. Brownie_recipe = content_api.create(
  128. content_type=ContentType.File,
  129. workspace=recipe_workspace,
  130. parent=dessert_folder,
  131. label='Brownie Recipe',
  132. do_save=False,
  133. )
  134. Brownie_recipe.file_extension = '.html'
  135. Brownie_recipe.depot_file = FileIntent(
  136. b'<p>Brownie Recipe</p>',
  137. 'brownie_recipe.html',
  138. 'text/html',
  139. )
  140. self._session.add(Brownie_recipe)
  141. fruits_desserts_folder = content_api.create(
  142. content_type=ContentType.Folder,
  143. workspace=recipe_workspace,
  144. label='Fruits Desserts',
  145. parent=dessert_folder,
  146. do_save=True,
  147. )
  148. menu_page = content_api.create(
  149. content_type=ContentType.Page,
  150. workspace=business_workspace,
  151. parent=menu_workspace,
  152. label='Current Menu',
  153. do_save=True,
  154. )
  155. new_fruit_salad = content_api.create(
  156. content_type=ContentType.Page,
  157. workspace=recipe_workspace,
  158. parent=fruits_desserts_folder,
  159. label='New Fruit Salad',
  160. do_save=True,
  161. )
  162. old_fruit_salad = content_api.create(
  163. content_type=ContentType.Page,
  164. workspace=recipe_workspace,
  165. parent=fruits_desserts_folder,
  166. label='Fruit Salad',
  167. do_save=True,
  168. )
  169. with new_revision(
  170. session=self._session,
  171. tm=transaction.manager,
  172. content=old_fruit_salad,
  173. ):
  174. content_api.archive(old_fruit_salad)
  175. content_api.save(old_fruit_salad)
  176. bad_fruit_salad = content_api.create(
  177. content_type=ContentType.Page,
  178. workspace=recipe_workspace,
  179. parent=fruits_desserts_folder,
  180. label='Bad Fruit Salad',
  181. do_save=True,
  182. )
  183. with new_revision(
  184. session=self._session,
  185. tm=transaction.manager,
  186. content=bad_fruit_salad,
  187. ):
  188. content_api.delete(bad_fruit_salad)
  189. content_api.save(bad_fruit_salad)
  190. # File at the root for test
  191. new_fruit_salad = content_api.create(
  192. content_type=ContentType.Page,
  193. workspace=other_workspace,
  194. label='New Fruit Salad',
  195. do_save=True,
  196. )
  197. old_fruit_salad = content_api.create(
  198. content_type=ContentType.Page,
  199. workspace=other_workspace,
  200. label='Fruit Salad',
  201. do_save=True,
  202. )
  203. with new_revision(
  204. session=self._session,
  205. tm=transaction.manager,
  206. content=old_fruit_salad,
  207. ):
  208. content_api.archive(old_fruit_salad)
  209. content_api.save(old_fruit_salad)
  210. bad_fruit_salad = content_api.create(
  211. content_type=ContentType.Page,
  212. workspace=other_workspace,
  213. label='Bad Fruit Salad',
  214. do_save=True,
  215. )
  216. with new_revision(
  217. session=self._session,
  218. tm=transaction.manager,
  219. content=bad_fruit_salad,
  220. ):
  221. content_api.delete(bad_fruit_salad)
  222. content_api.save(bad_fruit_salad)
  223. self._session.flush()