source: main/waeup.kofa/trunk/src/waeup/kofa/applicants/tests/test_applicant.py @ 10091

Last change on this file since 10091 was 10091, checked in by Henrik Bettermann, 11 years ago

The image store handler is now a file store handler. File extensions are checked elsewhere.

  • Property svn:keywords set to Id
File size: 7.6 KB
Line 
1## $Id: test_applicant.py 10091 2013-04-22 11:21:11Z henrik $
2##
3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
4## This program is free software; you can redistribute it and/or modify
5## it under the terms of the GNU General Public License as published by
6## the Free Software Foundation; either version 2 of the License, or
7## (at your option) any later version.
8##
9## This program is distributed in the hope that it will be useful,
10## but WITHOUT ANY WARRANTY; without even the implied warranty of
11## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12## GNU General Public License for more details.
13##
14## You should have received a copy of the GNU General Public License
15## along with this program; if not, write to the Free Software
16## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17##
18"""Tests for applicants and related.
19"""
20import grok
21import shutil
22import tempfile
23from StringIO import StringIO
24from zope.component import adapts, queryUtility
25from zope.component.interfaces import IFactory
26from zope.interface import verify, implements
27from zope.location.interfaces import ILocation
28from waeup.kofa.image.interfaces import IKofaImageFile
29from waeup.kofa.imagestorage import DefaultStorage
30from waeup.kofa.interfaces import IFileStoreHandler, IFileStoreNameChooser
31from waeup.kofa.applicants import (
32    Applicant, ApplicantFactory,
33    ApplicantImageStoreHandler, ApplicantImageNameChooser,
34    )
35from waeup.kofa.applicants.interfaces import IApplicant
36from waeup.kofa.testing import FunctionalTestCase, FunctionalLayer
37
38class FakeImageLocation(object):
39    implements(ILocation)
40    adapts(IKofaImageFile)
41    def __init__(self, context):
42        pass
43
44class HelperTests(FunctionalTestCase):
45
46    layer = FunctionalLayer
47
48    def setUp(self):
49        super(HelperTests, self).setUp()
50        self.workdir = tempfile.mkdtemp()
51        return
52
53    def tearDown(self):
54        super(HelperTests, self).tearDown()
55        shutil.rmtree(self.workdir)
56        return
57
58    def test_image_store_handler_util_accessible(self):
59        # we can get an IFileStoreHandler utility for applicants
60        handler = queryUtility(IFileStoreHandler, name='img-applicant')
61        self.assertTrue(
62            isinstance(handler, ApplicantImageStoreHandler))
63        return
64
65    def test_image_store_handler(self):
66        store = DefaultStorage()
67        handler = queryUtility(IFileStoreHandler, name='img-applicant')
68        result1 = handler.pathFromFileID(
69            store, '/fake-root', '__img-applicant__sample.jpg')
70        result2 = handler.pathFromFileID(
71            store, '/fake-root', '__img-applicant__dir1/sample.jpg')
72        result3 = handler.pathFromFileID(
73            store, '/fake-root', '__img-applicant__dir1/dir2/sample.jpg')
74        self.assertEqual(
75            result1, '/fake-root/applicants/sample')
76        self.assertEqual(
77            result2, '/fake-root/applicants/dir1/sample')
78        self.assertEqual(
79            result3, '/fake-root/applicants/dir1/dir2/sample')
80        return
81
82    def test_image_store_handler_create(self):
83        # we can create files in image store with the applicant image
84        # store handler
85        store = DefaultStorage(self.workdir)
86        handler = queryUtility(IFileStoreHandler, name='img-applicant')
87        file_obj, path, waeup_file = handler.createFile(
88            store, store.root, 'sample.jpg', '__img_applicant__sample',
89            StringIO('I am a JPG file'))
90        self.assertEqual(path[-21:], 'applicants/sample.jpg')
91        return
92
93    #def test_image_store_handler_invalid_filename_ext(self):
94    #    # we only accept '.jpg' and '.png' as filename extensions.
95    #    store = DefaultStorage(self.workdir)
96    #    handler = queryUtility(IFileStoreHandler, name='img-applicant')
97    #    self.assertRaises(
98    #        ValueError,
99    #        handler.createFile,
100    #        store, store.root, 'sample.txt', '__img_applicant__sample',
101    #        StringIO('I am a txt file'))
102    #    return
103
104class ApplicantImageNameChooserTests(FunctionalTestCase):
105
106    layer = FunctionalLayer
107
108    def test_iface(self):
109        # make sure we implement promised interfaces
110        obj = ApplicantImageNameChooser(None) # needs a context normally
111        verify.verifyClass(IFileStoreNameChooser, ApplicantImageNameChooser)
112        verify.verifyObject(IFileStoreNameChooser, obj)
113        return
114
115    def test_name_chooser_available(self):
116        # we can get a name chooser for applicant objects as adapter
117        appl = Applicant()
118        chooser = IFileStoreNameChooser(appl)
119        self.assertTrue(chooser is not None)
120        return
121
122    def test_name_chooser_applicant_wo_container(self):
123        # we can get an image filename for applicants not in a container
124        appl = Applicant()
125        appl.applicant_id = u'dummy_123456'
126        chooser = IFileStoreNameChooser(appl)
127        result = chooser.chooseName()
128        # the file would be stored in a ``_default`` directory.
129        self.assertEqual(
130            result, '__img-applicant___default/dummy_123456.jpg')
131        return
132
133    def test_name_chooser_applicant_w_container(self):
134        fake_container = grok.Container()
135        fake_container.__name__ = 'folder'
136        fake_container.code = 'folder'
137        appl = Applicant()
138        appl.applicant_id = u'folder_123456'
139        appl.__parent__ = fake_container
140        chooser = IFileStoreNameChooser(appl)
141        result = chooser.chooseName()
142        self.assertEqual(
143            result, '__img-applicant__folder/%s.jpg' % appl.applicant_id)
144        return
145
146    def test_name_chooser_applicant_nonpassport_w_container(self):
147        fake_container = grok.Container()
148        fake_container.__name__ = 'folder'
149        fake_container.code = 'folder'
150        appl = Applicant()
151        appl.applicant_id = u'folder_123456'
152        appl.__parent__ = fake_container
153        chooser = IFileStoreNameChooser(appl)
154        result = chooser.chooseName(attr='any.pdf')
155        self.assertEqual(
156            result, '__img-applicant__folder/%s_any.pdf' % appl.applicant_id)
157        return
158
159    def test_name_chooser_check_name(self):
160        # we can check file ids for applicants
161        fake_container = grok.Container()
162        fake_container.__name__ = 'folder'
163        fake_container.code = 'folder'
164        appl = Applicant()
165        appl.applicant_id = u'folder_123456'
166        appl.__parent__ = fake_container
167        chooser = IFileStoreNameChooser(appl)
168        result1 = chooser.checkName('foo')
169        result2 = chooser.checkName(
170            '__img-applicant__folder/%s.jpg' % appl.applicant_id)
171        self.assertEqual(result1, False)
172        self.assertEqual(result2, True)
173        return
174
175class ApplicantTest(FunctionalTestCase):
176
177    layer = FunctionalLayer
178
179    def setUp(self):
180        super(ApplicantTest, self).setUp()
181        self.applicant = Applicant()
182        return
183
184    def tearDown(self):
185        super(ApplicantTest, self).tearDown()
186        return
187
188    def test_interfaces(self):
189        verify.verifyClass(IApplicant, Applicant)
190        verify.verifyObject(IApplicant, self.applicant)
191        return
192
193class ApplicantFactoryTest(FunctionalTestCase):
194
195    layer = FunctionalLayer
196
197    def setUp(self):
198        super(ApplicantFactoryTest, self).setUp()
199        self.factory = ApplicantFactory()
200        return
201
202    def tearDown(self):
203        super(ApplicantFactoryTest, self).tearDown()
204        return
205
206    def test_interfaces(self):
207        verify.verifyClass(IFactory, ApplicantFactory)
208        verify.verifyObject(IFactory, self.factory)
209
210    def test_factory(self):
211        obj = self.factory()
212        assert isinstance(obj, Applicant)
213
214    def test_getInterfaces(self):
215        implemented_by = self.factory.getInterfaces()
216        assert implemented_by.isOrExtends(IApplicant)
Note: See TracBrowser for help on using the repository browser.