Skip to content
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

API endpoint for adding a new log record. #9

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
@@ -0,0 +1 @@
*.pyc
9 changes: 9 additions & 0 deletions eventlog/serializers.py
@@ -0,0 +1,9 @@
from rest_framework import serializers

from .models import Log


class LogSerializer(serializers.ModelSerializer):
class Meta:
model = Log
fields = ('user', 'action', 'extra', )
52 changes: 52 additions & 0 deletions eventlog/tests.py
@@ -0,0 +1,52 @@
from django.test import TestCase
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse

from rest_framework.test import APIRequestFactory

from eventlog.views import LogEventCreate
from eventlog.models import Log


class TestAPI(TestCase):
def setUp(self):
# Simple mocking data
self.action = "action"
self.extra_first = "first"
self.extra_second = "second"
self.user = User.objects.create(username="username",
password="password",
email="eldarion@eldarion.com")
self.log = {
"user": User.objects.get(username="username").id,
"action": self.action,
"extra": {
"first": self.extra_first,
"second": self.extra_second,
}
}

def tearDown(self):
# Destroy the created user for `setUp` method
User.objects.get(username='username').delete()

def test_log_create(self):
"""
Test the API for creating a event log item
"""
url = reverse("eventlog_api_add")
factory = APIRequestFactory()
view = LogEventCreate.as_view()

# Using `json` because of `JSONRenderer` used by `LogEventCreate` view
request = factory.post(url, self.log, format="json")
response = view(request)

self.assertEqual(response.status_code, 201)

# Making sure `Log` item has been created
log = Log.objects.all()[0]

self.assertEqual(log.user, self.user)
self.assertEqual(log.action, self.action)
self.assertEqual(log.extra, self.log['extra'])
7 changes: 7 additions & 0 deletions eventlog/urls.py
@@ -0,0 +1,7 @@
from django.conf.urls import patterns, url

from . import views


urlpatterns = patterns('',
url(r'^api/add/', views.LogEventCreate.as_view(), name='eventlog_api_add'),)
11 changes: 11 additions & 0 deletions eventlog/views.py
@@ -0,0 +1,11 @@
from rest_framework.generics import CreateAPIView
from rest_framework.renderers import JSONRenderer

from .models import Log
from .serializers import LogSerializer


class LogEventCreate(CreateAPIView):
model = Log
serializer_class = LogSerializer
renderer_classes = (JSONRenderer, )
56 changes: 56 additions & 0 deletions runtests.py
@@ -0,0 +1,56 @@
#!/usr/bin/env python
import os
import sys

import django

from django.conf import settings


DEFAULT_SETTINGS = dict(
INSTALLED_APPS=[
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sites",
"eventlog",
"rest_framework",
],
DATABASES={
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": ":memory:",
}
},
SITE_ID=1,
SECRET_KEY="notasecret",
ROOT_URLCONF="eventlog.urls",
)


def runtests(*test_args):
if not settings.configured:
settings.configure(**DEFAULT_SETTINGS)

# Compatibility with Django 1.7's stricter initialization
if hasattr(django, "setup"):
django.setup()

parent = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, parent)

try:
from django.test.runner import DiscoverRunner
runner_class = DiscoverRunner
test_args = ["eventlog.tests"]
except ImportError:
from django.test.simple import DjangoTestSuiteRunner
runner_class = DjangoTestSuiteRunner
test_args = ["tests"]

failures = runner_class(
verbosity=1, interactive=True, failfast=False).run_tests(test_args)
sys.exit(failures)


if __name__ == "__main__":
runtests(*sys.argv[1:])
3 changes: 2 additions & 1 deletion setup.py
Expand Up @@ -132,7 +132,8 @@ def find_package_data(
"Framework :: Django",
],
install_requires=[
"django-jsonfield>=0.8.11"
"django-jsonfield>=0.8.11",
"djangorestframework==2.4.1",
],
zip_safe=False
)