Skip to content

Commit

Permalink
Merge pull request #348 from mariocesar/tests/restructure
Browse files Browse the repository at this point in the history
Restructure test suite
  • Loading branch information
relekang committed Feb 14, 2015
2 parents d77025f + 46b344c commit 5568c79
Show file tree
Hide file tree
Showing 20 changed files with 1,103 additions and 1,411 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,8 @@ docs/_build/
# Virtualenv

.env/

# dbm stuff
tests/thumbnail_kvstore
tests/thumbnail_kvstore.db
tests/thumbnail_kvstore.lock
114 changes: 50 additions & 64 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,87 +1,73 @@
language: python

python:
- "2.7"
- "3.3"
- "3.4"

env:
- DJANGO_VERSION=">=1.5,<1.6" SETTINGS=pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'
- DJANGO_VERSION=">=1.5,<1.6" SETTINGS=imagemagick APT=imagemagick
- DJANGO_VERSION=">=1.5,<1.6" SETTINGS=graphicsmagick APT=graphicsmagick
- DJANGO_VERSION=">=1.5,<1.6" SETTINGS=wand APT=libmagickwand-dev PIP=wand
- DJANGO_VERSION=">=1.5,<1.6" SETTINGS=redis PIP=redis

- DJANGO_VERSION=">=1.6,<1.7" SETTINGS=pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'
- DJANGO_VERSION=">=1.6,<1.7" SETTINGS=imagemagick APT=imagemagick
- DJANGO_VERSION=">=1.6,<1.7" SETTINGS=graphicsmagick APT=graphicsmagick
- DJANGO_VERSION=">=1.6,<1.7" SETTINGS=wand APT=libmagickwand-dev PIP=wand
- DJANGO_VERSION=">=1.6,<1.7" SETTINGS=redis PIP=redis

- DJANGO_VERSION=">=1.7,<1.8" SETTINGS=pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'
- DJANGO_VERSION=">=1.7,<1.8" SETTINGS=imagemagick APT=imagemagick
- DJANGO_VERSION=">=1.7,<1.8" SETTINGS=graphicsmagick APT=graphicsmagick
- DJANGO_VERSION=">=1.7,<1.8" SETTINGS=wand APT=libmagickwand-dev PIP=wand
- DJANGO_VERSION=">=1.7,<1.8" SETTINGS=redis PIP=redis

matrix:
include:
- python: "2.7"
env:
- DJANGO_VERSION=">=1.4,<1.5" SETTINGS=pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'

- python: "2.7"
env:
- DJANGO_VERSION=">=1.4,<1.5" SETTINGS=imagemagick APT=imagemagick

- python: "2.7"
env:
- DJANGO_VERSION=">=1.4,<1.5" SETTINGS=graphicsmagick APT=graphicsmagick

- python: "2.7"
env:
- DJANGO_VERSION=">=1.4,<1.5" SETTINGS=wand APT=libmagickwand-dev PIP=wand

- python: "2.7"
env:
- DJANGO_VERSION=">=1.4,<1.5" SETTINGS=redis PIP=redis

- python: "2.7"
env:
- DJANGO_VERSION=">=1.4,<1.5" SETTINGS=pgmagick APT='libgraphicsmagick++-dev libboost-python-dev libboost-thread-dev'
- PIP=pgmagick

- python: "2.7"
env:
- DJANGO_VERSION=">=1.5,<1.6" SETTINGS=pgmagick APT='libgraphicsmagick++-dev libboost-python-dev libboost-thread-dev'
- PIP=pgmagick

- python: "2.7"
env:
- DJANGO_VERSION=">=1.6,<1.7" SETTINGS=pgmagick APT='libgraphicsmagick++-dev libboost-python-dev libboost-thread-dev'
- PIP=pgmagick
- TOX_ENV=py27-django14-pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'
- TOX_ENV=py27-django14-imagemagick APT=imagemagick
- TOX_ENV=py27-django14-graphicsmagick APT=graphicsmagick
- TOX_ENV=py27-django14-redis
- TOX_ENV=py27-django14-wand
- TOX_ENV=py27-django14-pgmagick APT='libgraphicsmagick++1-dev libboost-python-dev'
- TOX_ENV=py27-django14-dbm
- TOX_ENV=py27-django15-pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'
- TOX_ENV=py27-django15-imagemagick APT=imagemagick
- TOX_ENV=py27-django15-graphicsmagick APT=graphicsmagick
- TOX_ENV=py27-django15-redis
- TOX_ENV=py27-django15-wand
- TOX_ENV=py27-django15-pgmagick APT='libgraphicsmagick++1-dev libboost-python-dev'
- TOX_ENV=py27-django15-dbm
- TOX_ENV=py27-django16-pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'
- TOX_ENV=py27-django16-imagemagick APT=imagemagick
- TOX_ENV=py27-django16-graphicsmagick APT=graphicsmagick
- TOX_ENV=py27-django16-redis
- TOX_ENV=py27-django16-wand
- TOX_ENV=py27-django16-pgmagick APT='libgraphicsmagick++1-dev libboost-python-dev'
- TOX_ENV=py27-django16-dbm
- TOX_ENV=py27-django17-pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'
- TOX_ENV=py27-django17-imagemagick APT=imagemagick
- TOX_ENV=py27-django17-graphicsmagick APT=graphicsmagick
- TOX_ENV=py27-django17-redis
- TOX_ENV=py27-django17-wand
- TOX_ENV=py27-django17-pgmagick APT='libgraphicsmagick++1-dev libboost-python-dev'
- TOX_ENV=py27-django17-dbm
- TOX_ENV=py34-django15-pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'
- TOX_ENV=py34-django15-imagemagick APT=imagemagick
- TOX_ENV=py34-django15-graphicsmagick APT=graphicsmagick
- TOX_ENV=py34-django15-redis
- TOX_ENV=py34-django15-wand
- TOX_ENV=py34-django15-dbm
- TOX_ENV=py34-django16-pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'
- TOX_ENV=py34-django16-imagemagick APT=imagemagick
- TOX_ENV=py34-django16-graphicsmagick APT=graphicsmagick
- TOX_ENV=py34-django16-redis
- TOX_ENV=py34-django16-wand
- TOX_ENV=py34-django16-dbm
- TOX_ENV=py34-django17-pil APT='libjpeg62 libjpeg62-dev zlib1g-dev'
- TOX_ENV=py34-django17-imagemagick APT=imagemagick
- TOX_ENV=py34-django17-graphicsmagick APT=graphicsmagick
- TOX_ENV=py34-django17-redis
- TOX_ENV=py34-django17-wand
- TOX_ENV=py34-django17-dbm

before_install:
- sudo apt-get update -qq
- sudo apt-get install -qq $APT

after_failure:
- pip freeze
- cat /home/travis/.pip/pip.log

after_success:
- pip freeze
- coveralls

install:
- pip install -U pip
- pip install -q coveralls
- pip install -q Pillow $PIP
- pip install -q Django$DJANGO_VERSION
- pip install flake8
- pip install -q coveralls flake8 tox

script:
- cd tests && coverage run --source=sorl runtests.py --settings=settings.$SETTINGS
- cd .. && flake8 --show-source sorl/
- tox -e $TOX_ENV
- flake8 --show-source sorl/

services:
- redis-server
Expand Down
12 changes: 10 additions & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,26 @@ Developers
==========

Feel free to create a new Pull request if you want to propose a new feature.
If you need development support or want to discuss with other developers
If you need development support or want to discuss with other developers
join us in the channel #sorl-thumnbnail at freenode.net or Gitter.

For releases updates and more in deep development discussion use our mailing list
in Google Groups.

- IRC Channel: irc://irc.freenode.net/#sorl-thumbnail

- Gitter: https://gitter.im/mariocesar/sorl-thumbnail

- Mailing List: sorl-thumbnail@googlegroups.com https://groups.google.com/d/forum/sorl-thumbnail

Tests
-----
The tests should run with tox and pytest. Running `tox` will run all tests for all environments.
However, it is possible to run a certain environment with `tox -e <env>`, a list of all environments
can be found with `tox -l`. These tests require the dependencies of the different engines defined in
the documentation. It is possible to install these dependencies into a vagrant image with the
Vagrantfile in the repo.

User Support
============

Expand Down
2 changes: 2 additions & 0 deletions sorl/thumbnail/kvstores/dbm_kvstore.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

try:
import anydbm as dbm
except KeyError:
import dbm
except ImportError:
# Python 3, hopefully
import dbm
Expand Down
6 changes: 0 additions & 6 deletions tests/runalltests.sh

This file was deleted.

74 changes: 0 additions & 74 deletions tests/runtests.py

This file was deleted.

24 changes: 9 additions & 15 deletions tests/settings/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
'class': 'sorl.thumbnail.log.ThumbnailLogHandler',
'level': 'ERROR',
}
THUMBNAIL_KVSTORE = 'thumbnail_tests.kvstore.TestKVStore'
THUMBNAIL_STORAGE = 'thumbnail_tests.storage.TestStorage'
DEFAULT_FILE_STORAGE = 'thumbnail_tests.storage.TestStorage'
THUMBNAIL_KVSTORE = 'tests.thumbnail_tests.kvstore.TestKVStore'
THUMBNAIL_STORAGE = 'tests.thumbnail_tests.storage.TestStorage'
DEFAULT_FILE_STORAGE = 'tests.thumbnail_tests.storage.TestStorage'
ADMINS = (
('Sorl', 'thumbnail@sorl.net'),
)
Expand All @@ -25,20 +25,14 @@
}
MEDIA_ROOT = pjoin(PROJ_ROOT, 'media')
MEDIA_URL = '/media/'
ROOT_URLCONF = 'thumbnail_tests.urls'
if django.VERSION < (1, 6):
INSTALLED_APPS = (
'thumbnail',
'thumbnail_tests',
)
else:
INSTALLED_APPS = (
'sorl.thumbnail',
'tests.thumbnail_tests',
)
ROOT_URLCONF = 'tests.thumbnail_tests.urls'
INSTALLED_APPS = (
'sorl.thumbnail',
'tests.thumbnail_tests',
)

TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
'django.core.context_processors.request',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
Expand Down
9 changes: 9 additions & 0 deletions tests/thumbnail_tests/compat.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import sys
import platform

PY2 = sys.version_info[0] == 2
PY3 = sys.version_info[0] == 3
Expand All @@ -8,3 +9,11 @@
import unittest
else:
from django.utils import unittest


def is_osx():
return platform.system() == 'Darwin'


def is_windows():
return platform.system() == 'Windows'
58 changes: 58 additions & 0 deletions tests/thumbnail_tests/test_alternative_resolutions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# -*- coding: utf-8 -*-
import os

import pytest

from sorl.thumbnail import get_thumbnail
from sorl.thumbnail.conf import settings
from sorl.thumbnail.images import ImageFile
from sorl.thumbnail.engines.pil_engine import Engine as PILEngine

from .utils import BaseStorageTestCase


pytestmark = pytest.mark.django_db


class AlternativeResolutionsTest(BaseStorageTestCase):
name = 'retina.jpg'

def setUp(self):
settings.THUMBNAIL_ALTERNATIVE_RESOLUTIONS = [1.5, 2]
super(AlternativeResolutionsTest, self).setUp()
self.maxDiff = None

def tearDown(self):
super(AlternativeResolutionsTest, self).tearDown()
settings.THUMBNAIL_ALTERNATIVE_RESOLUTIONS = []

def test_retina(self):
get_thumbnail(self.image, '50x50')

actions = [
'exists: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d.jpg',

# save regular resolution, same as in StorageTestCase
'open: retina.jpg',
'save: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d.jpg',
'get_available_name: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d.jpg',
'exists: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d.jpg',

# save the 1.5x resolution version
'save: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@1.5x.jpg',
'get_available_name: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@1.5x.jpg',
'exists: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@1.5x.jpg',

# save the 2x resolution version
'save: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@2x.jpg',
'get_available_name: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@2x.jpg',
'exists: test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@2x.jpg'
]
self.assertEqual(self.log, actions)

path = os.path.join(settings.MEDIA_ROOT,
'test/cache/91/bb/91bb06cf9169e4c52132bb113f2d4c0d@1.5x.jpg')

with open(path) as fp:
engine = PILEngine()
self.assertEqual(engine.get_image_size(engine.get_image(ImageFile(file_=fp))), (75, 75))
Loading

0 comments on commit 5568c79

Please sign in to comment.