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