rrebase/knboard

View on GitHub
backend/boards/demo.py

Summary

Maintainability
A
0 mins
Test Coverage
from random import randint

from django.contrib.auth import get_user_model
from django.db import transaction

from accounts.models import Avatar
from .models import Board, Column, Task, Label, Priority

User = get_user_model()


def get_random_avatar():
    pks = Avatar.objects.values_list("pk", flat=True)
    if not pks:
        return None
    return Avatar.objects.get(pk=pks[randint(0, len(pks) - 1)])


@transaction.atomic
def create_demo_board(user):
    board = Board.objects.create(name="Project Abydos", owner=user)
    try:
        alice = User.objects.get(username="alice")
    except User.DoesNotExist:
        alice = User.objects.create_user(
            "alice", email="alice@gmail.com", first_name="Alice", last_name="Design"
        )
        alice.avatar = get_random_avatar()
        alice.save()
    board.members.set([user, alice])

    duplicate = Label.objects.create(name="Duplicate", color="#CCC", board=board)
    review = Label.objects.create(name="Needs review", color="#48C774", board=board)
    bug = Label.objects.create(name="Bug", color="#D0362E", board=board)
    design = Label.objects.create(name="Design ๐ŸŽจ", color="#965CCA", board=board)
    devops = Label.objects.create(name="DevOps", color="#5EA8CB", board=board)
    docs = Label.objects.create(name="Docs", color="#5DCEB3", board=board)
    cookie = Label.objects.create(name="Cookie ๐Ÿช", color="#D475CE", board=board)
    enhancement = Label.objects.create(name="Enhancement", color="#AF838E", board=board)

    backlog = Column.objects.create(title="Backlog", board=board)
    requested = Column.objects.create(title="Requested", board=board)
    in_progress = Column.objects.create(title="In progress ๐Ÿš€", board=board)
    done = Column.objects.create(title="Done ๐Ÿ’Ž", board=board)

    task = Task.objects.create(
        title="Email verifications gives 500",
        description="Noticed that email verifications gives **500** ๐Ÿ˜ฒ\n\n"
        "Error response with `Debug=True`\n"
        "```\n"
        "Exception at /auth/verify/\nTraceback (most recent call last):\n"
        "  File '<demo.py>', line 55, in <whoopy/doo>\n"
        "IndexError: list index out of range\n"
        "```",
        column=backlog,
        priority=Priority.HIGH,
    )
    task.labels.set([bug])
    task = Task.objects.create(
        title="Email verification fails", description="๐Ÿ”ฅ๐Ÿšง๐Ÿ”ฅ", column=backlog
    )
    task.labels.set([duplicate])
    task = Task.objects.create(
        title="Prepare runners for Continuous Integration",
        description="โ˜๏ธ Install the system requirements via **Ansible**.",
        column=backlog,
    )
    task.labels.set([devops])
    task = Task.objects.create(
        title="Search bar",
        description="## ๐ŸŽฏ Requirements\n"
        "- Search through all content\n"
        "- Autocomplete\n- Highlight matches\n"
        "- Catch smaller typos",
        column=backlog,
    )
    task.assignees.set([user, alice])
    task.labels.set([cookie])
    task = Task.objects.create(
        title="Login view form",
        description="Implement login view form that matces design provided by **Alice**. "
        "*Only backend validation for now.*",
        column=requested,
    )
    task.assignees.set([user])
    task.labels.set([enhancement])
    task = Task.objects.create(
        title="Implement Landing page", description="๐Ÿ‘ป" * 10, column=requested
    )
    task.assignees.set([user])
    task.labels.set([enhancement])
    task = Task.objects.create(
        title="Landing page hero block",
        description="The HTTP 418 I'm a teapot client error response code indicates that the server "
        "refuses to brew coffee because it is, permanently, a teapot.\n\n> 418 I'm a teapot",
        column=in_progress,
    )
    task.assignees.set([alice])
    task.labels.set([design, review])
    task = Task.objects.create(
        title="Landing page footer",
        description="| ๐Ÿฅ‰Good | ๐ŸฅˆBetter | ๐Ÿฅ‡Best |\n"
        "| --- | --- | --- |\n"
        "| ๐Ÿง€ Cheese | ๐ŸŸ Fries | ๐Ÿ•Pizza |\n"
        "| ๐Ÿ’ Cherries | ๐Ÿฅ Kiwi | ๐Ÿ” Burger |\n"
        "| ๐Ÿฉ Donut | ๐Ÿฅ Croissant  |  ๐ŸŒญ Hot dog |",
        column=in_progress,
    )
    task.assignees.set([alice])
    task.labels.set([design, review])
    task = Task.objects.create(
        title="Project setup documentation",
        description="๐Ÿ“šBad documentation is worse than no documentation. ๐Ÿ“š",
        column=in_progress,
        priority=Priority.LOW,
    )
    task.assignees.set([user])
    task.labels.set([docs])
    task = Task.objects.create(
        title="Registration view form", description="๐ŸฆŠ" * 10, column=done
    )
    task.assignees.set([user])
    task.labels.set([enhancement])
    emojies = "๐Ÿ๐Ÿฆ„๐Ÿ’๐Ÿฝ๐ŸŸ๐ŸŒญ๐Ÿ”๐Ÿฟ๐Ÿ™๐Ÿฆ–๐Ÿฎ๐Ÿน๐Ÿฑ"
    task = Task.objects.create(
        title="Setup staging server",
        description=f"# {emojies}\n## {emojies}\n### {emojies}\n{emojies}",
        column=done,
    )
    task.labels.set([devops])