Skip to content

Commit

Permalink
Merge pull request #169 from City-of-Helsinki/add-organization-to-hea…
Browse files Browse the repository at this point in the history
…ring

Add organization to hearing
  • Loading branch information
tuomas777 committed May 19, 2016
2 parents 272f58d + ed11ad3 commit a2d5a57
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 4 deletions.
42 changes: 42 additions & 0 deletions democracy/migrations/0015_add_organization_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-05-19 08:11
from __future__ import unicode_literals

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('democracy', '0014_non_editable_id'),
]

operations = [
migrations.CreateModel(
name='Organization',
fields=[
('created_at', models.DateTimeField(db_index=True, default=django.utils.timezone.now, editable=False, verbose_name='time of creation')),
('modified_at', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='time of last modification')),
('published', models.BooleanField(db_index=True, default=True, verbose_name='public')),
('deleted', models.BooleanField(db_index=True, default=False, editable=False, verbose_name='deleted')),
('id', models.CharField(editable=False, max_length=32, primary_key=True, serialize=False, verbose_name='identifier')),
('name', models.CharField(max_length=255, unique=True, verbose_name='name')),
('admin_users', models.ManyToManyField(blank=True, related_name='admin_organizations', to=settings.AUTH_USER_MODEL)),
('created_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='organization_created', to=settings.AUTH_USER_MODEL, verbose_name='created by')),
('modified_by', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='organization_modified', to=settings.AUTH_USER_MODEL, verbose_name='last modified by')),
],
options={
'verbose_name': 'organization',
'verbose_name_plural': 'organizations',
},
),
migrations.AddField(
model_name='hearing',
name='organization',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='hearings', to='democracy.Organization', verbose_name='organization'),
),
]
2 changes: 2 additions & 0 deletions democracy/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from .hearing import Hearing, HearingComment, HearingImage
from .label import Label
from .section import Section, SectionComment, SectionImage, SectionType
from .organization import Organization

__all__ = [
"Hearing",
Expand All @@ -11,4 +12,5 @@
"SectionComment",
"SectionImage",
"SectionType",
"Organization",
]
7 changes: 6 additions & 1 deletion democracy/models/hearing.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from .base import BaseModelManager, Commentable, StringIdBaseModel
from .comment import BaseComment
from .images import BaseImage
from .organization import Organization


class HearingQueryset(models.QuerySet):
Expand All @@ -37,7 +38,11 @@ class Hearing(Commentable, StringIdBaseModel):
borough = models.CharField(verbose_name=_('borough'), blank=True, default='', max_length=200)
servicemap_url = models.CharField(verbose_name=_('service map URL'), default='', max_length=255, blank=True)
geojson = GeometryField(blank=True, null=True, verbose_name=_('area'))

organization = models.ForeignKey(
Organization,
verbose_name=_('organization'),
related_name="hearings", blank=True, null=True
)
labels = models.ManyToManyField("Label", verbose_name=_('labels'), blank=True)
followers = models.ManyToManyField(
settings.AUTH_USER_MODEL,
Expand Down
18 changes: 18 additions & 0 deletions democracy/models/organization.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from .base import StringIdBaseModel
from django.db import models
from django.conf import settings
from django.utils.translation import ugettext_lazy as _


class Organization(StringIdBaseModel):
name = models.CharField(verbose_name=_('name'), max_length=255, unique=True)
admin_users = models.ManyToManyField(
settings.AUTH_USER_MODEL, blank=True, related_name='admin_organizations'
)

class Meta:
verbose_name = _('organization')
verbose_name_plural = _('organizations')

def __str__(self):
return self.name
7 changes: 6 additions & 1 deletion democracy/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from democracy.enums import Commenting, InitialSectionType
from democracy.factories.hearing import HearingFactory, LabelFactory
from democracy.models import Hearing, HearingComment, Label, Section, SectionType
from democracy.models import Hearing, HearingComment, Label, Section, SectionType, Organization
from democracy.tests.utils import assert_ascending_sequence, create_default_images


Expand All @@ -30,6 +30,11 @@ def pytest_configure():
)


@pytest.fixture()
def default_organization():
return Organization.objects.create(name='The department for squirrel welfare')


@pytest.fixture()
def default_hearing(john_doe):
"""
Expand Down
14 changes: 13 additions & 1 deletion democracy/tests/test_hearing.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ def test_8_get_detail_check_properties(api_client, default_hearing):
assert set(data.keys()) >= {
'abstract', 'borough', 'close_at', 'closed', 'created_at', 'id', 'images', 'labels',
'n_comments', 'open_at', 'sections', 'servicemap_url',
'title'
'title', 'organization'
}


Expand Down Expand Up @@ -213,6 +213,18 @@ def test_8_get_detail_labels(api_client):
assert label_one.label in data['labels']


@pytest.mark.django_db
def test_8_get_detail_organization(api_client, default_hearing, default_organization):
default_hearing.organization = default_organization
default_hearing.save()
response = api_client.get(get_detail_url(default_hearing.id))

data = get_data_from_response(response)

assert 'results' not in data
assert data['organization'] == default_organization.name


@pytest.mark.django_db
def test_7_get_detail_servicemap(api_client):
hearing = Hearing(
Expand Down
6 changes: 5 additions & 1 deletion democracy/views/hearing.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ class HearingSerializer(serializers.ModelSerializer):
comments = HearingCommentSerializer.get_field_serializer(many=True, read_only=True)
commenting = EnumField(enum_type=Commenting)
geojson = JSONField()
organization = serializers.SlugRelatedField(
read_only=True,
slug_field='name'
)

def get_sections(self, hearing):
queryset = hearing.sections.all()
Expand All @@ -65,7 +69,7 @@ class Meta:
'commenting', 'published',
'labels', 'open_at', 'close_at', 'created_at',
'servicemap_url', 'images', 'sections', 'images',
'closed', 'comments', 'geojson', 'slug'
'closed', 'comments', 'geojson', 'organization', 'slug'
]


Expand Down

0 comments on commit a2d5a57

Please sign in to comment.