djsilcock 8 лет назад
Родитель
Сommit
a6a89877b6
4 измененных файлов с 43 добавлено и 4 удалено
  1. 2 2
      flaskbb/cli/plugins.py
  2. 10 2
      flaskbb/plugins/__init__.py
  3. 0 0
      tests/cli/__init__.py
  4. 31 0
      tests/cli/test_plugins.py

+ 2 - 2
flaskbb/cli/plugins.py

@@ -45,8 +45,8 @@ def new_plugin(plugin_identifier, template):
     It will either accept a valid path on the filesystem
     or a URL to a Git repository which contains the cookiecutter template.
     """
-    out_dir = os.path.join(current_app.root_path, "plugins", plugin_identifier)
-    click.secho("[+] Creating new plugin {}".format(plugin_identifier),
+    out_dir = os.path.join(current_app.root_path, "plugins")
+    click.secho("[+] Creating new plugin...",
                 fg="cyan")
     cookiecutter(template, output_dir=out_dir)
     click.secho("[+] Done. Created in {}".format(out_dir),

+ 10 - 2
flaskbb/plugins/__init__.py

@@ -17,8 +17,7 @@ from flask import g
 from flask_migrate import upgrade, downgrade, migrate
 from flask_plugins import Plugin
 from flaskbb.extensions import db, migrate as mig
-from flaskbb.management.models import SettingsGroup
-
+from flaskbb.management.models import SettingsGroup,Setting
 
 @contextlib.contextmanager  # TODO: Add tests
 def plugin_name_migrate(name):
@@ -71,6 +70,7 @@ class FlaskBBPlugin(Plugin):
     #: install additional things you must set it, else it won't install
     #: anything.
     settings_key = None
+    requires_install=None
 
     def resource_filename(self, *names):
         "Returns an absolute filename for a plugin resource."
@@ -129,6 +129,14 @@ class FlaskBBPlugin(Plugin):
             return False
         return False
 
+    def this_version_installed(self):
+        if self.uninstallable():
+            if Setting.as_dict(self.settings_key).get('version',None)==self.version:
+                return True
+            return False
+        return None
+
+
         # Some helpers
 
     def register_blueprint(self, blueprint, **kwargs):

+ 0 - 0
tests/cli/__init__.py


+ 31 - 0
tests/cli/test_plugins.py

@@ -0,0 +1,31 @@
+
+import click
+import zipfile,urllib,os
+from click.testing import CliRunner
+from flaskbb.cli import main as cli_main
+
+def test_new_plugin(tmpdir,application,monkeypatch):
+    runner=CliRunner()
+    zipfilename=str(tmpdir.join('cookiecutter.zip'))
+    monkeypatch.setattr(cli_main,'create_app',lambda s: application)
+    urllib.urlretrieve('https://github.com/sh4nks/cookiecutter-flaskbb-plugin/archive/master.zip',zipfilename)
+    with zipfile.ZipFile(zipfilename) as zf:
+        zf.extractall(str(tmpdir))
+    cookiecutterpath=tmpdir.join('cookiecutter-flaskbb-plugin-master')
+    input='\n'.join([
+    'Test Name',
+    'someone@nowhere.com',
+    'Testing Plugin',
+    '',
+    '',
+    'Straightforward Test Plugin',
+    'www.example.com',
+    '1.0.0'])
+
+    result=runner.invoke(cli_main.flaskbb,['plugins','new','testplugin','--template',str(cookiecutterpath)],input=input)
+    assert result.exit_code == 0
+    plugin_dir = os.join(application.extensions['plugin_manager'].plugin_folder, 'testing_plugin')
+    assert os.path.exists(plugin_dir)
+    assert os.path.isdir(plugin_dir)
+    assert __import__('flaskbb.plugins.testing_plugin').__plugin__=='TestingPlugin'
+