test_fileadmin.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. import os.path as op
  2. from nose.tools import eq_, ok_
  3. from flask_admin.contrib import fileadmin
  4. from flask_admin import Admin
  5. from flask import Flask
  6. from . import setup
  7. try:
  8. from StringIO import StringIO
  9. except ImportError:
  10. from io import StringIO
  11. def create_view():
  12. app, admin = setup()
  13. class MyFileAdmin(fileadmin.FileAdmin):
  14. editable_extensions = ('txt',)
  15. path = op.join(op.dirname(__file__), 'files')
  16. view = MyFileAdmin(path, '/files/', name='Files')
  17. admin.add_view(view)
  18. return app, admin, view
  19. def test_file_admin():
  20. app, admin, view = create_view()
  21. client = app.test_client()
  22. # index
  23. rv = client.get('/admin/myfileadmin/')
  24. eq_(rv.status_code, 200)
  25. ok_('path=dummy.txt' in rv.data.decode('utf-8'))
  26. # edit
  27. rv = client.get('/admin/myfileadmin/edit/?path=dummy.txt')
  28. eq_(rv.status_code, 200)
  29. ok_('dummy.txt' in rv.data.decode('utf-8'))
  30. rv = client.post('/admin/myfileadmin/edit/?path=dummy.txt', data=dict(
  31. content='new_string'
  32. ))
  33. eq_(rv.status_code, 302)
  34. rv = client.get('/admin/myfileadmin/edit/?path=dummy.txt')
  35. eq_(rv.status_code, 200)
  36. ok_('dummy.txt' in rv.data.decode('utf-8'))
  37. ok_('new_string' in rv.data.decode('utf-8'))
  38. # rename
  39. rv = client.get('/admin/myfileadmin/rename/?path=dummy.txt')
  40. eq_(rv.status_code, 200)
  41. ok_('dummy.txt' in rv.data.decode('utf-8'))
  42. rv = client.post('/admin/myfileadmin/rename/?path=dummy.txt', data=dict(
  43. name='dummy_renamed.txt',
  44. path='dummy.txt'
  45. ))
  46. eq_(rv.status_code, 302)
  47. rv = client.get('/admin/myfileadmin/')
  48. eq_(rv.status_code, 200)
  49. ok_('path=dummy_renamed.txt' in rv.data.decode('utf-8'))
  50. ok_('path=dummy.txt' not in rv.data.decode('utf-8'))
  51. # upload
  52. rv = client.get('/admin/myfileadmin/upload/')
  53. eq_(rv.status_code, 200)
  54. rv = client.post('/admin/myfileadmin/upload/', data=dict(
  55. upload=(StringIO(""), 'dummy.txt'),
  56. ))
  57. eq_(rv.status_code, 302)
  58. rv = client.get('/admin/myfileadmin/')
  59. eq_(rv.status_code, 200)
  60. ok_('path=dummy.txt' in rv.data.decode('utf-8'))
  61. ok_('path=dummy_renamed.txt' in rv.data.decode('utf-8'))
  62. # delete
  63. rv = client.post('/admin/myfileadmin/delete/', data=dict(
  64. path='dummy_renamed.txt'
  65. ))
  66. eq_(rv.status_code, 302)
  67. rv = client.get('/admin/myfileadmin/')
  68. eq_(rv.status_code, 200)
  69. ok_('path=dummy_renamed.txt' not in rv.data.decode('utf-8'))
  70. ok_('path=dummy.txt' in rv.data.decode('utf-8'))
  71. # mkdir
  72. rv = client.get('/admin/myfileadmin/mkdir/')
  73. eq_(rv.status_code, 200)
  74. rv = client.post('/admin/myfileadmin/mkdir/', data=dict(
  75. name='dummy_dir'
  76. ))
  77. eq_(rv.status_code, 302)
  78. rv = client.get('/admin/myfileadmin/')
  79. eq_(rv.status_code, 200)
  80. ok_('path=dummy.txt' in rv.data.decode('utf-8'))
  81. ok_('path=dummy_dir' in rv.data.decode('utf-8'))
  82. # rename - directory
  83. rv = client.get('/admin/myfileadmin/rename/?path=dummy_dir')
  84. eq_(rv.status_code, 200)
  85. ok_('dummy_dir' in rv.data.decode('utf-8'))
  86. rv = client.post('/admin/myfileadmin/rename/?path=dummy_dir', data=dict(
  87. name='dummy_renamed_dir',
  88. path='dummy_dir'
  89. ))
  90. eq_(rv.status_code, 302)
  91. rv = client.get('/admin/myfileadmin/')
  92. eq_(rv.status_code, 200)
  93. ok_('path=dummy_renamed_dir' in rv.data.decode('utf-8'))
  94. ok_('path=dummy_dir' not in rv.data.decode('utf-8'))
  95. # delete - directory
  96. rv = client.post('/admin/myfileadmin/delete/', data=dict(
  97. path='dummy_renamed_dir'
  98. ))
  99. eq_(rv.status_code, 302)
  100. rv = client.get('/admin/myfileadmin/')
  101. eq_(rv.status_code, 200)
  102. ok_('path=dummy_renamed_dir' not in rv.data.decode('utf-8'))
  103. ok_('path=dummy.txt' in rv.data.decode('utf-8'))
  104. def test_modal_edit():
  105. # bootstrap 2 - test edit_modal
  106. app_bs2 = Flask(__name__)
  107. admin_bs2 = Admin(app_bs2, template_mode="bootstrap2")
  108. class EditModalOn(fileadmin.FileAdmin):
  109. edit_modal = True
  110. editable_extensions = ('txt',)
  111. class EditModalOff(fileadmin.FileAdmin):
  112. edit_modal = False
  113. editable_extensions = ('txt',)
  114. path = op.join(op.dirname(__file__), 'files')
  115. edit_modal_on = EditModalOn(path, '/files/', endpoint='edit_modal_on')
  116. edit_modal_off = EditModalOff(path, '/files/', endpoint='edit_modal_off')
  117. admin_bs2.add_view(edit_modal_on)
  118. admin_bs2.add_view(edit_modal_off)
  119. client_bs2 = app_bs2.test_client()
  120. # bootstrap 2 - ensure modal window is added when edit_modal is enabled
  121. rv = client_bs2.get('/admin/edit_modal_on/')
  122. eq_(rv.status_code, 200)
  123. data = rv.data.decode('utf-8')
  124. ok_('fa_modal_window' in data)
  125. # bootstrap 2 - test edit modal disabled
  126. rv = client_bs2.get('/admin/edit_modal_off/')
  127. eq_(rv.status_code, 200)
  128. data = rv.data.decode('utf-8')
  129. ok_('fa_modal_window' not in data)
  130. # bootstrap 3
  131. app_bs3 = Flask(__name__)
  132. admin_bs3 = Admin(app_bs3, template_mode="bootstrap3")
  133. admin_bs3.add_view(edit_modal_on)
  134. admin_bs3.add_view(edit_modal_off)
  135. client_bs3 = app_bs3.test_client()
  136. # bootstrap 3 - ensure modal window is added when edit_modal is enabled
  137. rv = client_bs3.get('/admin/edit_modal_on/')
  138. eq_(rv.status_code, 200)
  139. data = rv.data.decode('utf-8')
  140. ok_('fa_modal_window' in data)
  141. # bootstrap 3 - test modal disabled
  142. rv = client_bs3.get('/admin/edit_modal_off/')
  143. eq_(rv.status_code, 200)
  144. data = rv.data.decode('utf-8')
  145. ok_('fa_modal_window' not in data)