Steve Piercy
2015-05-27 1521dbbb01f9290f4a50c3a7256504e4acdd3505
- clean up and make consistent across wiki tutorials
- update templates and static assets for new design
8 files deleted
3 files added
10 files modified
1011 ■■■■■ changed files
docs/tutorials/wiki/authorization.rst 2 ●●● patch | view | raw | blame | history
docs/tutorials/wiki/definingviews.rst 17 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/favicon.ico patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/footerbg.png patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/headerbg.png patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/ie6.css 8 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/middlebg.png patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/pylons.css 372 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/pyramid-16x16.png patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/pyramid-small.png patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/pyramid.png patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/theme.css 154 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/theme.min.css 1 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/static/transparent.gif patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/templates/edit.pt 122 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/templates/login.pt 120 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki/src/tests/tutorial/templates/view.pt 123 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/tests.rst 44 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/authorization.rst 2 ●●● patch | view | raw | blame | history
docs/tutorials/wiki2/definingviews.rst 5 ●●●●● patch | view | raw | blame | history
docs/tutorials/wiki2/tests.rst 41 ●●●● patch | view | raw | blame | history
docs/tutorials/wiki/authorization.rst
@@ -338,7 +338,7 @@
Only the highlighted lines need to be added or edited.
Viewing the Application in a Browser
Viewing the application in a browser
------------------------------------
We can finally examine our application in a browser (See
docs/tutorials/wiki/definingviews.rst
@@ -352,7 +352,7 @@
   See :ref:`renderer_system_values` for information about other names that
   are available by default when a template is used as a renderer.
Static Assets
Static assets
-------------
Our templates name static assets, including CSS and images.  We don't need
@@ -367,26 +367,25 @@
method ``static_url``, e.g.,
``request.static_url('<package>:static/foo.css')`` within templates.
Viewing the Application in a Browser
Viewing the application in a browser
====================================
We can finally examine our application in a browser (See
:ref:`wiki-start-the-application`).  Launch a browser and visit
each of the following URLs, checking that the result is as expected:
- ``http://localhost:6543/`` invokes the ``view_wiki`` view.  This always
- http://localhost:6543/ invokes the ``view_wiki`` view.  This always
  redirects to the ``view_page`` view of the ``FrontPage`` Page resource.
- ``http://localhost:6543/FrontPage/`` invokes the ``view_page`` view of the
  front page resource.  This is because it's the :term:`default view` (a view
- http://localhost:6543/FrontPage/ invokes the ``view_page`` view of the front
  page resource.  This is because it's the :term:`default view` (a view
  without a ``name``) for Page resources.
- ``http://localhost:6543/FrontPage/edit_page`` invokes the edit view for the
- http://localhost:6543/FrontPage/edit_page invokes the edit view for the
  ``FrontPage`` Page resource.
- ``http://localhost:6543/add_page/SomePageName`` invokes the add view for a
  Page.
- http://localhost:6543/add_page/SomePageName invokes the add view for a Page.
- To generate an error, visit ``http://localhost:6543/add_page`` which will
- To generate an error, visit http://localhost:6543/add_page which will
  generate an ``IndexErrorr: tuple index out of range`` error. You'll see an
  interactive traceback facility provided by :term:`pyramid_debugtoolbar`.
docs/tutorials/wiki/src/tests/tutorial/static/favicon.ico
Binary files differ
docs/tutorials/wiki/src/tests/tutorial/static/footerbg.png
Binary files differ
docs/tutorials/wiki/src/tests/tutorial/static/headerbg.png
Binary files differ
docs/tutorials/wiki/src/tests/tutorial/static/ie6.css
File was deleted
docs/tutorials/wiki/src/tests/tutorial/static/middlebg.png
Binary files differ
docs/tutorials/wiki/src/tests/tutorial/static/pylons.css
File was deleted
docs/tutorials/wiki/src/tests/tutorial/static/pyramid-16x16.png
docs/tutorials/wiki/src/tests/tutorial/static/pyramid-small.png
Binary files differ
docs/tutorials/wiki/src/tests/tutorial/static/pyramid.png

docs/tutorials/wiki/src/tests/tutorial/static/theme.css
New file
@@ -0,0 +1,154 @@
@import url(//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700);
body {
  font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-weight: 300;
  color: #ffffff;
  background: #bc2131;
}
h1,
h2,
h3,
h4,
h5,
h6 {
  font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-weight: 300;
}
p {
  font-weight: 300;
}
.font-normal {
  font-weight: 400;
}
.font-semi-bold {
  font-weight: 600;
}
.font-bold {
  font-weight: 700;
}
.starter-template {
  margin-top: 250px;
}
.starter-template .content {
  margin-left: 10px;
}
.starter-template .content h1 {
  margin-top: 10px;
  font-size: 60px;
}
.starter-template .content h1 .smaller {
  font-size: 40px;
  color: #f2b7bd;
}
.starter-template .content .lead {
  font-size: 25px;
  color: #f2b7bd;
}
.starter-template .content .lead .font-normal {
  color: #ffffff;
}
.starter-template .links {
  float: right;
  right: 0;
  margin-top: 125px;
}
.starter-template .links ul {
  display: block;
  padding: 0;
  margin: 0;
}
.starter-template .links ul li {
  list-style: none;
  display: inline;
  margin: 0 10px;
}
.starter-template .links ul li:first-child {
  margin-left: 0;
}
.starter-template .links ul li:last-child {
  margin-right: 0;
}
.starter-template .links ul li.current-version {
  color: #f2b7bd;
  font-weight: 400;
}
.starter-template .links ul li a, a {
  color: #f2b7bd;
  text-decoration: underline;
}
.starter-template .links ul li a:hover, a:hover {
  color: #ffffff;
  text-decoration: underline;
}
.starter-template .links ul li .icon-muted {
  color: #eb8b95;
  margin-right: 5px;
}
.starter-template .links ul li:hover .icon-muted {
  color: #ffffff;
}
.starter-template .copyright {
  margin-top: 10px;
  font-size: 0.9em;
  color: #f2b7bd;
  text-transform: lowercase;
  float: right;
  right: 0;
}
@media (max-width: 1199px) {
  .starter-template .content h1 {
    font-size: 45px;
  }
  .starter-template .content h1 .smaller {
    font-size: 30px;
  }
  .starter-template .content .lead {
    font-size: 20px;
  }
}
@media (max-width: 991px) {
  .starter-template {
    margin-top: 0;
  }
  .starter-template .logo {
    margin: 40px auto;
  }
  .starter-template .content {
    margin-left: 0;
    text-align: center;
  }
  .starter-template .content h1 {
    margin-bottom: 20px;
  }
  .starter-template .links {
    float: none;
    text-align: center;
    margin-top: 60px;
  }
  .starter-template .copyright {
    float: none;
    text-align: center;
  }
}
@media (max-width: 767px) {
  .starter-template .content h1 .smaller {
    font-size: 25px;
    display: block;
  }
  .starter-template .content .lead {
    font-size: 16px;
  }
  .starter-template .links {
    margin-top: 40px;
  }
  .starter-template .links ul li {
    display: block;
    margin: 0;
  }
  .starter-template .links ul li .icon-muted {
    display: none;
  }
  .starter-template .copyright {
    margin-top: 20px;
  }
}
docs/tutorials/wiki/src/tests/tutorial/static/theme.min.css
New file
@@ -0,0 +1 @@
@import url(//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700);body{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:300;color:#fff;background:#bc2131}h1,h2,h3,h4,h5,h6{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:300}p{font-weight:300}.font-normal{font-weight:400}.font-semi-bold{font-weight:600}.font-bold{font-weight:700}.starter-template{margin-top:250px}.starter-template .content{margin-left:10px}.starter-template .content h1{margin-top:10px;font-size:60px}.starter-template .content h1 .smaller{font-size:40px;color:#f2b7bd}.starter-template .content .lead{font-size:25px;color:#f2b7bd}.starter-template .content .lead .font-normal{color:#fff}.starter-template .links{float:right;right:0;margin-top:125px}.starter-template .links ul{display:block;padding:0;margin:0}.starter-template .links ul li{list-style:none;display:inline;margin:0 10px}.starter-template .links ul li:first-child{margin-left:0}.starter-template .links ul li:last-child{margin-right:0}.starter-template .links ul li.current-version{color:#f2b7bd;font-weight:400}.starter-template .links ul li a{color:#fff}.starter-template .links ul li a:hover{text-decoration:underline}.starter-template .links ul li .icon-muted{color:#eb8b95;margin-right:5px}.starter-template .links ul li:hover .icon-muted{color:#fff}.starter-template .copyright{margin-top:10px;font-size:.9em;color:#f2b7bd;text-transform:lowercase;float:right;right:0}@media (max-width:1199px){.starter-template .content h1{font-size:45px}.starter-template .content h1 .smaller{font-size:30px}.starter-template .content .lead{font-size:20px}}@media (max-width:991px){.starter-template{margin-top:0}.starter-template .logo{margin:40px auto}.starter-template .content{margin-left:0;text-align:center}.starter-template .content h1{margin-bottom:20px}.starter-template .links{float:none;text-align:center;margin-top:60px}.starter-template .copyright{float:none;text-align:center}}@media (max-width:767px){.starter-template .content h1 .smaller{font-size:25px;display:block}.starter-template .content .lead{font-size:16px}.starter-template .links{margin-top:40px}.starter-template .links ul li{display:block;margin:0}.starter-template .links ul li .icon-muted{display:none}.starter-template .copyright{margin-top:20px}}
docs/tutorials/wiki/src/tests/tutorial/static/transparent.gif
Binary files differ
docs/tutorials/wiki/src/tests/tutorial/templates/edit.pt
@@ -1,58 +1,72 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:tal="http://xml.zope.org/namespaces/tal">
<head>
  <title>${page.__name__} - Pyramid tutorial wiki (based on
      TurboGears 20-Minute Wiki)</title>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
  <meta name="keywords" content="python web application" />
  <meta name="description" content="pyramid web application" />
  <link rel="shortcut icon"
        href="/static/favicon.ico" />
  <link rel="stylesheet"
        href="/static/pylons.css"
        type="text/css" media="screen" charset="utf-8" />
  <!--[if lte IE 6]>
  <link rel="stylesheet"
        href="/static/ie6.css"
        type="text/css" media="screen" charset="utf-8" />
  <![endif]-->
</head>
<body>
  <div id="wrap">
    <div id="top-small">
      <div class="top-small align-center">
        <div>
          <img width="220" height="50" alt="pyramid"
        src="/static/pyramid-small.png" />
<!DOCTYPE html>
<html lang="${request.locale_name}">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="pyramid web application">
    <meta name="author" content="Pylons Project">
    <link rel="shortcut icon" href="${request.static_url('tutorial:static/pyramid-16x16.png')}">
    <title>${page.__name__} - Pyramid tutorial wiki (based on
    TurboGears 20-Minute Wiki)</title>
    <!-- Bootstrap core CSS -->
    <link href="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
    <!-- Custom styles for this scaffold -->
    <link href="${request.static_url('tutorial:static/theme.css')}" rel="stylesheet">
    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="//oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <div class="starter-template">
      <div class="container">
        <div class="row">
          <div class="col-md-2">
            <img class="logo img-responsive" src="${request.static_url('tutorial:static/pyramid.png')}" alt="pyramid web framework">
          </div>
          <div class="col-md-10">
            <div class="content">
              <p tal:condition="logged_in" class="pull-right">
                <a href="${request.application_url}/logout">Logout</a>
              </p>
              <p>
                  Editing <strong><span tal:replace="page.__name__">
                  Page Name Goes Here</span></strong>
              </p>
              <p>You can return to the
                <a href="${request.application_url}">FrontPage</a>.
              </p>
              <form action="${save_url}" method="post">
                <div class="form-group">
                  <textarea class="form-control" name="body" tal:content="page.data" rows="10" cols="60"></textarea>
                </div>
                <div class="form-group">
                  <button type="submit" name="form.submitted" value="Save" class="btn btn-default">Save</button>
                </div>
              </form>
            </div>
          </div>
        </div>
        <div class="row">
          <div class="copyright">
            Copyright &copy; Pylons Project
          </div>
        </div>
      </div>
    </div>
    <div id="middle">
      <div class="middle align-right">
        <div id="left" class="app-welcome align-left">
          Editing <b><span tal:replace="page.__name__">Page Name
            Goes Here</span></b><br/>
          You can return to the
          <a href="${request.application_url}">FrontPage</a>.<br/>
        </div>
        <div id="right" class="app-welcome align-right">
          <span tal:condition="logged_in">
              <a href="${request.application_url}/logout">Logout</a>
          </span>
        </div>
      </div>
    </div>
    <div id="bottom">
      <div class="bottom">
        <form action="${save_url}" method="post">
          <textarea name="body" tal:content="page.data" rows="10"
                    cols="60"/><br/>
          <input type="submit" name="form.submitted" value="Save"/>
        </form>
      </div>
    </div>
  </div>
</body>
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="//oss.maxcdn.com/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/js/bootstrap.min.js"></script>
  </body>
</html>
docs/tutorials/wiki/src/tests/tutorial/templates/login.pt
@@ -1,54 +1,74 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:tal="http://xml.zope.org/namespaces/tal">
<head>
  <title>Login - Pyramid tutorial wiki (based on TurboGears
    20-Minute Wiki)</title>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
  <meta name="keywords" content="python web application" />
  <meta name="description" content="pyramid web application" />
  <link rel="shortcut icon"
        href="/static/favicon.ico" />
  <link rel="stylesheet"
        href="/static/pylons.css"
        type="text/css" media="screen" charset="utf-8" />
  <!--[if lte IE 6]>
  <link rel="stylesheet"
        href="/static/ie6.css"
        type="text/css" media="screen" charset="utf-8" />
  <![endif]-->
</head>
<body>
  <div id="wrap">
    <div id="top-small">
      <div class="top-small align-center">
        <div>
          <img width="220" height="50" alt="pyramid"
        src="/static/pyramid-small.png" />
<!DOCTYPE html>
<html lang="${request.locale_name}">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="pyramid web application">
    <meta name="author" content="Pylons Project">
    <link rel="shortcut icon" href="${request.static_url('tutorial:static/pyramid-16x16.png')}">
    <title>Login - Pyramid tutorial wiki (based on
    TurboGears 20-Minute Wiki)</title>
    <!-- Bootstrap core CSS -->
    <link href="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
    <!-- Custom styles for this scaffold -->
    <link href="${request.static_url('tutorial:static/theme.css')}" rel="stylesheet">
    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="//oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <div class="starter-template">
      <div class="container">
        <div class="row">
          <div class="col-md-2">
            <img class="logo img-responsive" src="${request.static_url('tutorial:static/pyramid.png')}" alt="pyramid web framework">
          </div>
          <div class="col-md-10">
            <div class="content">
              <p>
                <strong>
                  Login
                </strong><br>
                <span tal:replace="message"></span>
              </p>
              <form action="${url}" method="post">
                <input type="hidden" name="came_from" value="${came_from}">
                <div class="form-group">
                  <label for="login">Username</label>
                  <input type="text" name="login" value="${login}">
                </div>
                <div class="form-group">
                  <label for="password">Password</label>
                  <input type="password" name="password" value="${password}">
                </div>
                <div class="form-group">
                  <button type="submit" name="form.submitted" value="Log In" class="btn btn-default">Log In</button>
                </div>
              </form>
            </div>
          </div>
        </div>
        <div class="row">
          <div class="copyright">
            Copyright &copy; Pylons Project
          </div>
        </div>
      </div>
    </div>
    <div id="middle">
      <div class="middle align-right">
        <div id="left" class="app-welcome align-left">
          <b>Login</b><br/>
          <span tal:replace="message"/>
        </div>
        <div id="right" class="app-welcome align-right"></div>
      </div>
    </div>
    <div id="bottom">
      <div class="bottom">
        <form action="${url}" method="post">
          <input type="hidden" name="came_from" value="${came_from}"/>
          <input type="text" name="login" value="${login}"/><br/>
          <input type="password" name="password"
                 value="${password}"/><br/>
          <input type="submit" name="form.submitted" value="Log In"/>
        </form>
      </div>
    </div>
  </div>
</body>
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="//oss.maxcdn.com/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/js/bootstrap.min.js"></script>
  </body>
</html>
docs/tutorials/wiki/src/tests/tutorial/templates/view.pt
@@ -1,61 +1,72 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:tal="http://xml.zope.org/namespaces/tal">
<head>
  <title>${page.__name__} - Pyramid tutorial wiki (based on
<!DOCTYPE html>
<html lang="${request.locale_name}">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="pyramid web application">
    <meta name="author" content="Pylons Project">
    <link rel="shortcut icon" href="${request.static_url('tutorial:static/pyramid-16x16.png')}">
    <title>${page.__name__} - Pyramid tutorial wiki (based on
    TurboGears 20-Minute Wiki)</title>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
  <meta name="keywords" content="python web application" />
  <meta name="description" content="pyramid web application" />
  <link rel="shortcut icon"
        href="/static/favicon.ico" />
  <link rel="stylesheet"
        href="/static/pylons.css"
        type="text/css" media="screen" charset="utf-8" />
  <!--[if lte IE 6]>
  <link rel="stylesheet"
        href="/static/ie6.css"
        type="text/css" media="screen" charset="utf-8" />
  <![endif]-->
</head>
<body>
  <div id="wrap">
    <div id="top-small">
      <div class="top-small align-center">
        <div>
          <img width="220" height="50" alt="pyramid"
        src="/static/pyramid-small.png" />
    <!-- Bootstrap core CSS -->
    <link href="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
    <!-- Custom styles for this scaffold -->
    <link href="${request.static_url('tutorial:static/theme.css')}" rel="stylesheet">
    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="//oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <div class="starter-template">
      <div class="container">
        <div class="row">
          <div class="col-md-2">
            <img class="logo img-responsive" src="${request.static_url('tutorial:static/pyramid.png')}" alt="pyramid web framework">
          </div>
          <div class="col-md-10">
            <div class="content">
              <p tal:condition="logged_in" class="pull-right">
                <a href="${request.application_url}/logout">Logout</a>
              </p>
              <div tal:replace="structure content">
                Page text goes here.
              </div>
              <p>
                <a tal:attributes="href edit_url" href="">
                  Edit this page
                </a>
              </p>
              <p>
                  Viewing <strong><span tal:replace="page.__name__">
                  Page Name Goes Here</span></strong>
              </p>
              <p>You can return to the
                <a href="${request.application_url}">FrontPage</a>.
              </p>
            </div>
          </div>
        </div>
        <div class="row">
          <div class="copyright">
            Copyright &copy; Pylons Project
          </div>
        </div>
      </div>
    </div>
    <div id="middle">
      <div class="middle align-right">
        <div id="left" class="app-welcome align-left">
          Viewing <b><span tal:replace="page.__name__">Page Name
            Goes Here</span></b><br/>
          You can return to the
          <a href="${request.application_url}">FrontPage</a>.<br/>
        </div>
        <div id="right" class="app-welcome align-right">
          <span tal:condition="logged_in">
            <a href="${request.application_url}/logout">Logout</a>
          </span>
        </div>
      </div>
    </div>
    <div id="bottom">
      <div class="bottom">
        <div tal:replace="structure content">
          Page text goes here.
        </div>
        <p>
          <a tal:attributes="href edit_url" href="">
            Edit this page
          </a>
        </p>
      </div>
    </div>
  </div>
</body>
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="//oss.maxcdn.com/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/js/bootstrap.min.js"></script>
  </body>
</html>
docs/tutorials/wiki/tests.rst
@@ -2,38 +2,36 @@
Adding Tests
============
We will now add tests for the models and the views and a few functional
tests in the ``tests.py``.  Tests ensure that an application works, and
that it continues to work after some changes are made in the future.
We will now add tests for the models and the views and a few functional tests
in ``tests.py``.  Tests ensure that an application works, and that it
continues to work when changes are made in the future.
Test the Models
Test the models
===============
We write tests for the model classes and the appmaker.  Changing
``tests.py``, we'll write a separate test class for each model class, and
We write tests for the ``model`` classes and the ``appmaker``.  Changing
``tests.py``, we'll write a separate test class for each ``model`` class, and
we'll write a test class for the ``appmaker``.
To do so, we'll retain the ``tutorial.tests.ViewTests`` class that was
generated as part of the ``zodb`` scaffold.  We'll add three test
classes: one for the ``Page`` model named ``PageModelTests``, one for the
``Wiki`` model named ``WikiModelTests``, and one for the appmaker named
``AppmakerTests``.
generated as part of the ``zodb`` scaffold.  We'll add three test classes: one
for the ``Page`` model named ``PageModelTests``, one for the ``Wiki`` model
named ``WikiModelTests``, and one for the appmaker named ``AppmakerTests``.
Test the Views
Test the views
==============
We'll modify our ``tests.py`` file, adding tests for each view function we
added above.  As a result, we'll *delete* the ``ViewTests`` test in the file,
and add four other test classes: ``ViewWikiTests``, ``ViewPageTests``,
``AddPageTests``, and ``EditPageTests``.  These test the ``view_wiki``,
``view_page``, ``add_page``, and ``edit_page`` views respectively.
added previously.  As a result, we'll *delete* the ``ViewTests`` class that
the ``zodb`` scaffold provided, and add four other test classes:
``ViewWikiTests``, ``ViewPageTests``, ``AddPageTests``, and ``EditPageTests``.
These test the ``view_wiki``, ``view_page``, ``add_page``, and ``edit_page``
views.
Functional tests
================
We test the whole application, covering security aspects that are not
We'll test the whole application, covering security aspects that are not
tested in the unit tests, like logging in, logging out, checking that
the ``viewer`` user cannot add or edit pages, but the ``editor`` user
can, and so on.
@@ -41,14 +39,14 @@
View the results of all our edits to ``tests.py``
=================================================
Once we're done with the ``tests.py`` module, it will look a lot like the
below:
Open the ``tutorial/tests.py`` module, and edit it such that it appears as
follows:
.. literalinclude:: src/tests/tutorial/tests.py
   :linenos:
   :language: python
Running the Tests
Running the tests
=================
We can run these tests by using ``setup.py test`` in the same way we did in
@@ -62,7 +60,7 @@
   :lines: 11-22
   :emphasize-lines: 11
After we've added a dependency on WebTest in ``setup.py``, we need to rerun
After we've added a dependency on WebTest in ``setup.py``, we need to run
``setup.py develop`` to get WebTest installed into our virtualenv.  Assuming
our shell's current working directory is the "tutorial" distribution
directory:
@@ -94,7 +92,7 @@
   c:\pyramidtut\tutorial> %VENV%\Scripts\python setup.py test -q
The expected result looks something like:
The expected result should look like the following:
.. code-block:: text
docs/tutorials/wiki2/authorization.rst
@@ -374,7 +374,7 @@
Only the highlighted lines need to be added or edited.
Viewing the Application in a Browser
Viewing the application in a browser
------------------------------------
We can finally examine our application in a browser (See
docs/tutorials/wiki2/definingviews.rst
@@ -345,14 +345,14 @@
The highlighted lines are the ones that need to be added or edited.
Viewing the Application in a Browser
Viewing the application in a browser
====================================
We can finally examine our application in a browser (See
:ref:`wiki2-start-the-application`).  Launch a browser and visit
each of the following URLs, checking that the result is as expected:
- ``http://localhost:6543/`` invokes the ``view_wiki`` view.  This always
- http://localhost:6543/ invokes the ``view_wiki`` view.  This always
  redirects to the ``view_page`` view of the ``FrontPage`` page object.
- http://localhost:6543/FrontPage invokes the ``view_page`` view of the front
@@ -367,4 +367,3 @@
  will generate a ``NoResultFound: No row was found for one()`` error. You'll
  see an interactive traceback facility provided by
  :term:`pyramid_debugtoolbar`.
docs/tutorials/wiki2/tests.rst
@@ -2,26 +2,25 @@
Adding Tests
============
We will now add tests for the models and the views and a few functional
tests in ``tests.py``.  Tests ensure that an application works, and
that it continues to work when changes are made in the future.
We will now add tests for the models and the views and a few functional tests
in ``tests.py``.  Tests ensure that an application works, and that it
continues to work when changes are made in the future.
Testing the Models
==================
Test the models
===============
To test the model class ``Page`` we'll add a new ``PageModelTests``
class to our ``tests.py`` file that was generated as part of the
``alchemy`` scaffold.
To test the model class ``Page`` we'll add a new ``PageModelTests`` class to
our ``tests.py`` file that was generated as part of the ``alchemy`` scaffold.
Testing the Views
=================
Test the views
==============
We'll modify our ``tests.py`` file, adding tests for each view
function we added previously.  As a result, we'll *delete* the
``ViewTests`` class that the ``alchemy`` scaffold provided, and add
four other test classes: ``ViewWikiTests``, ``ViewPageTests``,
``AddPageTests``, and ``EditPageTests``.  These test the
``view_wiki``, ``view_page``, ``add_page``, and ``edit_page`` views.
We'll modify our ``tests.py`` file, adding tests for each view function we
added previously.  As a result, we'll *delete* the ``ViewTests`` class that
the ``alchemy`` scaffold provided, and add four other test classes:
``ViewWikiTests``, ``ViewPageTests``, ``AddPageTests``, and ``EditPageTests``.
These test the ``view_wiki``, ``view_page``, ``add_page``, and ``edit_page``
views.
Functional tests
================
@@ -31,8 +30,8 @@
the ``viewer`` user cannot add or edit pages, but the ``editor`` user
can, and so on.
Viewing the results of all our edits to ``tests.py``
====================================================
View the results of all our edits to ``tests.py``
=================================================
Open the ``tutorial/tests.py`` module, and edit it such that it appears as
follows:
@@ -41,7 +40,7 @@
   :linenos:
   :language: python
Running the Tests
Running the tests
=================
We can run these tests by using ``setup.py test`` in the same way we did in
@@ -55,7 +54,7 @@
   :lines: 11-22
   :emphasize-lines: 11
After we've added a dependency on WebTest in ``setup.py``, we need to rerun
After we've added a dependency on WebTest in ``setup.py``, we need to run
``setup.py develop`` to get WebTest installed into our virtualenv.  Assuming
our shell's current working directory is the "tutorial" distribution
directory:
@@ -87,7 +86,7 @@
   c:\pyramidtut\tutorial> %VENV%\Scripts\python setup.py test -q
The expected result ends something like:
The expected result should look like the following:
.. code-block:: text