~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/testing/tests/test_yuixhr.py

Merge db-devel.

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
from canonical.testing.layers import LaunchpadFunctionalLayer
30
30
 
31
31
from lp.registry.interfaces.product import IProductSet
 
32
from lp.services.osutils import override_environ
32
33
from lp.testing import (
33
34
    TestCase,
34
35
    login,
35
36
    ANONYMOUS,
36
37
    )
 
38
from lp.testing.matchers import Contains
37
39
from lp.testing.views import create_view
38
40
from lp.testing.yuixhr import setup
39
41
from lp.testing.tests import test_yuixhr_fixture
101
103
        view = create_traversed_view(
102
104
            path_info='/+yuitest/lp/testing/tests/test_yuixhr_fixture')
103
105
        view.initialize()
104
 
        content = view.page()
 
106
        content = view.renderHTML()
105
107
        self.assertTrue(content.startswith('<!DOCTYPE HTML'))
106
108
        self.assertTextMatchesExpressionIgnoreWhitespace(
107
109
            re.escape(
126
128
        self.assertEqual(
127
129
            'text/javascript',
128
130
            view.request.response.getHeader('Content-Type'))
 
131
        self.assertEqual(
 
132
            'no-cache',
 
133
            view.request.response.getHeader('Cache-Control'))
129
134
 
130
135
    def test_javascript_must_have_a_py_fixture(self):
131
136
        js_dir = tempfile.mkdtemp()
157
162
        self.assertEqual(
158
163
            'text/html',
159
164
            view.request.response.getHeader('Content-Type'))
 
165
        self.assertEqual(
 
166
            'no-cache',
 
167
            view.request.response.getHeader('Cache-Control'))
160
168
 
161
169
    def test_get_fixtures(self):
162
170
        view = create_traversed_view(
389
397
        del called[:]
390
398
        original_fixture.teardown(None, dict())
391
399
        self.assertEquals(['original'], called)
 
400
 
 
401
    def test_python_fixture_does_not_reload_by_default(self):
 
402
        # Even though the dangers of Python's "reload" are subtle and
 
403
        # real, using it can be very nice, particularly with
 
404
        # Launchpad's slow start-up time.  By default, though, it is
 
405
        # not used.  We will show this by scribbling on one of the
 
406
        # fixtures and showing that the scribble is still there when
 
407
        # we load the page.
 
408
        test_yuixhr_fixture._fixtures_['baseline'].scribble = 'hello'
 
409
        self.addCleanup(
 
410
            delattr, test_yuixhr_fixture._fixtures_['baseline'], 'scribble')
 
411
        view = create_traversed_view(
 
412
            path_info='/+yuitest/lp/testing/tests/'
 
413
                      'test_yuixhr_fixture')
 
414
        view.initialize()
 
415
        view.render()
 
416
        self.assertEquals(
 
417
            'hello', test_yuixhr_fixture._fixtures_['baseline'].scribble)
 
418
 
 
419
    def test_python_fixture_does_not_reload_without_environ_var(self):
 
420
        # As a bit of extra paranoia, we only allow a reload if
 
421
        # 'INTERACTIVE_TESTS' is in the environ.  make run-testapp
 
422
        # sets this environmental variable.  However, if we don't set
 
423
        # the environment, even if we request a reload it will not
 
424
        # happen.
 
425
        test_yuixhr_fixture._fixtures_['baseline'].scribble = 'hello'
 
426
        self.addCleanup(
 
427
            delattr, test_yuixhr_fixture._fixtures_['baseline'], 'scribble')
 
428
        view = create_traversed_view(
 
429
            path_info='/+yuitest/lp/testing/tests/'
 
430
                      'test_yuixhr_fixture', form=dict(reload='1'))
 
431
        view.initialize()
 
432
        view.render()
 
433
        self.assertEquals(
 
434
            'hello', test_yuixhr_fixture._fixtures_['baseline'].scribble)
 
435
 
 
436
    def test_python_fixture_can_reload(self):
 
437
        # Now we will turn reloading fully on, with the environmental
 
438
        # variable and the query string..
 
439
        test_yuixhr_fixture._fixtures_['baseline'].scribble = 'hello'
 
440
        with override_environ(INTERACTIVE_TESTS='1'):
 
441
            view = create_traversed_view(
 
442
                path_info='/+yuitest/lp/testing/tests/'
 
443
                'test_yuixhr_fixture', form=dict(reload='1'))
 
444
            # reloading only happens at render time, so the scribble is
 
445
            # still there for now.
 
446
            view.initialize()
 
447
            self.assertEquals(
 
448
                'hello', test_yuixhr_fixture._fixtures_['baseline'].scribble)
 
449
            # After a render of the html view, the module is reloaded.
 
450
            view.render()
 
451
            self.assertEquals(
 
452
                None,
 
453
                getattr(test_yuixhr_fixture._fixtures_['baseline'],
 
454
                        'scribble',
 
455
                        None))
 
456
 
 
457
    def test_python_fixture_resets_fixtures(self):
 
458
        # When we reload, we also clear out _fixtures_.  This means
 
459
        # that if you rename or delete something, it won't be hanging
 
460
        # around confusing you into thinking everything is fine after
 
461
        # the reload.
 
462
        test_yuixhr_fixture._fixtures_['extra_scribble'] = 42
 
463
        with override_environ(INTERACTIVE_TESTS='1'):
 
464
            view = create_traversed_view(
 
465
                path_info='/+yuitest/lp/testing/tests/'
 
466
                'test_yuixhr_fixture', form=dict(reload='1'))
 
467
            view.initialize()
 
468
            # After a render of the html view, the module is reloaded.
 
469
            view.render()
 
470
            self.assertEquals(
 
471
                None,
 
472
                test_yuixhr_fixture._fixtures_.get('extra_scribble'))
 
473
 
 
474
    def test_python_fixture_reload_in_html(self):
 
475
        # The reload is specifically when we load HTML pages only.
 
476
        test_yuixhr_fixture._fixtures_['extra_scribble'] = 42
 
477
        with override_environ(INTERACTIVE_TESTS='1'):
 
478
            view = create_traversed_view(
 
479
                path_info='/+yuitest/lp/testing/tests/'
 
480
                'test_yuixhr_fixture', form=dict(reload='1'))
 
481
            view.initialize()
 
482
            # After a render of the html view, the module is reloaded.
 
483
            view.renderHTML()
 
484
            self.assertEquals(
 
485
                None,
 
486
                test_yuixhr_fixture._fixtures_.get('extra_scribble'))
 
487
 
 
488
    def test_index_page(self):
 
489
        view = create_traversed_view(path_info='/+yuitest')
 
490
        view.initialize()
 
491
        output = view.render()
 
492
        self.assertThat(
 
493
            output,
 
494
            Contains(
 
495
                'href="/+yuitest/lp/testing/tests/test_yuixhr_fixture'))