Select Git revision
webpack.config.js
-
Andrej Ramašeuski authoredAndrej Ramašeuski authored
test_models.py 7.02 KiB
from unittest.mock import patch
import arrow
import pytest
from django.conf import settings
from openlobby.core.api.schema import (
AUTHOR_SORT_LAST_NAME_ID,
AUTHOR_SORT_TOTAL_REPORTS_ID,
)
from openlobby.core.documents import ReportDoc
from openlobby.core.models import Report, User, OpenIdClient, LoginAttempt
pytestmark = [pytest.mark.django_db, pytest.mark.usefixtures("django_es")]
def test_report__marks_user_as_author_on_save():
author = User.objects.create(id=1, is_author=False)
date = arrow.get(2018, 1, 1).datetime
Report.objects.create(author=author, date=date, body="Lorem ipsum.")
user = User.objects.get(id=1)
assert user.is_author
def test_report__marks_user_as_author_on_save__not_if_draft():
author = User.objects.create(id=1, is_author=False)
date = arrow.get(2018, 1, 1).datetime
Report.objects.create(author=author, is_draft=True, date=date, body="Lorem ipsum.")
user = User.objects.get(id=1)
assert not user.is_author
def test_report__is_saved_in_elasticsearch():
author = User.objects.create(id=6)
date = arrow.get(2018, 1, 1).datetime
published = arrow.get(2018, 1, 2).datetime
Report.objects.create(
id=3,
author=author,
date=date,
published=published,
title="It happened",
body="Lorem ipsum.",
received_benefit="coffee",
provided_benefit="tea",
our_participants="me",
other_participants="them",
extra={"a": 3},
is_draft=False,
)
docs = list(ReportDoc.search())
assert len(docs) == 1
doc = docs[0]
assert doc.meta.id == "3"
assert doc.author_id == 6
assert doc.date == date
assert doc.published == published
assert doc.title == "It happened"
assert doc.body == "Lorem ipsum."
assert doc.received_benefit == "coffee"
assert doc.provided_benefit == "tea"
assert doc.our_participants == "me"
assert doc.other_participants == "them"
assert doc.extra == {"a": 3}
assert not doc.is_draft
def test_report__save_works_with_no_extra():
author = User.objects.create(id=6)
date = arrow.get(2018, 1, 1).datetime
Report.objects.create(
id=7, author=author, date=date, published=date, body="Lorem ipsum."
)
docs = list(ReportDoc.search())
assert len(docs) == 1
doc = docs[0]
assert doc.meta.id == "7"
assert doc.extra is None
def test_login_attempt__default_expiration():
client = OpenIdClient.objects.create(name="a", client_id="b", client_secret="c")
with patch("openlobby.core.models.time.time", return_value=10000):
attempt = LoginAttempt.objects.create(
openid_client=client, state="foo", app_redirect_uri="http://openlobby/app"
)
assert attempt.expiration == 10000 + settings.LOGIN_ATTEMPT_EXPIRATION
def test_user__no_name_collision():
User.objects.create(
username="a", is_author=True, first_name="Ryan", last_name="Gosling"
)
User.objects.create(
username="b", is_author=True, first_name="Ryan", last_name="Reynolds"
)
assert User.objects.get(username="a").has_colliding_name is False
assert User.objects.get(username="b").has_colliding_name is False
def test_user__name_collision():
User.objects.create(
username="a", is_author=True, first_name="Ryan", last_name="Gosling"
)
User.objects.create(
username="b", is_author=True, first_name="Ryan", last_name="Gosling"
)
assert User.objects.get(username="a").has_colliding_name is True
assert User.objects.get(username="b").has_colliding_name is True
def test_user__name_collision_affects_only_authors():
User.objects.create(
username="a", is_author=False, first_name="Ryan", last_name="Gosling"
)
User.objects.create(
username="b", is_author=True, first_name="Ryan", last_name="Gosling"
)
User.objects.create(
username="c", is_author=False, first_name="Ryan", last_name="Gosling"
)
assert User.objects.get(username="a").has_colliding_name is False
assert User.objects.get(username="b").has_colliding_name is False
assert User.objects.get(username="c").has_colliding_name is False
User.objects.create(
username="d", is_author=True, first_name="Ryan", last_name="Gosling"
)
assert User.objects.get(username="a").has_colliding_name is False
assert User.objects.get(username="b").has_colliding_name is True
assert User.objects.get(username="c").has_colliding_name is False
assert User.objects.get(username="d").has_colliding_name is True
def test_user__name_collision_excludes_self_on_update():
u = User.objects.create(
username="a", is_author=True, first_name="Ryan", last_name="Gosling"
)
u.save()
assert User.objects.get(username="a").has_colliding_name is False
def test_user__sorted_default():
User.objects.create(
username="a", is_author=False, first_name="Ryan", last_name="AGosling"
)
User.objects.create(
username="b", is_author=True, first_name="Ryan", last_name="BGosling"
)
User.objects.create(
username="c", is_author=False, first_name="Ryan", last_name="CGosling"
)
assert User.objects.sorted()[0].username == "a"
def test_user__sorted_default_reversed():
User.objects.create(
username="a", is_author=False, first_name="Ryan", last_name="AGosling"
)
User.objects.create(
username="b", is_author=True, first_name="Ryan", last_name="BGosling"
)
User.objects.create(
username="c", is_author=False, first_name="Ryan", last_name="CGosling"
)
assert User.objects.sorted(reversed=True)[0].username == "c"
def test_user__sorted_last_name():
User.objects.create(
username="a", is_author=False, first_name="Ryan", last_name="AGosling"
)
User.objects.create(
username="b", is_author=True, first_name="Ryan", last_name="BGosling"
)
User.objects.create(
username="c", is_author=False, first_name="Ryan", last_name="CGosling"
)
assert User.objects.sorted(sort=AUTHOR_SORT_LAST_NAME_ID)[0].username == "a"
assert (
User.objects.sorted(sort=AUTHOR_SORT_LAST_NAME_ID, reversed=False)[0].username
== "a"
)
assert (
User.objects.sorted(sort=AUTHOR_SORT_LAST_NAME_ID, reversed=True)[0].username
== "c"
)
def test_user__sorted_total_reports():
author = User.objects.create(
username="a", is_author=True, first_name="Ryan", last_name="AGosling"
)
User.objects.create(
username="b", is_author=True, first_name="Ryan", last_name="BGosling"
)
date = arrow.get(2018, 1, 1).datetime
Report.objects.create(
id=7, author=author, date=date, published=date, body="Lorem ipsum."
)
assert User.objects.sorted(sort=AUTHOR_SORT_TOTAL_REPORTS_ID)[0].username == "a"
assert (
User.objects.sorted(sort=AUTHOR_SORT_TOTAL_REPORTS_ID, reversed=False)[
0
].username
== "a"
)
assert (
User.objects.sorted(sort=AUTHOR_SORT_TOTAL_REPORTS_ID, reversed=True)[
0
].username
== "b"
)