Commit Graph

84 Commits (4c2585a891dbe7622f22ed2eb955efbaa0f28afe)

Author SHA1 Message Date
Anler Hp 4c2585a891 Task #396 - Filter issues by subject 2014-07-29 13:00:27 +02:00
Anler Hp 6229770c0f Task #436 - Filter user stories by subject 2014-07-29 11:07:47 +02:00
Jesús Espino 945914c12b Adding some test for stats 2014-07-28 09:50:58 +02:00
Anler Hp 33fac4b43a Auto generate slug for projects 2014-07-25 14:19:37 +02:00
Anler Hp e79f0380dd Task #417 - Fixing create project api handler 2014-07-25 13:49:51 +02:00
Anler Hp 3f8af102ab Task #400 - Autolink user to membership if exists
When inviting an user to a project, if the user is already registered,
link her directly to the membership.
2014-07-25 12:57:06 +02:00
Anler Hp 8eed0d03e5 Task #399 - Memberships' resend-invitation handler
In order to resend and invitation email you just POST to detail-url
`memberships-resend-invitation`
2014-07-25 10:50:30 +02:00
Anler Hp 620ad91996 Task #361
Added a test only and appears to work
2014-07-24 14:49:48 +02:00
Anler Hp 95e636b856 Task #406 - Create members in bulk
Example:

        POST /memberships/bulk-create

        [{"project_id": <project id>,
          "role_id": <role id>,
          "email": <member email>}, ...]
2014-07-24 13:06:50 +02:00
Jesús Espino d97edb464c [HUGE CHANGE] Changed the permissions system 2014-07-24 12:19:06 +02:00
Anler Hp 44f9911730 Fix neighbor tests due to change in Issue ordering 2014-07-23 14:44:10 +02:00
Anler Hp 75cecbed70 Task #349 - API fails when DELETE-ing an userstory
Link - https://kaleidos.taiga.io/#/project/taiga/tasks/349
2014-07-23 11:21:52 +02:00
David Barragán Merino 2e6ddbf98f Merge pull request #55 from taigaio/attachments
Check permissions when accessing attachments
2014-07-22 23:32:54 +02:00
Jesús Espino d5df49f59a Big refactor on is_closed calculation 2014-07-22 12:00:25 +02:00
Jesús Espino d32a9562be A lot of refactoring on close us code signals code 2014-07-21 21:23:40 +02:00
Anler Hp 82ddeb69a7 USs: class-based to function-based services 2014-07-11 01:04:27 +02:00
Anler Hp 40260c82ad Tasks: class-based to function-based services 2014-07-11 01:04:17 +02:00
Anler Hp 52f476fb34 Check permissions when accessing attachments
Attachment files dispatching is now done through `RawAttachmentView`
view that checks for appropiate permissions.

When using the development server this view just redirects to the real
media path of the file.

When using the production server the special redirection header
`X-Accel-Redirect` is used instead to improve efficiency by instructing
the server to dispatch the file instead of django, but you also need the
following configuration (Nginx):

location /attachment-files {
    internal;
    alias /path/to/taiga/media/attachment-files;
}

It's recommended to also restrict the direct access from outside to the
`attachment-files` directory by using some configuration like this:

location /media/attachment-files {
    deny all;
}
2014-07-04 12:15:48 +02:00
Anler Hp 0ff888df53 Support for CELERY_ALWAYS_EAGER 2014-07-02 13:40:36 +02:00
Anler Hp 24e9d92af1 Decorator for overriding settings while testing
Usage:
```
from tests.utils import set_settings

@set_settings(FOO='bar')
def test_something():
    ...
```
2014-07-02 13:34:14 +02:00
Anler Hp 0e414267db Integration with RabbitMQ and Celery
First update taiga-vagrant vm if you're using it, you will have access
to the rabbit management console at port 8001 of the host machine.

* Defining tasks
- Tasks must be defined in a `deferred` module of an app, for example,
`taiga.projects.deferred` module.
- Tasks must be decorated and given the name "<app>.<task-name>", for
example in `taiga.projects.deferred` module:
```
from taiga.celery import app

@app.task(name="projects.add")
def add(x, y):
    return x + y
```
- Tasks should be at most just wrappers around service functions to
promote re-usability of those functions from other parts of the code,
say, management commands and the like.

* Calling tasks
Tasks should be called using one of the three functions defined in
`taiga.deferred` module:

- `defer`: Use this function if you need to perform some task
asynchronously and GET THE RESULT back later, for example:
```
result = defer("projects.add", x=1, y=2)
...
result.get() # => 3
```

- `call_async`: Use this function when you want to fire off some
task. No result is get back. For example:
```
call_async("projects.email_user", user)
```

- `apply_async`: Is the same as `call_async` but since it's a function
application and you must pass the args and kwargs together as one
parameter each you are allowed to pass celery-specific
extra-options (but bear in mind this is not recommended!)
```
apply_async("projects.email_user", args=(user,), kwargs={}, routing_key="tasks.email")
```
2014-07-02 09:49:56 +02:00
Anler Hp a8085a2feb Return user photo cropped and with absolute url
Remember to run `pip install -r requirements.txt` to install the
additional dependencies.
2014-07-01 14:38:26 +02:00
Anler Hp 5ff7ec1c00 Return user's gravatar if has no photo set
If the user has no photo set use her gravatar image if available
otherwise use the default avatar image defined in
`settings.DEFAULT_AVATAR_URL`
2014-07-01 12:46:58 +02:00
Anler Hp cfc35d5ed2 Required estimated-start/end dates for milestones 2014-06-27 14:07:50 +02:00
Alejandro Alonso 077de2bf4e Updating occ tests 2014-06-25 16:19:40 +02:00
Anler Hp 0a3a33aac5 Optimizing `Project.update_role_points` method 2014-06-24 12:38:29 +02:00
Alejandro Alonso 9b97a4a9c6 Fixing bug when creating objects with OCCResourceMixin 2014-06-23 16:22:08 +02:00
Anler Hp e98d666a40 Removing unnecessary setup of test database
We are already using pg arrays so the unpickle function in sql/tags.sql
is not needed, at least by the moment. I'm removing it because it was
entering in an infinite loop when creating the test database.
2014-06-23 12:26:17 +02:00
Anler Hp c89c6e7c31 Merge pull request #51 from taigaio/tags
Tags using pg arrays
2014-06-23 11:34:02 +02:00
Anler Hp 7ebe443394 Adding models.Model explicitly to tagged models 2014-06-23 10:58:14 +02:00
David Barragán Merino 76bc2ac426 Add more licenses agreements to the tests.integration module 2014-06-22 11:33:44 +02:00
David Barragán Merino 270b315fdf Add more licenses agreements to the tests.unit module 2014-06-20 19:48:34 +02:00
David Barragán Merino 767024d0d5 Add more licenses agreements to the tests module 2014-06-19 22:46:31 +02:00
Anler Hp df8a7fb73c create_membership factory function 2014-06-18 14:13:20 +02:00
Anler Hp 08b4be4e0b Re-applying migration in conflict 2014-06-18 11:15:33 +02:00
Anler Hp ac5e163dc5 Implement tags using pg arrays 2014-06-18 10:14:29 +02:00
Alejandro Alonso dcc7ec0bf2 Adding archived user stories feature and enabling API filtering 2014-06-18 09:16:30 +02:00
Alejandro Alonso b78a412b46 Fixing tests 2014-06-17 17:01:59 +02:00
Alejandro Alonso 57e1de23dc Avoiding race conditions in pre_save 2014-06-17 16:34:11 +02:00
Alejandro Alonso e534920c01 Optimistic Concurrency Control first approach 2014-06-17 16:08:59 +02:00
David Barragán Merino d6546dc518 Refactor searches module 2014-06-17 15:10:00 +02:00
David Barragán Merino c712e1d8e7 Add some tests of the github connector 2014-06-12 12:16:37 +02:00
David Barragán Merino f9327c7069 Fix User model: delete first_name, last_name, permisions and groups, add full_name, and github_id, change description to bio 2014-06-12 12:16:36 +02:00
Andrey Antukh 9ee7335ff0 Notifications: add test for notifications app. 2014-06-12 00:12:15 +02:00
Andrey Antukh a4e8bcbe12 History: add tests. 2014-06-12 00:12:15 +02:00
Andrey Antukh 39bb7bcfcd Add additional factories for tests. 2014-06-12 00:12:15 +02:00
Jesús Espino 262776043f Timeline service implementation 2014-06-05 10:08:42 +02:00
Jesús Espino 165b247c6d splitted tests of mdrender in integration and unit tests 2014-06-04 17:27:01 +02:00
Anler Hp aa7ca6e3fc Reconnect disconnected signals in integration tests 2014-06-02 16:57:48 +02:00
Anler Hp 9923e50603 Generic voting application
The stars application has been removed in favor of a more generic voting
application that works with any model. Starring a project is just a
special case of voting a project.

Usage.

Add a vote:

    votes.add_vote(<model instance>, user)

Remove a vote:

    votes.remove_vote(<model instance>, user)

Get the queryset of users that voted an object:

    votes.get_voters(<model instance>)

Get the number of votes an object has:

    votes.get_votes(<model instance>)

Get the objects of type <model> voted by an user:

    votes.get_voted(user, <model>)

The issues application is already making use of the votes application
through the following urls:

        /api/v1/issues/<id>/upvote      <- url name is "issues-upvote"
        /api/v1/issues/<id>/downvote    <- url name is "issues-downvote"
2014-06-02 12:03:09 +02:00