Compare commits
	
		
			15 Commits
		
	
	
		
			0.1.2
			...
			64c0c5f8e6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 64c0c5f8e6 | |||
| 18a597c726 | |||
| 
						 | 
					baca596603 | ||
| d993387216 | |||
| aed2856df3 | |||
| c78858c152 | |||
| f49581259e | |||
| f5bf642cd6 | |||
| 7687acb366 | |||
| e655e1598a | |||
| 64ed38332f | |||
| d438303aec | |||
| 38b3736951 | |||
| 6be060ea40 | |||
| 5c5756150f | 
							
								
								
									
										6
									
								
								Pipfile
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								Pipfile
									
									
									
									
									
								
							@@ -11,6 +11,7 @@ pipenv = "*"
 | 
			
		||||
wheel = "*"
 | 
			
		||||
twine = "*"
 | 
			
		||||
pandoc ="*"
 | 
			
		||||
pylint-django ="*"
 | 
			
		||||
 | 
			
		||||
[packages]
 | 
			
		||||
django = "*"
 | 
			
		||||
@@ -18,6 +19,7 @@ easy-thumbnails = "*"
 | 
			
		||||
image = "*"
 | 
			
		||||
django-widget-tweaks = "*"
 | 
			
		||||
django-taggit = "*"
 | 
			
		||||
 | 
			
		||||
# Commented out to not explicitly specify Python 3 subversion.
 | 
			
		||||
# [requires]
 | 
			
		||||
# python_version = "3.8"
 | 
			
		||||
[requires]
 | 
			
		||||
python_version = "3.7"
 | 
			
		||||
 
 | 
			
		||||
@@ -6,15 +6,15 @@
 | 
			
		||||
from django.contrib import admin
 | 
			
		||||
from django.contrib.auth import get_user_model
 | 
			
		||||
from django.contrib.auth.admin import UserAdmin
 | 
			
		||||
from .models import *
 | 
			
		||||
from lostplaces_app.models import *
 | 
			
		||||
 | 
			
		||||
from .forms import ExplorerCreationForm, ExplorerChangeForm
 | 
			
		||||
from lostplaces_app.forms import ExplorerCreationForm, ExplorerChangeForm
 | 
			
		||||
 | 
			
		||||
# Register your models here.
 | 
			
		||||
 | 
			
		||||
class VoucherAdmin(admin.ModelAdmin):
 | 
			
		||||
    fields = ['code', 'expires', 'created']
 | 
			
		||||
    readonly_fields = ['created']
 | 
			
		||||
    fields = ['code', 'expires_when', 'created_when']
 | 
			
		||||
    readonly_fields = ['created_when']
 | 
			
		||||
 | 
			
		||||
admin.site.register(Explorer)
 | 
			
		||||
admin.site.register(Voucher, VoucherAdmin)
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ class Explorer(models.Model):
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.user.name
 | 
			
		||||
        return self.user.username
 | 
			
		||||
        
 | 
			
		||||
@receiver(post_save, sender=User)
 | 
			
		||||
def create_user_profile(sender, instance, created, **kwargs):
 | 
			
		||||
@@ -54,11 +54,11 @@ class Voucher(models.Model):
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    code = models.CharField(unique=True, max_length=30)
 | 
			
		||||
    created = models.DateTimeField(auto_now_add=True)
 | 
			
		||||
    expires = models.DateField()
 | 
			
		||||
    created_when = models.DateTimeField(auto_now_add=True)
 | 
			
		||||
    expires_when = models.DateTimeField()
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return "Voucher " + str(self.pk)
 | 
			
		||||
        return "Voucher " + str(self.code)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Place (models.Model):
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,11 @@
 | 
			
		||||
from django.db import models as django_models
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
 | 
			
		||||
class BaseData(TestCase):
 | 
			
		||||
 | 
			
		||||
def mock_user():
 | 
			
		||||
    explorer_list =  User.objects.all()
 | 
			
		||||
    if len(explorer_list) <= 0:
 | 
			
		||||
        return User.objects.create_user(
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def setUpTestData(cls):
 | 
			
		||||
        User.objects.create_user(
 | 
			
		||||
            username='testpeter',
 | 
			
		||||
            password='Develop123'
 | 
			
		||||
        )
 | 
			
		||||
    else:
 | 
			
		||||
        return explorer_list[0]
 | 
			
		||||
        ).save()
 | 
			
		||||
@@ -1,50 +1,98 @@
 | 
			
		||||
from django.db import models
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from django.core.exceptions import FieldDoesNotExist
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
 | 
			
		||||
class TestModel:
 | 
			
		||||
# Creating a test user
 | 
			
		||||
 | 
			
		||||
class ModelTestCase:
 | 
			
		||||
    '''
 | 
			
		||||
    Base class for Lostplaces models
 | 
			
		||||
    '''
 | 
			
		||||
    model = None
 | 
			
		||||
    model_name = None
 | 
			
		||||
 | 
			
		||||
    def _test_field(self, field_name, field_class):
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.object = self.model.objects.get(id=1)
 | 
			
		||||
        self.model_name = type(self.model).__name__
 | 
			
		||||
 | 
			
		||||
    def _test_field(self, field_name, field_class, must_have={}, must_not_have={}):
 | 
			
		||||
        '''
 | 
			
		||||
        Tests if a field exists under the given name and
 | 
			
		||||
        if the field is of the right type
 | 
			
		||||
        if the field is of the right type.
 | 
			
		||||
        Also checks if the field has the given must_have attributes
 | 
			
		||||
        and does not have any of the must_not_have attributes. If you
 | 
			
		||||
        dont care about the value of the attribute you can just set it to 
 | 
			
		||||
        something that fullfills value == False (i.e. '' or 0)
 | 
			
		||||
        '''
 | 
			
		||||
        try:
 | 
			
		||||
            field = self.object._meta.get_field(field_name)
 | 
			
		||||
        self.assertTrue(
 | 
			
		||||
            field,
 | 
			
		||||
            msg="%s has no field named '%s'" % (
 | 
			
		||||
        except FieldDoesNotExist:
 | 
			
		||||
            self.fail(
 | 
			
		||||
                'Expecting %s to have a field named \'%s\'' % (
 | 
			
		||||
                    self.model_name,
 | 
			
		||||
                    field_name
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            type(field), field_class,
 | 
			
		||||
            msg='%s.%s name field is no CharField' % (
 | 
			
		||||
            msg='Expecting type of %s.%s to be %s' % (
 | 
			
		||||
                self.model_name,
 | 
			
		||||
                field_name
 | 
			
		||||
                field_name,
 | 
			
		||||
                field_class.__name__
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        for key, value in must_have.items():
 | 
			
		||||
            if value:
 | 
			
		||||
                self.assertEqual(getattr(field, key), value,
 | 
			
		||||
                    msg='Expeting %s.%s.%s to be \'%s\'' % (
 | 
			
		||||
                        self.model_name,
 | 
			
		||||
                        field_name,
 | 
			
		||||
                        key,
 | 
			
		||||
                        value
 | 
			
		||||
                    )
 | 
			
		||||
                )
 | 
			
		||||
            else:
 | 
			
		||||
                self.assertTrue(hasattr(field, key),
 | 
			
		||||
                    msg='Expeting %s.%s to have \'%s\'' % (
 | 
			
		||||
                        self.model_name,
 | 
			
		||||
                        field_name,
 | 
			
		||||
                        key
 | 
			
		||||
                    )
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
        for key, value in must_not_have.items():
 | 
			
		||||
            if value:
 | 
			
		||||
                self.assertTrue(getattr(field, key) != value,
 | 
			
		||||
                    msg='Expeting %s.%s.%s to not be \'%s\'' % (
 | 
			
		||||
                        self.model_name,
 | 
			
		||||
                        field_name,
 | 
			
		||||
                        key,
 | 
			
		||||
                        value
 | 
			
		||||
                    )
 | 
			
		||||
                )
 | 
			
		||||
            else:
 | 
			
		||||
                self.assertFalse(hasattr(field, value),
 | 
			
		||||
                    msg='Expeting %s.%s to not have \'%s\'' % (
 | 
			
		||||
                        self.model_name,
 | 
			
		||||
                        field_name,
 | 
			
		||||
                        key
 | 
			
		||||
                    )
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
        return field
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def _test_char_field(self, field_name, min_length, max_length):
 | 
			
		||||
    def _test_char_field(self, field_name, min_length, max_length, must_have={}, must_hot_have={}):
 | 
			
		||||
        '''
 | 
			
		||||
        Tests if the given field is a char field and if its max_length
 | 
			
		||||
        is in min_length and max_legth
 | 
			
		||||
        '''
 | 
			
		||||
        field = self._test_field(field_name, models.CharField)
 | 
			
		||||
        self.assertEqual(
 | 
			
		||||
            type(field), models.CharField, 
 | 
			
		||||
            msg='%s.%s name field is no CharField' % (
 | 
			
		||||
                self.model_name,
 | 
			
		||||
                field_name
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        field = self._test_field(
 | 
			
		||||
            field_name, models.CharField, must_have, must_hot_have)
 | 
			
		||||
        self.assertTrue(
 | 
			
		||||
            field.max_length in range(min_length, max_length),
 | 
			
		||||
            msg='%s.%s field max_length not in range of %d and %d' % (
 | 
			
		||||
            msg='Expeting %s.%s field max_length to be in the range of %d and %d' % (
 | 
			
		||||
                self.model_name,
 | 
			
		||||
                field_name,
 | 
			
		||||
                min_length,
 | 
			
		||||
@@ -52,7 +100,7 @@ class TestModel:
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def _test_float_field(self, field_name, min_value=None, max_value=None):
 | 
			
		||||
    def _test_float_field(self, field_name, min_value=None, max_value=None, must_have={}, must_hot_have={}):
 | 
			
		||||
        '''
 | 
			
		||||
        Tests if the field is a floatfield. If min_value and/or max_value are passed,
 | 
			
		||||
        the validators of the field are also checked. The validator list of the field should
 | 
			
		||||
@@ -61,11 +109,12 @@ class TestModel:
 | 
			
		||||
        [MinValueValidator] if only min_value is passed,
 | 
			
		||||
        [MaxValueValidator] if only max_value is passed
 | 
			
		||||
        '''
 | 
			
		||||
        field = self._test_field(field_name, models.FloatField)
 | 
			
		||||
        field = self._test_field(
 | 
			
		||||
            field_name, models.FloatField, must_have, must_hot_have)
 | 
			
		||||
        if min_value:
 | 
			
		||||
            self.assertTrue(
 | 
			
		||||
                len(field.validators) >= 1,
 | 
			
		||||
                msg='%s.%s first validator should check minimum' % (
 | 
			
		||||
                msg='Expecting the first valiator of %s.%s to check the minimum' % (
 | 
			
		||||
                    self.model_name,
 | 
			
		||||
                    field_name
 | 
			
		||||
                )
 | 
			
		||||
@@ -73,9 +122,10 @@ class TestModel:
 | 
			
		||||
            self.assertEqual(
 | 
			
		||||
                field.validators[0].limit_value,
 | 
			
		||||
                min_value,
 | 
			
		||||
                msg='%s.%s min value missmatch' % (
 | 
			
		||||
                msg='Expecting the min value of %s.%s min to be at least %d' % (
 | 
			
		||||
                    self.model_name,
 | 
			
		||||
                    field_name
 | 
			
		||||
                    field_name,
 | 
			
		||||
                    min_value
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
        if max_value:
 | 
			
		||||
@@ -84,7 +134,7 @@ class TestModel:
 | 
			
		||||
                index += 1
 | 
			
		||||
            self.assertTrue(
 | 
			
		||||
                len(field.validators) >= index+1,
 | 
			
		||||
                msg='%s.%s second validator should check maximum' % (
 | 
			
		||||
                msg='Expecting the second valiator of %s.%s to check the maximum' % (
 | 
			
		||||
                    self.model_name,
 | 
			
		||||
                    field_name
 | 
			
		||||
                )
 | 
			
		||||
@@ -92,30 +142,33 @@ class TestModel:
 | 
			
		||||
            self.assertEqual(
 | 
			
		||||
                field.validators[1].limit_value,
 | 
			
		||||
                max_value,
 | 
			
		||||
                msg='%s.%s max value missmatch' % (
 | 
			
		||||
                msg='Expecting the max value of %s.%s min to be at most %d' % (
 | 
			
		||||
                    self.model_name,
 | 
			
		||||
                    field_name
 | 
			
		||||
                    field_name,
 | 
			
		||||
                    max_value
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
class TestSubmittable(TestModel):
 | 
			
		||||
 | 
			
		||||
class SubmittableTestCase(ModelTestCase):
 | 
			
		||||
    model_name = '<Class>'
 | 
			
		||||
    related_name = None
 | 
			
		||||
    nullable = False
 | 
			
		||||
 | 
			
		||||
    def test_submitted_when(self):
 | 
			
		||||
        submitted_when = self._test_field('submitted_when', models.DateTimeField)
 | 
			
		||||
        self.assertTrue(submitted_when.auto_now_add, 
 | 
			
		||||
            msg='%s.submitted_when should be auto_now_add' % (
 | 
			
		||||
                self.model_name
 | 
			
		||||
            )
 | 
			
		||||
        submitted_when = self._test_field(
 | 
			
		||||
            'submitted_when',
 | 
			
		||||
            models.DateTimeField,
 | 
			
		||||
            must_have={'auto_now_add': True}
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_submitted_by(self):
 | 
			
		||||
        submitted_by = self._test_field('submitted_by', models.ForeignKey)
 | 
			
		||||
        if self.related_name:
 | 
			
		||||
            self.assertEqual(submitted_by.remote_field.related_name, self.related_name)
 | 
			
		||||
            self.assertEqual(
 | 
			
		||||
                submitted_by.remote_field.related_name, self.related_name)
 | 
			
		||||
        if self.nullable:
 | 
			
		||||
            self.assertTrue(submitted_by.null,)
 | 
			
		||||
            self.assertTrue(submitted_by.blank)
 | 
			
		||||
            self.assertEqual(submitted_by.remote_field.on_delete, models.SET_NULL)
 | 
			
		||||
            self.assertEqual(
 | 
			
		||||
                submitted_by.remote_field.on_delete, models.SET_NULL)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								lostplaces/lostplaces_app/tests/models/im_a_image.jpeg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lostplaces/lostplaces_app/tests/models/im_a_image.jpeg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 81 KiB  | 
@@ -0,0 +1,58 @@
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
from django.db import models
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
 | 
			
		||||
from lostplaces_app.models import Explorer
 | 
			
		||||
 | 
			
		||||
class ExplorerTestCase(TestCase):
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def setUpTestData(self):
 | 
			
		||||
        User.objects.create_user(
 | 
			
		||||
            username='testpeter',
 | 
			
		||||
            password='Develop123'
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_epxlorer_creation(self):
 | 
			
		||||
        '''
 | 
			
		||||
        Tests if the explorer profile will be automticly
 | 
			
		||||
        created when a user is created
 | 
			
		||||
        '''
 | 
			
		||||
        
 | 
			
		||||
        user = User.objects.get(id=1)
 | 
			
		||||
        explorer_list = Explorer.objects.all()
 | 
			
		||||
        self.assertTrue(len(explorer_list) > 0,
 | 
			
		||||
            msg='Expecting at least one Exlorer object, none found'
 | 
			
		||||
        )
 | 
			
		||||
        self.assertTrue(hasattr(user, 'explorer'),
 | 
			
		||||
            msg='''Expecting the User instance to have an \'explorer\' attribute. 
 | 
			
		||||
            Check the Explorer model and the related name.'''
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
        explorer = Explorer.objects.get(id=1)
 | 
			
		||||
        self.assertEqual(explorer, user.explorer,
 | 
			
		||||
            msg='''The Explorer object of the User did not match.
 | 
			
		||||
            Expecting User with id 1 to have Explorer with id 1'''
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
        explorer = Explorer.objects.get(id=1)
 | 
			
		||||
        self.assertEqual(explorer.user, user,
 | 
			
		||||
            msg='''The User object of the Explorer did not match.
 | 
			
		||||
            Expecting Explorer with id 1 to have User with id 1'''
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
    def test_explorer_deletion(self):
 | 
			
		||||
        '''
 | 
			
		||||
        Tests if the Explorer objects get's deleted when the User instance is deleted
 | 
			
		||||
        '''
 | 
			
		||||
        
 | 
			
		||||
        user = User.objects.get(username='testpeter')
 | 
			
		||||
        explorer_id = user.explorer.id
 | 
			
		||||
        user.delete()
 | 
			
		||||
        with self.assertRaises(models.ObjectDoesNotExist,
 | 
			
		||||
            msg='Expecting explorer objec to be deleted when the corresponding User object is deleted'
 | 
			
		||||
            ):
 | 
			
		||||
            Explorer.objects.get(id=explorer_id)
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
    
 | 
			
		||||
@@ -1,32 +1,56 @@
 | 
			
		||||
import datetime
 | 
			
		||||
import os
 | 
			
		||||
import shutil
 | 
			
		||||
from unittest import mock
 | 
			
		||||
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
from django.db import models
 | 
			
		||||
from django.core.files import File
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
 | 
			
		||||
from lostplaces_app.models import PlaceImage
 | 
			
		||||
from lostplaces_app.tests.models import TestSubmittable
 | 
			
		||||
from lostplaces_app.tests import mock_user
 | 
			
		||||
from lostplaces_app.tests.models import TestModel
 | 
			
		||||
from lostplaces_app.tests.models.test_place_model import mock_place
 | 
			
		||||
from lostplaces_app.models import PlaceImage, Place
 | 
			
		||||
from lostplaces_app.tests.models import SubmittableTestCase
 | 
			
		||||
from lostplaces_app.tests.models.test_place_model import PlaceTestCase
 | 
			
		||||
 | 
			
		||||
from easy_thumbnails.fields import ThumbnailerImageField
 | 
			
		||||
 | 
			
		||||
def mock_place_image():
 | 
			
		||||
    return PlaceImage(
 | 
			
		||||
        description='Im a description',
 | 
			
		||||
        filename=mock.MagicMock(spec=File, name='FileMock'),
 | 
			
		||||
        place=mock_place(),
 | 
			
		||||
        submitted_when=datetime.datetime.now(),
 | 
			
		||||
        submitted_by=mock_user().explorer
 | 
			
		||||
class TestPlaceImage(SubmittableTestCase, TestCase):
 | 
			
		||||
    model = PlaceImage
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def setUpTestData(cls):
 | 
			
		||||
        user = User.objects.create_user(
 | 
			
		||||
            username='testpeter',
 | 
			
		||||
            password='Develop123'
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
class TestPlaceImage(TestSubmittable, TestCase):
 | 
			
		||||
    model_name = 'PlaceImage'
 | 
			
		||||
        place = Place.objects.create(
 | 
			
		||||
            name='Im a place',
 | 
			
		||||
            submitted_when=datetime.datetime.now(),
 | 
			
		||||
            submitted_by=User.objects.get(username='testpeter').explorer,
 | 
			
		||||
            location='Testtown',
 | 
			
		||||
            latitude=50.5,
 | 
			
		||||
            longitude=7.0,
 | 
			
		||||
            description='This is just a test, do not worry'
 | 
			
		||||
        )
 | 
			
		||||
        place.tags.add('I a tag', 'testlocation')
 | 
			
		||||
        place.save()
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.object = mock_place_image()
 | 
			
		||||
        current_dir = os.path.dirname(os.path.abspath(__file__))
 | 
			
		||||
        if not os.path.isfile(os.path.join(settings.MEDIA_ROOT, 'im_a_image_copy.jpeg')):
 | 
			
		||||
            shutil.copyfile(
 | 
			
		||||
                os.path.join(current_dir, 'im_a_image.jpeg'),
 | 
			
		||||
                os.path.join(settings.MEDIA_ROOT, 'im_a_image_copy.jpeg')
 | 
			
		||||
            )
 | 
			
		||||
            
 | 
			
		||||
        PlaceImage.objects.create(
 | 
			
		||||
            description='Im a description',
 | 
			
		||||
            filename=os.path.join(settings.MEDIA_ROOT, 'im_a_image_copy.jpeg'),
 | 
			
		||||
            place=place,
 | 
			
		||||
            submitted_when=datetime.datetime.now(),
 | 
			
		||||
            submitted_by=user.explorer
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_description(self):
 | 
			
		||||
        self._test_field('description', models.TextField)
 | 
			
		||||
@@ -51,5 +75,18 @@ class TestPlaceImage(TestSubmittable, TestCase):
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_str(self):
 | 
			
		||||
        place_image = mock_place_image()
 | 
			
		||||
        self.assertEqual(str(place_image), ' '.join([place_image.place.name, str(place_image.pk)]))
 | 
			
		||||
        place_image = self.object
 | 
			
		||||
        self.assertTrue(place_image.place.name.lower() in str(place_image).lower(),
 | 
			
		||||
            msg='Expecting %s.__str__ to contain  the name of the place' % (
 | 
			
		||||
                self.model_name
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
    def test_deletion(self):
 | 
			
		||||
        # TODO
 | 
			
		||||
        path = self.object.filename.path
 | 
			
		||||
        self.object.delete()
 | 
			
		||||
        self.assertFalse(
 | 
			
		||||
            os.path.isfile(path),
 | 
			
		||||
            msg='Expecting the file of an place_image to be deleteed when an place_image is deleted'
 | 
			
		||||
        )
 | 
			
		||||
@@ -3,35 +3,38 @@ import datetime
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
from django.db import models
 | 
			
		||||
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
 | 
			
		||||
from lostplaces_app.models import Place
 | 
			
		||||
from lostplaces_app.tests.models import TestSubmittable
 | 
			
		||||
from lostplaces_app.tests import mock_user
 | 
			
		||||
from lostplaces_app.tests.models import TestModel
 | 
			
		||||
from lostplaces_app.tests import BaseData
 | 
			
		||||
from lostplaces_app.tests.models import SubmittableTestCase
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from taggit.managers import TaggableManager
 | 
			
		||||
 | 
			
		||||
def mock_place():
 | 
			
		||||
class PlaceTestCase(SubmittableTestCase, TestCase):
 | 
			
		||||
    model = Place
 | 
			
		||||
    related_name = 'places'
 | 
			
		||||
    nullable = True
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def setUpTestData(cls):
 | 
			
		||||
        user = User.objects.create_user(
 | 
			
		||||
            username='testpeter',
 | 
			
		||||
            password='Develop123'
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
        place = Place.objects.create(
 | 
			
		||||
            name='Im a place',
 | 
			
		||||
            submitted_when=datetime.datetime.now(),
 | 
			
		||||
        submitted_by=mock_user().explorer,
 | 
			
		||||
            submitted_by=user.explorer,
 | 
			
		||||
            location='Testtown',
 | 
			
		||||
            latitude=50.5,
 | 
			
		||||
            longitude=7.0,
 | 
			
		||||
            description='This is just a test, do not worry'
 | 
			
		||||
        )
 | 
			
		||||
        place.tags.add('I a tag', 'testlocation')
 | 
			
		||||
 | 
			
		||||
    return place
 | 
			
		||||
 | 
			
		||||
class PlaceTestCase(TestSubmittable, TestCase):
 | 
			
		||||
    model_name = 'Place'
 | 
			
		||||
    related_name = 'places'
 | 
			
		||||
    nullable = True
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.place = mock_place()
 | 
			
		||||
        self.object = self.place
 | 
			
		||||
        place.save()
 | 
			
		||||
 | 
			
		||||
    def test_name_field(self):
 | 
			
		||||
        self._test_char_field(
 | 
			
		||||
@@ -74,9 +77,11 @@ class PlaceTestCase(TestSubmittable, TestCase):
 | 
			
		||||
        '''
 | 
			
		||||
        place_list = []
 | 
			
		||||
        for i in range(10):
 | 
			
		||||
            place = mock_place()
 | 
			
		||||
            place = Place.objects.get(id=1)
 | 
			
		||||
            place.id = None
 | 
			
		||||
            place.latitude = i+1
 | 
			
		||||
            place.longitude = i+10
 | 
			
		||||
            place.save()
 | 
			
		||||
            place_list.append(place)
 | 
			
		||||
 | 
			
		||||
        avg_latlon = Place.average_latlon(place_list)
 | 
			
		||||
@@ -96,7 +101,7 @@ class PlaceTestCase(TestSubmittable, TestCase):
 | 
			
		||||
        Tests the average latitude/longitude calculation of a list
 | 
			
		||||
        of one place
 | 
			
		||||
        '''
 | 
			
		||||
        place = mock_place()
 | 
			
		||||
        place = Place.objects.get(id=1)
 | 
			
		||||
        avg_latlon = Place.average_latlon([place])
 | 
			
		||||
        self.assertEqual(avg_latlon[0], place.latitude,
 | 
			
		||||
            msg='%s:(one place) average latitude missmatch' % (
 | 
			
		||||
@@ -127,10 +132,9 @@ class PlaceTestCase(TestSubmittable, TestCase):
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_str(self):
 | 
			
		||||
        place = mock_place()
 | 
			
		||||
        self.assertEqual(str(place), place.name,
 | 
			
		||||
            msg='%s __str__ should return the name' % (
 | 
			
		||||
        place = self.object
 | 
			
		||||
        self.assertTrue(place.name.lower() in str(place).lower(),
 | 
			
		||||
            msg='Expecting %s.__str__ to contain the name' % (
 | 
			
		||||
                self.model_name
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								lostplaces/lostplaces_app/tests/models/test_voucher_model.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								lostplaces/lostplaces_app/tests/models/test_voucher_model.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
import datetime
 | 
			
		||||
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
from django.db import models
 | 
			
		||||
from django.utils import timezone
 | 
			
		||||
 | 
			
		||||
from lostplaces_app.models import Voucher
 | 
			
		||||
from lostplaces_app.tests.models import ModelTestCase
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class VoucheTestCase(ModelTestCase, TestCase):
 | 
			
		||||
    model = Voucher
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def setUpTestData(cls):
 | 
			
		||||
        Voucher.objects.create(
 | 
			
		||||
        code='ayDraJCCwfhcFiYmSR5GrcjcchDfcahv',
 | 
			
		||||
        expires_when=timezone.now() + datetime.timedelta(days=1)
 | 
			
		||||
    )
 | 
			
		||||
    
 | 
			
		||||
    def test_voucher_code(self):
 | 
			
		||||
        self._test_char_field(
 | 
			
		||||
            'code',
 | 
			
		||||
            10,
 | 
			
		||||
            100,
 | 
			
		||||
            must_have={'unique': True}
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
    def test_voucher_created(self):
 | 
			
		||||
        self._test_field(
 | 
			
		||||
            'created_when',
 | 
			
		||||
            models.DateTimeField,
 | 
			
		||||
            must_have={'auto_now_add': True}
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
    def test_voucher_expires(self):
 | 
			
		||||
        self._test_field(
 | 
			
		||||
            'expires_when',
 | 
			
		||||
            models.DateTimeField,
 | 
			
		||||
            must_not_have={'auto_now_add': True}
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    def test_str(self):
 | 
			
		||||
        voucher = self.object
 | 
			
		||||
        self.assertTrue(voucher.code.lower() in str(voucher).lower(),
 | 
			
		||||
            msg='Expecting %s.__str__ to contain the voucher code' % (
 | 
			
		||||
                self.model_name
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
@@ -1,17 +1,36 @@
 | 
			
		||||
import datetime
 | 
			
		||||
 | 
			
		||||
from django.test import TestCase, Client
 | 
			
		||||
from django.urls import reverse_lazy
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
 | 
			
		||||
from lostplaces_app.models import Place
 | 
			
		||||
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from lostplaces_app.tests.models.test_place_model import mock_place
 | 
			
		||||
from lostplaces_app.tests import mock_user
 | 
			
		||||
 | 
			
		||||
class TestIsAuthenticated(TestCase):
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def setUpTestData(cls):
 | 
			
		||||
        user = User.objects.create_user(
 | 
			
		||||
            username='testpeter',
 | 
			
		||||
            password='Develop123'
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
        place = Place.objects.create(
 | 
			
		||||
            name='Im a place',
 | 
			
		||||
            submitted_when=datetime.datetime.now(),
 | 
			
		||||
            submitted_by=User.objects.get(username='testpeter').explorer,
 | 
			
		||||
            location='Testtown',
 | 
			
		||||
            latitude=50.5,
 | 
			
		||||
            longitude=7.0,
 | 
			
		||||
            description='This is just a test, do not worry'
 | 
			
		||||
        )
 | 
			
		||||
        place.tags.add('I a tag', 'testlocation')
 | 
			
		||||
        place.save()
 | 
			
		||||
        
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self. client = Client()
 | 
			
		||||
        mock_place()
 | 
			
		||||
        mock_user()
 | 
			
		||||
 | 
			
		||||
    def test_logged_in(self):
 | 
			
		||||
        self.client.login(username='testpeter', password='Develop123')
 | 
			
		||||
@@ -36,10 +55,27 @@ class TestIsAuthenticated(TestCase):
 | 
			
		||||
 | 
			
		||||
class TestIsPlaceSubmitter(TestCase):
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def setUpTestData(cls):
 | 
			
		||||
        user = User.objects.create_user(
 | 
			
		||||
            username='testpeter',
 | 
			
		||||
            password='Develop123'
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
        place = Place.objects.create(
 | 
			
		||||
            name='Im a place',
 | 
			
		||||
            submitted_when=datetime.datetime.now(),
 | 
			
		||||
            submitted_by=user.explorer,
 | 
			
		||||
            location='Testtown',
 | 
			
		||||
            latitude=50.5,
 | 
			
		||||
            longitude=7.0,
 | 
			
		||||
            description='This is just a test, do not worry'
 | 
			
		||||
        )
 | 
			
		||||
        place.tags.add('I a tag', 'testlocation')
 | 
			
		||||
        place.save()
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self. client = Client()
 | 
			
		||||
        mock_place()
 | 
			
		||||
        mock_user()
 | 
			
		||||
 | 
			
		||||
    def test_is_submitter(self):
 | 
			
		||||
        self.client.login(username='testpeter', password='Develop123')
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,34 @@
 | 
			
		||||
import datetime
 | 
			
		||||
 | 
			
		||||
from django.test import TestCase, Client
 | 
			
		||||
from django.urls import reverse_lazy
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
 | 
			
		||||
from lostplaces_app.models import Place
 | 
			
		||||
 | 
			
		||||
from lostplaces_app.tests.models.test_place_model import mock_place
 | 
			
		||||
from lostplaces_app.tests import mock_user
 | 
			
		||||
 | 
			
		||||
class TestPlaceCreateView(TestCase):
 | 
			
		||||
    
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def setUpTestData(cls):
 | 
			
		||||
        user = User.objects.create_user(
 | 
			
		||||
            username='testpeter',
 | 
			
		||||
            password='Develop123'
 | 
			
		||||
        )
 | 
			
		||||
        
 | 
			
		||||
        place = Place.objects.create(
 | 
			
		||||
            name='Im a place',
 | 
			
		||||
            submitted_when=datetime.datetime.now(),
 | 
			
		||||
            submitted_by=user.explorer,
 | 
			
		||||
            location='Testtown',
 | 
			
		||||
            latitude=50.5,
 | 
			
		||||
            longitude=7.0,
 | 
			
		||||
            description='This is just a test, do not worry'
 | 
			
		||||
        )
 | 
			
		||||
        place.tags.add('I a tag', 'testlocation')
 | 
			
		||||
        place.save()
 | 
			
		||||
        
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self. client = Client()
 | 
			
		||||
        mock_place()
 | 
			
		||||
        mock_user()
 | 
			
		||||
 | 
			
		||||
    def test_url_logged_in(self):
 | 
			
		||||
        self.client.login(username='testpeter', password='Develop123')
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
from django.urls import path
 | 
			
		||||
from .views import (
 | 
			
		||||
from lostplaces_app.views import (
 | 
			
		||||
    HomeView, 
 | 
			
		||||
    PlaceDetailView, 
 | 
			
		||||
    PlaceListView, 
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user