src/notes/tests/api/session.py
author ymh <ymh.work@gmail.com>
Wed, 14 Jun 2017 15:17:51 +0200
changeset 31 63be3ce389f7
child 74 043477fd5c5c
permissions -rw-r--r--
improve api
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
"""
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
Tests the core api for sessions
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
"""
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
import logging
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
from django.contrib.auth import get_user_model
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
from django.urls import reverse
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
from django.utils import timezone
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from rest_framework import status
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
from rest_framework.test import APITransactionTestCase
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
from notes.models import Session, Note
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
logger = logging.getLogger(__name__)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
class SessionApiTests(APITransactionTestCase):
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    def setUp(self):
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
        User = get_user_model()
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
        user1 = User.objects.create_user(
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
            username='test_user1',
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
            email='test_user@emial.com',
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
            password='top_secret'
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        )
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        user2 = User.objects.create_user(
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
            username='test_user2',
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
            email='test_user@emial.com',
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
            password='top_secret'
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        )
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        user3 = User.objects.create_user(
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
            username='test_user3',
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
            email='test_user@emial.com',
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
            password='top_secret'
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        )
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        self.session1 = Session.objects.create(
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
            title="a new session 1",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
            description="Description 1",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
            protocol="[]",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
            owner=user1
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        )
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        self.session2 = Session.objects.create(
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
            title="a new session 2",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
            description="Description 2",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
            protocol="[]",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
            owner=user2
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        )
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        Session.objects.create(
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
            title="a new session 3",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
            description="Description 3",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
            protocol="[]",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
            owner=user3
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        )
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        Note.objects.create(
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
            tc_start=timezone.now(),
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
            tc_end=timezone.now(),
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
            session=self.session1,
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
            plain="example note 1",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
            html="<i>example note 1</i>",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
            raw="<i>example note 1</i>",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
            margin_note="margin note 1",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
            categorization="[]"
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        )
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
        Note.objects.create(
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
            tc_start=timezone.now(),
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
            tc_end=timezone.now(),
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
            session=self.session2,
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
            plain="example note 2",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
            html="<i>example note</i>",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
            raw="<i>example note</i>",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
            margin_note="margin note",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
            categorization="[]"
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
        )
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    def test_list_session_no_user(self):
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        url = reverse('notes_api:session-list')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        response = self.client.post(url)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
    def test_list_session(self):
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
        url = reverse('notes_api:session-list')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        self.client.login(username='test_user1', password='top_secret')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        response = self.client.get(url)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
        self.assertEqual(response.status_code, status.HTTP_200_OK)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
        json = response.json()
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
        self.assertEqual(len(json), 1, "must have one session")
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
        for session in json:
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
            self.assertEqual(session['owner'], 'test_user1')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    def test_create_session_no_user(self):
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
        url = reverse('notes_api:session-list')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
        response = self.client.post(url, {
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
            'title': "a new session",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
            'description': "description of the session",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
            'protocol': "[]"
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
        }, format='json')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
    def test_create_session(self):
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
        url = reverse('notes_api:session-list')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
        self.client.login(username='test_user1', password='top_secret')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
        response = self.client.post(url, {
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
            'title': "a new session",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
            'description': "description of the session",
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
            'protocol': "[]"
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
        }, format='json')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
        json = response.json()
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
        self.assertIn('ext_id', json)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
    def test_detail_session(self):
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
        url = reverse('notes_api:session-detail', kwargs={'ext_id':str(self.session1.ext_id)})
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
        self.client.login(username='test_user1', password='top_secret')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
        response = self.client.get(url, format='json')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
        self.assertEqual(response.status_code, status.HTTP_200_OK)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
    def test_list_notes(self):
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
        url = reverse('notes_api:notes-list', kwargs={'session_ext_id':str(self.session1.ext_id)})
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
        self.client.login(username='test_user1', password='top_secret')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
        response = self.client.get(url, format='json')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
        self.assertEqual(response.status_code, status.HTTP_200_OK)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
    def test_detail_session_bad(self):
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
        url = reverse('notes_api:session-detail', kwargs={'ext_id':str(self.session2.ext_id)})
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
        self.client.login(username='test_user1', password='top_secret')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
        response = self.client.get(url, format='json')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
    def test_list_notes_bad(self):
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
        url = reverse('notes_api:notes-list', kwargs={'session_ext_id':str(self.session2.ext_id)})
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
        logger.debug("URL: %s", url)
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
        self.client.login(username='test_user1', password='top_secret')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
        response = self.client.get(url, format='json')
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
        logger.debug(response.json())
63be3ce389f7 improve api
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)