Skip to content

Create table leadership type 42 #491

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions app/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from .models import EventType
from .models import Faq
from .models import FaqViewed
from .models import LeadershipType
from .models import Location
from .models import PermissionType
from .models import PracticeArea
Expand Down Expand Up @@ -172,6 +173,11 @@ class FaqViewed(admin.ModelAdmin):
list_display = ("faq",)


@admin.register(LeadershipType)
class LeadershipType(admin.ModelAdmin):
list_display = ("name", "description")


@admin.register(Location)
class Location(admin.ModelAdmin):
list_display = (
Expand Down
14 changes: 14 additions & 0 deletions app/core/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from core.models import EventType
from core.models import Faq
from core.models import FaqViewed
from core.models import LeadershipType
from core.models import Location
from core.models import PermissionType
from core.models import PracticeArea
Expand Down Expand Up @@ -226,6 +227,19 @@ class Meta:
)


class LeadershipTypeSerializer(serializers.ModelSerializer):
"""Used to retrieve leadership_type info"""

class Meta:
model = LeadershipType
fields = (
"uuid",
"name",
"description",
)
read_only_fields = ("uuid", "created_at", "updated_at")


class LocationSerializer(serializers.ModelSerializer):
"""Used to retrieve Location info"""

Expand Down
2 changes: 2 additions & 0 deletions app/core/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from .views import EventViewSet
from .views import FaqViewedViewSet
from .views import FaqViewSet
from .views import LeadershipTypeViewSet
from .views import LocationViewSet
from .views import PermissionTypeViewSet
from .views import PracticeAreaViewSet
Expand Down Expand Up @@ -37,6 +38,7 @@
router.register(r"affiliates", AffiliateViewSet, basename="affiliate")
router.register(r"faqs", FaqViewSet, basename="faq")
router.register(r"faqs-viewed", FaqViewedViewSet, basename="faq-viewed")
router.register(r"leadership-types", LeadershipTypeViewSet, basename="leadership-type")
router.register(r"locations", LocationViewSet, basename="location")
router.register(r"program-areas", ProgramAreaViewSet, basename="program-area")
router.register(r"skills", SkillViewSet, basename="skill")
Expand Down
16 changes: 16 additions & 0 deletions app/core/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from ..models import EventType
from ..models import Faq
from ..models import FaqViewed
from ..models import LeadershipType
from ..models import Location
from ..models import PermissionType
from ..models import PracticeArea
Expand All @@ -40,6 +41,7 @@
from .serializers import EventTypeSerializer
from .serializers import FaqSerializer
from .serializers import FaqViewedSerializer
from .serializers import LeadershipTypeSerializer
from .serializers import LocationSerializer
from .serializers import PermissionTypeSerializer
from .serializers import PracticeAreaSerializer
Expand Down Expand Up @@ -250,6 +252,20 @@ class FaqViewedViewSet(mixins.CreateModelMixin, viewsets.ReadOnlyModelViewSet):
permission_classes = [IsAuthenticated]


@extend_schema_view(
list=extend_schema(description="Return a list of all locations"),
create=extend_schema(description="Create a new location"),
retrieve=extend_schema(description="Return the details of a location"),
destroy=extend_schema(description="Delete a location"),
update=extend_schema(description="Update a location"),
partial_update=extend_schema(description="Patch a location"),
)
class LeadershipTypeViewSet(viewsets.ModelViewSet):
queryset = LeadershipType.objects.all()
serializer_class = LeadershipTypeSerializer
permission_classes = [IsAuthenticated]


@extend_schema_view(
list=extend_schema(description="Return a list of all locations"),
create=extend_schema(description="Create a new location"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
name,description
Mentor Led,Has a mentor in a leadership role
Peer Led,Peers run the meetings
Community Led,Community members run the meetings
Product Led,Projects
33 changes: 33 additions & 0 deletions app/core/migrations/0036_leadershiptype_project_leadership_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Generated by Django 4.2.16 on 2025-05-05 00:52

from django.db import migrations, models
import django.db.models.deletion
import uuid


class Migration(migrations.Migration):

dependencies = [
('core', '0035_referrertype'),
]

operations = [
migrations.CreateModel(
name='LeadershipType',
fields=[
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated at')),
('name', models.CharField(max_length=255, unique=True)),
('description', models.TextField(blank=True)),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='project',
name='leadership_type',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.leadershiptype'),
),
]
2 changes: 1 addition & 1 deletion app/core/migrations/max_migration.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0035_referrertype
0036_leadershiptype_project_leadership_type
16 changes: 15 additions & 1 deletion app/core/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ def __repr__(self):
return f"<{self.__class__.__name__} {self.uuid}>"


class LeadershipType(AbstractBaseModel):
"""
Dictionary of leadership types to be associated with a project
"""

name = models.CharField(max_length=255, unique=True)
description = models.TextField(blank=True)

def __str__(self):
return f"{self.name}"


class User(PermissionsMixin, AbstractBaseUser, AbstractBaseModel):
"""
Table contains cognito-users & django-users.
Expand Down Expand Up @@ -159,7 +171,9 @@ class Project(AbstractBaseModel):
# location_id = models.ForeignKey("location", on_delete=models.PROTECT)
google_drive_id = models.CharField(max_length=255, blank=True)
# leads = models.ManyToManyField("lead")
# leadership_type_id = models.ForeignKey("leadership_type", on_delete=models.PROTECT)
leadership_type = models.ForeignKey(
LeadershipType, null=True, on_delete=models.SET_NULL
)
image_logo = models.URLField(blank=True)
image_hero = models.URLField(blank=True)
image_icon = models.URLField(blank=True)
Expand Down
9 changes: 9 additions & 0 deletions app/core/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from ..models import EventType
from ..models import Faq
from ..models import FaqViewed
from ..models import LeadershipType
from ..models import Location
from ..models import PermissionType
from ..models import PracticeArea
Expand Down Expand Up @@ -207,6 +208,14 @@ def faq_viewed(faq):
return FaqViewed.objects.create(faq=faq)


@pytest.fixture
def leadership_type():
return LeadershipType.objects.create(
name="This is a test leadership_type",
description="This is a test leadership_type description",
)


@pytest.fixture
def location():
return Location.objects.create(name="Test Hack for L.A. HQ")
Expand Down
14 changes: 14 additions & 0 deletions app/core/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
FAQS_URL = reverse("faq-list")
FAQS_VIEWED_URL = reverse("faq-viewed-list")
AFFILIATE_URL = reverse("affiliate-list")
LEADERSHIP_TYPES_URL = reverse("leadership-type-list")
LOCATION_URL = reverse("location-list")
PROGRAM_AREAS_URL = reverse("program-area-list")
REFERRER_TYPES_URL = reverse("referrer-type-list")
Expand Down Expand Up @@ -249,6 +250,19 @@ def test_get_faq_viewed(auth_client, faq_viewed):
assert res.data[0]["faq"] == faq_viewed.faq.pk


def test_create_leadership_type(auth_client):
"""Test that we can create a leadership_type"""

payload = {
"name": "Create leadership_type test",
"description": "Create leadership_type test description",
}
res = auth_client.post(LEADERSHIP_TYPES_URL, payload)
assert res.status_code == status.HTTP_201_CREATED
assert res.data["name"] == payload["name"]
assert res.data["description"] == payload["description"]


def test_create_location(auth_client):
"""Test that we can create a location"""

Expand Down
11 changes: 11 additions & 0 deletions app/core/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,17 @@ def test_event_type(event_type):
assert event_type.description == "This is a test event_type description."


def test_leadership_type(leadership_type):
assert str(leadership_type) == "This is a test leadership_type"
assert leadership_type.description == "This is a test leadership_type description"


def test_leadership_type_project_relationship(project, leadership_type):
assert project.leadership_type is None
project.leadership_type = leadership_type
assert project.leadership_type == leadership_type


def test_soc_major(soc_major):
assert str(soc_major) == "Test Soc Major"

Expand Down
24 changes: 24 additions & 0 deletions app/data/migrations/0012_leadershiptype_seed.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from django.db import migrations

from core.models import LeadershipType


def forward(__code__, __reverse_code__):
items = [
("Mentor Led", "Has a mentor in a leadership role"),
("Peer Led", "Peers run the meetings"),
("Community Led", "Community members run the meetings"),
("Product Led", "Projects"),
]
for name, description in items:
LeadershipType.objects.create(name=name, description=description)


def reverse(__code__, __reverse_code__):
LeadershipType.objects.all().delete()


class Migration(migrations.Migration):
dependencies = [("data", "0011_referrertype_seed")]

operations = [migrations.RunPython(forward, reverse)]
2 changes: 1 addition & 1 deletion app/data/migrations/max_migration.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0011_referrertype_seed
0012_leadershiptype_seed