Example #1
0
class TestErrors(BaseTest):
    def setUp(self):
        super(TestErrors, self).setUp()
        self.rtr = Publisher(root=self.r)
        self.rtr.add_forward(Root, None, root_to_subject_or_user, 1)
        self.rtr.add_forward(Subject, '+foo', lambda s: s.name + 'foo', 0)
        self.rtr.add_forward(Subject, None, subject_to_offering, 2)
        self.rtr.add_reverse(Subject, subject_url)
        self.rtr.add_reverse(Offering, offering_url)
        self.rtr.add_view(Offering, '+index', OfferingIndex)
        self.rtr.add_view(Offering, '+index', OfferingAPIIndex, viewset='api')
        self.rtr.add_set_switch('rest', 'rest')

    @raises(RouteConflict)
    def testForwardConflict(self):
        self.rtr.add_forward(Subject, '+foo', object(), 2)

    @raises(RouteConflict)
    def testReverseConflict(self):
        self.rtr.add_reverse(Subject, object())

    @raises(RouteConflict)
    def testViewConflict(self):
        self.rtr.add_view(Offering, '+index', object())

    @raises(RouteConflict)
    def testSetSwitchForwardConflict(self):
        self.rtr.add_set_switch('rest', 'foo')

    @raises(RouteConflict)
    def testSetSwitchReverseConflict(self):
        self.rtr.add_set_switch('bar', 'rest')

    @raises(NoPath)
    def testNoPath(self):
        self.rtr.generate(object())

    @raises(NoPath)
    def testNoSetSwitch(self):
        self.rtr.generate(self.r.subjects['info1'].offerings[(2009, 1)],
                          OfferingAPIIndex)

    @raises(NoPath)
    def testUnregisteredView(self):
        self.rtr.generate(self.r.subjects['info1'], SubjectIndex)

    @raises(NotFound)
    def testNotFound(self):
        self.rtr.resolve('/bar')

    @raises(InsufficientPathSegments)
    def testInsufficientPathSegments(self):
        self.rtr.resolve('/info1/foo')
Example #2
0
class TestGeneration(BaseTest):
    def setUp(self):
        super(TestGeneration, self).setUp()
        self.rtr = Publisher(root=self.r, viewset='browser')
        self.rtr.add_set_switch('api', 'api')
        self.rtr.add_reverse(Subject, subject_url)
        self.rtr.add_reverse(Offering, offering_url)
        self.rtr.add_reverse(OfferingFiles, offering_files_url)
        self.rtr.add_reverse(Project, project_url)
        self.rtr.add_view(Subject, '+index', SubjectIndex, viewset='browser')
        self.rtr.add_view(Subject, '+edit', SubjectEdit, viewset='browser')
        self.rtr.add_view(Offering, '+index', OfferingIndex, viewset='browser')
        self.rtr.add_view(Offering, '+index', OfferingAPIIndex, viewset='api')
        self.rtr.add_view(Project, '+index', ProjectIndex, viewset='browser')
        self.rtr.add_view(Offering, ('+projects', '+new'), OfferingAddProject,
                          viewset='browser')
        self.rtr.add_view(Offering, ('+projects', '+index'), OfferingProjects,
                          viewset='browser')

    def testOneLevel(self):
        assert_equal(self.rtr.generate(self.r.subjects['info1']), '/info1')

    def testTwoLevel(self):
        assert_equal(
            self.rtr.generate(self.r.subjects['info1'].offerings[(2009, 1)]),
            '/info1/2009/1'
            )
        assert_equal(
            self.rtr.generate(self.r.subjects['info2'].offerings[(2008, 2)]),
            '/info2/2008/2'
            )

    def testNamedRoute(self):
        assert_equal(self.rtr.generate(
                OfferingFiles(self.r.subjects['info1'].offerings[(2009, 1)])),
                '/info1/2009/1/+files'
            )

    def testView(self):
        assert_equal(self.rtr.generate(self.r.subjects['info1'], SubjectEdit),
                     '/info1/+edit'
                     )

    def testDefaultView(self):
        assert_equal(
            self.rtr.generate(self.r.subjects['info1'].offerings[(2009, 1)],
                              OfferingIndex
                              ),
            '/info1/2009/1'
            )

    def testViewWithSubpath(self):
        assert_equal(self.rtr.generate(self.r.subjects['info1'], SubjectEdit,
                                       ('foo', 'bar')),
                     '/info1/+edit/foo/bar'
                     )

    def testViewWithStringSubpath(self):
        assert_equal(self.rtr.generate(self.r.subjects['info1'], SubjectEdit,
                                       'foo/bar'),
                     '/info1/+edit/foo/bar'
                     )

    def testAlternateViewSetWithDefault(self):
        assert_equal(
            self.rtr.generate(self.r.subjects['info1'].offerings[(2009, 1)],
                              OfferingAPIIndex
                              ),
            '/api/info1/2009/1'
            )

    def testDeepView(self):
        assert_equal(
            self.rtr.generate(
                self.r.subjects['info1'].offerings[(2009, 1)],
                OfferingAddProject
                ),
        '/info1/2009/1/+projects/+new'
        )

    def testDefaultDeepView(self):
        assert_equal(
            self.rtr.generate(
                self.r.subjects['info1'].offerings[(2009, 1)],
                OfferingProjects
                ),
        '/info1/2009/1/+projects'
        )

    def testDefaultDeepViewWithSubpath(self):
        assert_equal(
            self.rtr.generate(
                self.r.subjects['info1'].offerings[(2009, 1)],
                OfferingProjects, ('foo', 'bar')
                ),
        '/info1/2009/1/+projects/+index/foo/bar'
        )

    def testNamedRouteWithDeepView(self):
        assert_equal(
            self.rtr.generate(
                self.r.subjects['info1'].offerings[(2009, 1)].projects['p1'],
                ProjectIndex
                ),
        '/info1/2009/1/+projects/p1'
        )

    def testRoot(self):
        assert_equal(self.rtr.generate(self.r), '/')