Skip to content
This repository was archived by the owner on Apr 16, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tests/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@


class BaseTestCase(APITestCase):
longMessage = True
url_namespace = 'v3'
default_password = '123'
IPS = {
Expand Down
246 changes: 246 additions & 0 deletions tests/v3/test_pages.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,246 @@
# -*- coding: utf-8 -*-
from django.contrib.auth import get_user_model

from django_dynamic_fixture import G, N

from common.constants import USER_TYPE_PAGE
from shoutit.models import Page, PageCategory
from tests.base import BaseTestCase


class BasePageTestCase(BaseTestCase):
@classmethod
def create_page(cls):
cls.user = cls.create_user()
cls.pageuser = N(
get_user_model(),
type=USER_TYPE_PAGE,
username='pageuser',
first_name='Paige',
is_test=True,
is_active=True,
is_activated=True,
email='page@example.com',
)
cls.pagecategory = PageCategory.objects.get(slug='local-business')
cls.pageuser.page_fields = {
'name': 'New Page',
'creator': cls.user,
'category': cls.pagecategory,
'country': 'AE',
'is_published': True,
'is_verified': True,
}
cls.pageuser.set_password(cls.default_password)
cls.pageuser.save()

def get_page_url(self):
return self.reverse(getattr(self, 'url_name'), kwargs={'username': self.pageuser.username})


class PageListTestCase(BasePageTestCase):
url_name = 'page-list'

@classmethod
def setUpTestData(cls):
cls.create_page()

cls.pageuser2 = N(
get_user_model(),
type=USER_TYPE_PAGE,
username='pageuser2',
first_name='Paul',
is_active=True,
is_activated=True,
)
cls.pageuser2.page_fields = {
'name': 'Totally different page',
'creator': cls.pageuser2,
'category': cls.pagecategory,
'country': 'DE',
'is_published': True,
'is_verified': True,
}
cls.pageuser2.save()

def test_noauth_nodata(self):
resp = self.client.post(self.reverse(self.url_name))
self.assert401(resp)

def test_create_page(self):
self.login(self.user)
data = {
'page_name': 'Super New Page',
'page_category': {
'slug': 'local-business',
}
}
page_count_pre = Page.objects.count()
resp = self.client.post(self.reverse(self.url_name), data)
self.assert201(resp)
self.assertEqual(
Page.objects.count(),
page_count_pre + 1,
msg='After the post there should be one more page in the database.'
)

def test_list_page(self):
resp = self.client.get(self.reverse(self.url_name))
self.assert200(resp)
self.assertEqual(
len(self.decode_json(resp)['results']), 2,
msg='There should be two pages in the results.'
)

data = {
'country': 'AE'
}
resp = self.client.get(self.reverse(self.url_name), data)
self.assert200(resp)
self.assertEqual(
len(self.decode_json(resp)['results']), 1,
msg='There should be one page in the results.'
)


class PageCategoriesTestCase(BaseTestCase):
url_name = 'page-categories'

def test_list_categories(self):
resp = self.client.get(self.reverse(self.url_name))
category_count = PageCategory.objects.root_nodes().count()
self.assert200(resp)
self.assertEqual(
len(self.decode_json(resp)), category_count,
msg='There should be {0} categories in the results. {1}'.format(
category_count, self.decode_json(resp)
)
)


class PageAdminAddRemoveTestCase(BasePageTestCase):
url_name = 'page-admin'

@classmethod
def setUpTestData(cls):
cls.user2 = cls.create_user(
username='user2',
first_name='Two',
)
cls.create_page()

def test_unauth_nodata(self):
resp = self.client.post(self.get_page_url())
self.assert401(resp)

def test_add_delete_admin(self):
self.login(self.user)
data = {
'profile': {
'id': self.user2.id
}
}
resp = self.client.post(self.get_page_url(), data)
self.assert200(resp)
self.assertIn(
self.user2,
[pa.admin for pa in self.pageuser.page.pageadmin_set.all()],
msg='User 2 should now be one of the page admins.'
)

resp = self.client.delete(self.get_page_url(), data)
self.assert200(resp)
self.assertNotIn(
self.user2,
[pa.admin for pa in self.pageuser.page.pageadmin_set.all()],
msg='User 2 should no longer be one of the page admins.'
)


class PageAdminsListTestCase(BasePageTestCase):
url_name = 'page-admins'

@classmethod
def setUpTestData(cls):
cls.create_page()

def test_list(self):
resp = self.client.get(self.get_page_url())
self.assert200(resp)
self.assertEqual(
len(self.decode_json(resp)['results']),
1,
msg='The results should contain one admin.'
)


class PageBusinessVerificationTestCase(BasePageTestCase):
url_name = 'page-verification'

@classmethod
def setUpTestData(cls):
cls.create_page()

def test_noauth_nodata(self):
resp = self.client.post(self.get_page_url())
self.assert401(resp)

self.login(self.pageuser)
resp = self.client.post(self.get_page_url(), {
"business_name": "Super Plumbing Bros",
"business_email": "sb@example.com",
"contact_person": "Mario Mario",
"contact_number": "+491234567890",
"images": []
})
self.assert200(resp)
self.client.logout()

# TODO should this really be possible? You could read out business information of all pages via public API like this.
resp = self.client.get(self.get_page_url())
self.assert200(resp)
self.assertEqual(
self.decode_json(resp).get('status', ''),
'Waiting',
msg='Calling the view with GET, it should return the status of the verification.',
)

def test_verification(self):
self.login(self.user)

resp = self.client.get(self.get_page_url())
self.assert200(resp)
self.assertEqual(
self.decode_json(resp).get('status', ''),
'Not submitted',
msg='Calling the view with GET, it should return the status of the verification.',
)

data = {
"business_name": "Super Plumbing Bros",
"business_email": "sb@example.com",
"contact_person": "Mario Mario",
"contact_number": "+491234567890",
"images": []
}

resp = self.client.post(self.get_page_url(), data)
self.assert200(resp)
self.assertEqual(
data['business_name'],
self.decode_json(resp).get('business_name', ''),
msg='The response should include the business name',
)
self.assertEqual(
self.decode_json(resp).get('status', ''),
'Waiting',
msg='The response should include the status "Waiting".',
)

resp = self.client.get(self.get_page_url())
self.assert200(resp)
self.assertEqual(
self.decode_json(resp).get('status', ''),
'Waiting',
msg='Calling the view with GET, it should return the status of the verification.',
)