# HG changeset patch # User Matthew Wilkes # Date 1242403303 -7200 # Node ID 0d4b4aa5b9694474a2ae7a90d218f9fbf475488a # Parent 0a0e603215d73b87c5c91f4785ff6dcd75cc0dc9 Add some example function tests that use gaeftest diff -r 0a0e603215d7 -r 0d4b4aa5b969 tests/test_functional.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_functional.py Fri May 15 18:01:43 2009 +0200 @@ -0,0 +1,99 @@ +#!/usr/bin/python2.5 +# +# Copyright 2009 the Melange authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +__authors__ = [ + '"Matthew Wilkes" ', + ] + + +from gaeftest.test import FunctionalTestCase + +from zope.testbrowser import browser + +import os.path + +class MelangeFunctionalTestCase(FunctionalTestCase): + """A base class for all functional tests in Melange. + + Tests MUST NOT be defined here, but the superclass requires a path + attribute that points to the app.yaml. Utility functions MAY be + declared here to be shared by all functional tests, but any + overridden unittest methods MUST call the superclass version. + """ + + path = os.path.abspath(__file__+"/../../app/app.yaml") + + +class TestBranding(MelangeFunctionalTestCase): + """Tests that ensure Melange properly displays attribution. + + Other notices, as required by the project and/or law, are tested + here as well. + """ + + def test_attribution(self): + """Ensure that the front page asserts that it is a Melange app. + """ + + tb = browser.Browser() + tb.open("http://127.0.0.1:8080/site/show/site") + + self.assertTrue("Powered by Melange" in tb.contents) + +class TestLogin(MelangeFunctionalTestCase): + """Tests that check the login system is functioning correctly. + + Also tests that users go through the correct registration workflow. + """ + + def test_firstLogin(self): + """Ensure that new users are prompted to create a profile. + + Also test that only new users are prompted. + """ + + tb = browser.Browser() + tb.open("http://127.0.0.1:8080") + + tb.getLink("Sign in").click() + self.assertTrue("login" in tb.url) + + # fill in dev_appserver login form + tb.getForm().getControl("Email").value = "newuser@example.com" + tb.getForm().getControl("Login").click() + + self.assertTrue(tb.url.endswith("/show/site")) + self.assertTrue('Please create ' + 'User Profile in order to view this page' in tb.contents) + + tb.getLink("User Profile").click() + + # fill in the user profile + cp = tb.getForm(action="create_profile") + cp.getControl(name="link_id").value = "exampleuser" + cp.getControl(name="name").value = "Example user" + cp.getControl("Save").click() + + # if all is well, we go to the edit page + self.assertTrue("edit_profile" in tb.url) + + tb.open("http://127.0.0.1:8080") + + # call to action no longer on front page + self.assertFalse('Please create ' + 'User Profile in order to view this page' in tb.contents) +