diff --git a/doc/contributing.rst b/doc/contributing.rst
index a527e687f..5ef78dfb8 100644
--- a/doc/contributing.rst
+++ b/doc/contributing.rst
@@ -2,28 +2,22 @@
How to contribute
#################
-Contributions are always welcome but please try to follow those few rules:
+Contributions are always welcome. If you want to submit a patch,
+please respect the following rules:
-- Modoboa tries to respect the `PEP8 `_
+- Open a pull request on the appropriate repository
+- Respect `PEP8 `_
+- Document your patch and respect `PEP 257 `_
+- Add unit tests and make sure the global coverage does not decrease
-- If you add some code, add some tests too. You can run the tests
- suite locally by using `tox `_
-
-There are also a few commands that can help you to contribute:
-
-Start a basic Modoboa instance with a few fixture::
-
- $ tox -e serve
-
-You can log in with admin/password.
-
-Build the docs to see your changes::
-
- $ tox -e doc
- $ firefox .tox/doc/tmp/html/index.html
+If all those steps are validated, your contribution will generally be
+integrated.
+Table of contents
+=================
.. toctree::
+ :maxdepth: 1
contributing/getting_started
contributing/plugin_api
diff --git a/doc/contributing/getting_started.rst b/doc/contributing/getting_started.rst
index e36961b34..621e9a58f 100644
--- a/doc/contributing/getting_started.rst
+++ b/doc/contributing/getting_started.rst
@@ -1,6 +1,6 @@
-###############################
-Development recipes for Modoboa
-###############################
+###########
+Useful tips
+###########
You would like to work on Modoboa but you don't know where to start?
You're at the right place! Browse this page to learn useful tips.
@@ -51,8 +51,9 @@ You're ready to go!
Manage static files
===================
-Modoboa uses `bower `_ (thanks to `django-bower `_)
-to manage its CSS and javascript dependencies.
+Modoboa uses `bower `_ (thanks to `django-bower
+`_) to manage its CSS and
+javascript dependencies.
Those dependencies are listed in a file called :file:`dev_settings.py`
located inside the :file:`/modoboa/core`
@@ -66,6 +67,42 @@ If you want to add a new dependency, just complete the
It will download and store the required files into the
:file:`/modoboa/bower_components` directory.
+Test your modifications
+=======================
+
+If you deployed a specific instance for your development needs, you
+can run the tests suite as follows:
+
+.. sourcecode:: bash
+
+ > python manage.py test modoboa.core modoboa.lib modoboa.admin modoboa.limits modoboa.relaydomains
+
+Otherwise, you can run the tests suite from the repository using `tox
+`_.
+
+Start a basic Modoboa instance
+==============================
+
+From the repository, run the following command to launch a simple
+instance with a few fixtures:
+
+.. sourcecode:: bash
+
+ > tox -e serve
+
+You can use admin/password to log in.
+
+Build the documentation
+=======================
+
+If you need to modify the documenation and want to see the result, you
+can build it as follows:
+
+.. sourcecode:: bash
+
+ > tox -e doc
+ > firefox .tox/doc/tmp/html/index.html
+
FAQ
===
diff --git a/doc/contributing/plugin_api.rst b/doc/contributing/plugin_api.rst
index 984072927..5d2ff90e3 100644
--- a/doc/contributing/plugin_api.rst
+++ b/doc/contributing/plugin_api.rst
@@ -1,5 +1,5 @@
###################
-Adding a new plugin
+Create a new plugin
###################
************
@@ -14,19 +14,20 @@ implementation provides the following possibilities:
* Register callback actions for specific events
Plugins are nothing more than Django applications with an extra piece
-of code that integrates them into Modoboa. The *modo_extension.py* file
-will contain a complete description of the plugin:
+of code that integrates them into Modoboa. The
+:file:`modo_extension.py` file will contain a complete description of
+the plugin:
* Admin and user parameters
* Observed events
* Custom menu entries
The communication between both applications is provided by
-:ref:`events`. Modoboa offers some kind of hooks to let plugin add custom
-actions.
+:ref:`events`. Modoboa offers some kind of hooks to let plugins add
+custom actions.
-The following subsections describe plugin architecture and explain
-how you can create your own plugin.
+The following subsections describe the plugin architecture and explain
+how you can create your own.
*****************
The required glue
@@ -45,7 +46,6 @@ of the future extension::
class MyExtension(ModoExtension):
-
"""My custom Modoboa extension."""
name = "myext"
@@ -82,9 +82,9 @@ Parameters
A plugin can declare its own parameters. There are two levels available:
* 'Administration' parameters : used to configure the plugin, editable
- inside the *Admin > Settings > Parameters* page,
+ inside the *Admin > Settings > Parameters* page
* 'User' parameters : per-user parameters (or preferences), editable
- inside the *Options > Preferences* page.
+ inside the *Options > Preferences* page
Playing with parameters
=======================
diff --git a/doc/manual_installation/modoboa.rst b/doc/manual_installation/modoboa.rst
index 119a71303..865492e00 100644
--- a/doc/manual_installation/modoboa.rst
+++ b/doc/manual_installation/modoboa.rst
@@ -34,6 +34,8 @@ Then, install Modoboa:
(env)> pip install modoboa
+.. _database:
+
Database
--------
diff --git a/test-requirements.txt b/test-requirements.txt
index a1b4ef1c5..554f0a065 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -1,3 +1,4 @@
factory-boy>=2.4
testfixtures==4.7.0
httmock==1.2.5
+tox