First version of the suggested front end testing document
Final tweaks to front end testing doc
Clarified browser stats and added some code samples
Minor doc tweeks
Clarify single-quotes rule in Python coding standards
Add CHANGELOG and docs to pull review process
Move URL /user/dashboard to /dashboard

We decided this makes more sense
Add activity stream tab to dataset page
Fix some PEP8 issues
Tidy a couple of docstrings
Delete a commented-out set_trace()
Refactor dashboard activity stream tests

- Move tests for contents of dashboard activity stream out of test_activity.py,
this test module was way too long and confusing, leave it for testing the
public activity streams only. Add a docstring to the module saying so.

- Add a docstring to test_follow.py explaining that it tests the follower
functions only (follow, unfollow, etc.) and not the contents of the dashboard
activity stream that is generated from what you're folllowing.

- Add new tests for the contents of the dashboard activity stream in
test_dashboard.py along with other dashboard tests.

Currently some of these tests are failing because activities from followed
groups are not appearing in the dashboard.
Add activities from followed groups to dashboard activity stream

Add activities from groups that a user is following (e.g. when someone
updates a group) to the user's dashboard activity stream.

There are still some test_dashboard.py tests failing because activities
from datasets belonging to followed groups dob't appear in the dashboard
yet.
Move group_package_show SQLAlchemy into model

Move the SQLAlchemy query that the group_package_show() action function
uses into the model. I need this for architectural reasons for upcoming
commits, and we're supposed to encapsulate SQLAlchemy in the model
anyway.

I made the new model function support the 'return_query' option but note
that there are no tests covering this, all the tests pass even without
this option.
Remove group.members_of_type()

Remove group.members_of_type() and related code. It isn't used anywhere
except in the old publisher and organizations extensions which are to be
replaced by a new organizations implementation in CKAN core. Also it
duplicates functionality provided by group.active_packages().
Remove duplicate methods to get a group's packages

Refactor active_packages() and get_package_revisions(), both of which
return a group's packages (but in slightly different ways), replace with
just one method packages().

We now have just one way to get a group's packages, the packages()
method of the group model. The group_package_show() action function
calls it.
Fix following of groups

Add activities from the datasets of followed groups into the user's
dashboard activity stream. All the test_dashboard.py tests now pass.

Move SQLAlchemy from group_activity_list() into model, alongside the SQLAlchemy
queries for the other types of activity stream.

Change the SQLAlchemy in activities_from_groups_followed_by_user() to be the
union of group_activity_list() for each of the followed groups.

Update some tests.
Add docstring to group_activity_list()
Add some docstrings to model/activity.py
Fix dashboard activity stream from followed groups

It was returning all activities from the entire site, fix to return
activities from followed groups only.

The tests didn't catch this error because they didn't test doing random
activities that should _not_ appear in the user's dashboard and
asserting that they don't.

Add a quick test that catches this.

This is probably a problem for the other activity streams tests in
test_activity.py as well.