From cdd0198e0ade963f81ec9f53e1d10eb43827dece Mon Sep 17 00:00:00 2001 From: mrobota Date: Sat, 1 Jan 2022 19:22:26 +0200 Subject: [PATCH 1/3] Start test --- LogApp/settings.py | 6 +++++- Messenger/tests.py | 45 +++++++++++++++++++++++++++++++++++++- commands | 54 +++++++++++++++++++++++++--------------------- requirements.txt | 1 - 4 files changed, 79 insertions(+), 27 deletions(-) diff --git a/LogApp/settings.py b/LogApp/settings.py index 52d658d..ba5b434 100644 --- a/LogApp/settings.py +++ b/LogApp/settings.py @@ -31,7 +31,6 @@ # Application definition INSTALLED_APPS = [ - 'PricingPlans', 'django_filters', 'jet', 'rest_framework', @@ -48,6 +47,7 @@ 'Messenger.apps.MessengerConfig', 'paypal.standard', 'paypal.pro', + 'PricingPlans', ] X_FRAME_OPTIONS = 'SAMEORIGIN' MIDDLEWARE = [ @@ -151,4 +151,8 @@ }, } +PAYPAL_WPP_USER = '' +PAYPAL_WPP_PASSWORD = '' +PAYPAL_WPP_SIGNATURE = '' + from .local_settings import * diff --git a/Messenger/tests.py b/Messenger/tests.py index 7ce503c..6bb6f1d 100644 --- a/Messenger/tests.py +++ b/Messenger/tests.py @@ -1,3 +1,46 @@ +from django.conf import settings from django.test import TestCase +from rest_framework import status +from rest_framework.test import APIClient +from utils.helpers_for_tests import create_user, dump, login_user +from Messenger.models import GroupChat -# Create your tests here. +class GroupChatTest(TestCase): + + def setUp(self): + self.c = APIClient() + + self.adminMax = create_user('admin@max') + self.adminKoly = create_user('admin@koly') + self.groupChat = GroupChat.objects.create( + name='test group chat', + description='description test', + owner=self.adminMax, + participants=[self.adminMax, self.adminKoly], + image=None + ) + + def test_empty_get(self): + self.assertEqual(1, 1) + + def test_unauth_restriction(self): + response = self.c.get('/messenger/') + # print(dir(status)) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + def test_auth_list(self): + login_user(self.c, self.adminMax) + response = self.c.get('/group-chat/') + # print(dir(status)) + # dump(response) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data, [ + { + 'id': self.groupChat.id, + 'name': 'test group chat', + 'description': "description test", + 'owner': self.adminMax, + 'participants': [self.adminMax, self.adminKoly], + 'image': None + } + ]) diff --git a/commands b/commands index a9490c2..af1af34 100644 --- a/commands +++ b/commands @@ -4,12 +4,22 @@ Ubuntu: -Install pip3, DB: sudo apt-get update sudo apt-get -y install python3-pip - sudo apt-get install --reinstall libpq-dev - pip3 install psycopg2 --Install Django: - sudo pip3 install django==3.2 + -Package install: + source ~/HillelProjects/log_app/venv/bin/activate + pip3 install -U --upgrade pip pip3 install -r requirements.txt + *pip3 freeze|grep -i psycopg2 >> requirements.txt + +-Postgres: + sudo apt-get install --reinstall libpq-dev + sudo apt install postgresql postgresql-contrib + pip3 install psycopg2 + + DB console: + sudo -u postgres psql + create user test_admin with password 'admin1234'; + create database log_app owner test_admin; -DB: python3 manage.py makemigrations @@ -19,12 +29,16 @@ Ubuntu: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Start local server: - export PATH=$PATH:$HOME/Downloads/redis-stable/src - redis-server --port 6379 - python3 manage.py runserver + Net console: + sudo apt install redis-server + export PATH=$PATH:$HOME/Downloads/redis-stable/src + redis-server --port 6379 + Another console: + python3 manage.py runserver !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Start test: + sudo apt install python-pytest pytest test_main.py -s JET: @@ -52,17 +66,6 @@ Rest: https://www.django-rest-framework.org/api-guide/generic-views/#generic-views https://www.django-rest-framework.org/tutorial/1-serialization/ -Postgres: - sudo apt-get install --reinstall libpq-dev - pip3 install psycopg2 - - DB console: - sudo -u postgres psql - create user test_admin with password 'admin1234'; - create database log_app owner test_admin; - - python3 manage.py migrate - Additional commands: python3 manage.py startapp messenger - Add new module @@ -86,9 +89,12 @@ Add WS: export PATH=$PATH:$HOME/Downloads/redis-stable/src redis-server --port 6379 +Add static fields for Jet.js etc: + Add in settings: STATIC_ROOT = 'public/static/' + python3 manage.py collectstatic + !!!! nginx + supervisor + uwsgi + django !!!! Add uWSGI: - source ~/HillelProjects/log_app/env/bin/activate pip3 install uWSGI pip3 freeze|grep -i uwsgi >> requirements.txt @@ -106,11 +112,11 @@ Add Supervisor: * sudo service supervisor stop Start nginx + supervisor+uwsgi+django: - *maxim1106 - - mkdir -p /home/maxim1106/HillelProjects/log_app/logs + *max - + mkdir -p /home/max/HillelProjects/log_app/logs uWSGI: - sudo ln -s /home/maxim1106/HillelProjects/log_app/supervisor/production.conf /etc/supervisor/conf.d/log_app.conf + sudo ln -s /home/max/HillelProjects/log_app/supervisor/production.conf /etc/supervisor/conf.d/log_app.conf sudo supervisorctl update sudo supervisorctl status @@ -121,9 +127,9 @@ Start nginx + supervisor+uwsgi+django: * sudo supervisorctl restart all Nginx: - sudo ln -s /home/maxim1106/HillelProjects/log_app/nginx/production.conf /etc/nginx/sites-enabled/log_app.conf + sudo ln -s /home/max/HillelProjects/log_app/nginx/production.conf /etc/nginx/sites-enabled/log_app.conf sudo nginx -t sudo nginx -s reload * ps -ef | grep nginx - * service nginx start \ No newline at end of file + * sudo service nginx start \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 468b32f..29d2bc0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,6 @@ psycopg2-binary==2.8.4 dj-database-url==0.5.0 gunicorn==20.0.4 whitenoise==5.0.1 -django-filters==0.1.0 django-filter==21.1 channels==2.4.0 channels-redis==2.4.2 From 055953587539e7f9f0d766af6a464d934d2dc4d2 Mon Sep 17 00:00:00 2001 From: mrobota Date: Tue, 4 Jan 2022 19:33:44 +0200 Subject: [PATCH 2/3] Added tests for Messenger --- Messenger/tests.py | 67 +++++++++++++++++++++++++++++++++-------- Notifications/models.py | 4 +-- commands | 5 +++ 3 files changed, 62 insertions(+), 14 deletions(-) diff --git a/Messenger/tests.py b/Messenger/tests.py index 6bb6f1d..f438a85 100644 --- a/Messenger/tests.py +++ b/Messenger/tests.py @@ -1,46 +1,89 @@ -from django.conf import settings from django.test import TestCase from rest_framework import status from rest_framework.test import APIClient from utils.helpers_for_tests import create_user, dump, login_user -from Messenger.models import GroupChat +from Messenger.models import GroupChat, Message +from datetime import datetime class GroupChatTest(TestCase): def setUp(self): self.c = APIClient() - self.adminMax = create_user('admin@max') self.adminKoly = create_user('admin@koly') self.groupChat = GroupChat.objects.create( name='test group chat', description='description test', owner=self.adminMax, - participants=[self.adminMax, self.adminKoly], image=None ) + self.groupChat.participants.set([self.adminMax, self.adminKoly]) def test_empty_get(self): self.assertEqual(1, 1) def test_unauth_restriction(self): - response = self.c.get('/messenger/') - # print(dir(status)) + response = self.c.get('/messenger/group-chat/') + print(dir(status)) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - def test_auth_list(self): + def test_group_chat_list(self): login_user(self.c, self.adminMax) - response = self.c.get('/group-chat/') - # print(dir(status)) - # dump(response) + response = self.c.get('/messenger/group-chat/') + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data[0]['owner']['id'], self.adminMax.id) + self.assertEqual(response.data[0]['participants'][0]['id'], self.adminKoly.id) + self.assertEqual(response.data[0]['participants'][1]['id'], self.adminMax.id) self.assertEqual(response.data, [ { 'id': self.groupChat.id, 'name': 'test group chat', 'description': "description test", - 'owner': self.adminMax, - 'participants': [self.adminMax, self.adminKoly], + 'owner': response.data[0]['owner'], + 'participants': response.data[0]['participants'], 'image': None } ]) + + +class MessageTest(TestCase): + + def setUp(self): + self.c = APIClient() + self.adminMax = create_user('admin@max') + self.adminKoly = create_user('admin@koly') + self.groupChat = GroupChat.objects.create( + name='test group chat', + description='description test', + owner=self.adminMax, + image=None + ) + self.groupChat.participants.set([self.adminMax, self.adminKoly]) + self.message = Message.objects.create( + group_chat=self.groupChat, + sender=self.adminMax, + recipient=self.adminKoly, + timestamp=datetime.now(), + body='Hello friend', + is_read=False + ) + + def test_message_list(self): + login_user(self.c, self.adminMax) + response = self.c.get(f'/messenger/message/?group_chat_id={self.message.id}') + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data[0]['sender']['id'], self.adminMax.id) + self.assertEqual(response.data[0]['recipient']['id'], self.adminKoly.id) + + self.assertEqual(response.data, [ + { + 'id': self.message.id, + 'group_chat': self.groupChat.id, + 'sender': response.data[0]['sender'], + 'recipient': response.data[0]['recipient'], + 'timestamp': response.data[0]['timestamp'], + 'body': 'Hello friend', + 'is_read': False + } + ]) diff --git a/Notifications/models.py b/Notifications/models.py index 98d3481..2840f1a 100644 --- a/Notifications/models.py +++ b/Notifications/models.py @@ -2,8 +2,8 @@ from django.utils import timezone from django.contrib.auth.models import User -class Notification(models.Model): +class Notification(models.Model): EMAIL_NTF = "email" SMS_NTF = "sms" NTF_TYPE = [ @@ -19,4 +19,4 @@ class Notification(models.Model): message = models.CharField(max_length=999) recipient = models.ForeignKey(User, related_name="ntf_to", on_delete=models.CASCADE, null=True) owner = models.ForeignKey(User, related_name="ntf_from", on_delete=models.CASCADE, null=True) - date = models.DateTimeField(default=timezone.now) \ No newline at end of file + date = models.DateTimeField(default=timezone.now) diff --git a/commands b/commands index af1af34..bdb0eb6 100644 --- a/commands +++ b/commands @@ -20,6 +20,7 @@ Ubuntu: sudo -u postgres psql create user test_admin with password 'admin1234'; create database log_app owner test_admin; + *ALTER USER user CREATEDB; // for tests -DB: python3 manage.py makemigrations @@ -40,6 +41,10 @@ Start local server: Start test: sudo apt install python-pytest pytest test_main.py -s + or + ./manage.py test + or + python3 manage.py test JET: https://pypi.org/project/django-3-jet/ From 3f6a4034de2ae172152caba2fd4131a74e28c370 Mon Sep 17 00:00:00 2001 From: mrobota Date: Wed, 5 Jan 2022 21:36:13 +0200 Subject: [PATCH 3/3] Added tests for Messenger --- Messenger/tests.py | 5 +++-- PricingPlans/models.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Messenger/tests.py b/Messenger/tests.py index f438a85..8c29f9a 100644 --- a/Messenger/tests.py +++ b/Messenger/tests.py @@ -5,6 +5,7 @@ from Messenger.models import GroupChat, Message from datetime import datetime + class GroupChatTest(TestCase): def setUp(self): @@ -22,7 +23,7 @@ def setUp(self): def test_empty_get(self): self.assertEqual(1, 1) - def test_unauth_restriction(self): + def test_unauthorised_restriction(self): response = self.c.get('/messenger/group-chat/') print(dir(status)) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) @@ -71,7 +72,7 @@ def setUp(self): def test_message_list(self): login_user(self.c, self.adminMax) - response = self.c.get(f'/messenger/message/?group_chat_id={self.message.id}') + response = self.c.get(f'/messenger/message/?group_chat_id={self.groupChat.id}') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data[0]['sender']['id'], self.adminMax.id) self.assertEqual(response.data[0]['recipient']['id'], self.adminKoly.id) diff --git a/PricingPlans/models.py b/PricingPlans/models.py index 9cad028..1a69a24 100644 --- a/PricingPlans/models.py +++ b/PricingPlans/models.py @@ -15,6 +15,6 @@ class PricePlanTypes(models.Model): (PricePlanTypes.pro, 'Pro Plan'), (PricePlanTypes.vip, 'Vip Plan'), ] - payment_time = models.DateTimeField('payment time', default=django.utils.timezone.now()) + payment_time = models.DateTimeField('payment time', default=django.utils.timezone.now) payer = models.ForeignKey(User, on_delete=models.CASCADE) plan_type = models.CharField(max_length=100, choices=plans)