Merge lp:~cjwatson/launchpad/test-domain into lp:launchpad

Proposed by Colin Watson
Status: Merged
Merged at revision: 18969
Proposed branch: lp:~cjwatson/launchpad/test-domain
Merge into: lp:launchpad
Diff against target: 45060 lines (+5838/-5838)
726 files modified
Makefile (+6/-6)
configs/README.txt (+2/-2)
configs/development/launchpad-lazr.conf (+50/-50)
configs/development/local-launchpad-apache (+21/-21)
configs/development/txpkgupload.yaml (+1/-1)
configs/testrunner-appserver/launchpad-lazr.conf (+12/-12)
configs/testrunner/launchpad-lazr.conf (+7/-7)
constraints.txt (+1/-1)
database/sampledata/README (+3/-3)
database/sampledata/current-dev.sql (+3/-3)
database/sampledata/current.sql (+3/-3)
database/schema/Makefile (+1/-1)
lib/canonical/launchpad/icing/css/forms.css (+3/-3)
lib/canonical/launchpad/icing/style.css (+7/-7)
lib/launchpad_loggerhead/tests.py (+1/-1)
lib/lp/answers/browser/tests/faq-views.txt (+2/-2)
lib/lp/answers/doc/notifications.txt (+4/-4)
lib/lp/answers/stories/answer-contact-report.txt (+4/-4)
lib/lp/answers/stories/distribution-package-answer-contact.txt (+2/-2)
lib/lp/answers/stories/faq-add.txt (+5/-5)
lib/lp/answers/stories/faq-browse-and-search.txt (+9/-9)
lib/lp/answers/stories/faq-edit.txt (+7/-7)
lib/lp/answers/stories/project-add-question.txt (+8/-8)
lib/lp/answers/stories/question-add-in-other-languages.txt (+4/-4)
lib/lp/answers/stories/question-add.txt (+4/-4)
lib/lp/answers/stories/question-answer-contact.txt (+6/-6)
lib/lp/answers/stories/question-answers-vhost.txt (+5/-5)
lib/lp/answers/stories/question-browse-and-search.txt (+28/-28)
lib/lp/answers/stories/question-compatibility-urls.txt (+42/-42)
lib/lp/answers/stories/question-edit.txt (+8/-8)
lib/lp/answers/stories/question-message.txt (+2/-2)
lib/lp/answers/stories/question-obfuscation.txt (+3/-3)
lib/lp/answers/stories/question-overview.txt (+26/-26)
lib/lp/answers/stories/question-reject-and-change-status.txt (+8/-8)
lib/lp/answers/stories/question-search-multiple-languages.txt (+13/-13)
lib/lp/answers/stories/question-subscriptions.txt (+3/-3)
lib/lp/answers/stories/question-workflow.txt (+8/-8)
lib/lp/answers/stories/questions-index.txt (+3/-3)
lib/lp/answers/stories/this-is-a-faq.txt (+16/-16)
lib/lp/answers/stories/webservice.txt (+14/-14)
lib/lp/app/browser/doc/base-layout.txt (+5/-5)
lib/lp/app/browser/doc/launchpad-search-pages.txt (+5/-5)
lib/lp/app/browser/doc/menu.txt (+13/-13)
lib/lp/app/browser/launchpad.py (+1/-1)
lib/lp/app/browser/tests/test_base_layout.py (+1/-1)
lib/lp/app/browser/tests/test_formatters.py (+3/-3)
lib/lp/app/browser/tests/test_launchpad.py (+6/-6)
lib/lp/app/browser/tests/test_launchpadroot.py (+3/-3)
lib/lp/app/browser/tests/test_macro_view.py (+1/-1)
lib/lp/app/browser/tests/test_page_macro.py (+1/-1)
lib/lp/app/browser/tests/test_vocabulary.py (+8/-8)
lib/lp/app/doc/displaying-paragraphs-of-text.txt (+6/-6)
lib/lp/app/doc/hierarchical-menu.txt (+10/-10)
lib/lp/app/doc/launchpadform.txt (+1/-1)
lib/lp/app/doc/lazr-js-widgets.txt (+8/-8)
lib/lp/app/doc/menus.txt (+60/-60)
lib/lp/app/doc/tales.txt (+33/-33)
lib/lp/app/doc/textformatting.txt (+3/-3)
lib/lp/app/javascript/subscribers/subscribers_list.js (+1/-1)
lib/lp/app/javascript/testing/tests/test_mockio.js (+1/-1)
lib/lp/app/javascript/tests/test_hide_comment.js (+3/-3)
lib/lp/app/javascript/tests/test_lp.js (+3/-3)
lib/lp/app/stories/basics/copyright.txt (+2/-2)
lib/lp/app/stories/basics/demo-and-lpnet.txt (+2/-2)
lib/lp/app/stories/basics/marketing.txt (+93/-93)
lib/lp/app/stories/basics/max-batch-size.txt (+1/-1)
lib/lp/app/stories/basics/notfound-error.txt (+2/-2)
lib/lp/app/stories/basics/notfound-traversals.txt (+4/-4)
lib/lp/app/stories/basics/page-request-summaries.txt (+2/-2)
lib/lp/app/stories/basics/user-requested-oops.txt (+2/-2)
lib/lp/app/stories/basics/xx-dbpolicy.txt (+13/-13)
lib/lp/app/stories/basics/xx-launchpad-statistics.txt (+2/-2)
lib/lp/app/stories/basics/xx-lowercase-redirection.txt (+10/-10)
lib/lp/app/stories/basics/xx-offsite-form-post.txt (+16/-16)
lib/lp/app/stories/basics/xx-opstats.txt (+10/-10)
lib/lp/app/stories/basics/xx-pagetest-logging.txt (+2/-2)
lib/lp/app/stories/basics/xx-preferred-charsets.txt (+1/-1)
lib/lp/app/stories/form/xx-form-layout.txt (+6/-6)
lib/lp/app/stories/launchpad-root/front-pages.txt (+20/-20)
lib/lp/app/stories/launchpad-root/xx-featuredprojects.txt (+9/-9)
lib/lp/app/stories/launchpad-search/site-search.txt (+9/-9)
lib/lp/app/tests/test_services.py (+3/-3)
lib/lp/app/tests/test_tales.py (+1/-1)
lib/lp/archivepublisher/tests/test_generate_ppa_htaccess.py (+1/-1)
lib/lp/archiveuploader/tests/nascentupload-announcements.txt (+2/-2)
lib/lp/blueprints/browser/tests/sprintattendance-views.txt (+2/-2)
lib/lp/blueprints/browser/tests/test_specification.py (+2/-2)
lib/lp/blueprints/browser/tests/test_specificationtarget.py (+1/-1)
lib/lp/blueprints/doc/specification-notifications.txt (+5/-5)
lib/lp/blueprints/stories/blueprints/xx-buglinks.txt (+5/-5)
lib/lp/blueprints/stories/blueprints/xx-creation.txt (+54/-54)
lib/lp/blueprints/stories/blueprints/xx-dependencies.txt (+34/-34)
lib/lp/blueprints/stories/blueprints/xx-distrorelease.txt (+13/-13)
lib/lp/blueprints/stories/blueprints/xx-editing.txt (+17/-17)
lib/lp/blueprints/stories/blueprints/xx-milestones.txt (+6/-6)
lib/lp/blueprints/stories/blueprints/xx-non-ascii-imagemap.txt (+3/-3)
lib/lp/blueprints/stories/blueprints/xx-productseries.txt (+11/-11)
lib/lp/blueprints/stories/blueprints/xx-superseding-within-projects.txt (+5/-5)
lib/lp/blueprints/stories/blueprints/xx-superseding.txt (+4/-4)
lib/lp/blueprints/stories/sprints/sprint-settopics.txt (+10/-10)
lib/lp/blueprints/stories/sprints/xx-sprint-meeting-export.txt (+2/-2)
lib/lp/blueprints/stories/sprints/xx-sprints.txt (+30/-30)
lib/lp/blueprints/stories/standalone/sprint-links.txt (+4/-4)
lib/lp/blueprints/stories/standalone/subscribing.txt (+9/-9)
lib/lp/blueprints/stories/standalone/xx-batching.txt (+11/-11)
lib/lp/blueprints/stories/standalone/xx-branch-links.txt (+7/-7)
lib/lp/blueprints/stories/standalone/xx-index.txt (+7/-7)
lib/lp/blueprints/stories/standalone/xx-informational-blueprints.txt (+4/-4)
lib/lp/blueprints/stories/standalone/xx-overview.txt (+12/-12)
lib/lp/blueprints/stories/standalone/xx-personviews.txt (+2/-2)
lib/lp/blueprints/stories/standalone/xx-retargeting.txt (+7/-7)
lib/lp/blueprints/stories/standalone/xx-views.txt (+23/-23)
lib/lp/blueprints/tests/test_webservice.py (+1/-1)
lib/lp/bugs/browser/tests/bug-views.txt (+4/-4)
lib/lp/bugs/browser/tests/buglinktarget-views.txt (+2/-2)
lib/lp/bugs/browser/tests/bugtarget-filebug-views.txt (+2/-2)
lib/lp/bugs/browser/tests/person-bug-views.txt (+5/-5)
lib/lp/bugs/browser/tests/test_breadcrumbs.py (+4/-4)
lib/lp/bugs/browser/tests/test_bug_views.py (+3/-3)
lib/lp/bugs/browser/tests/test_bugattachment_file_access.py (+1/-1)
lib/lp/bugs/browser/tests/test_bugcomment.py (+1/-1)
lib/lp/bugs/browser/tests/test_buglisting.py (+1/-1)
lib/lp/bugs/browser/tests/test_bugsupervisor.py (+2/-2)
lib/lp/bugs/browser/tests/test_bugtarget_configure.py (+4/-4)
lib/lp/bugs/browser/tests/test_bugtarget_filebug.py (+2/-2)
lib/lp/bugs/browser/tests/test_bugtask_navigation.py (+2/-2)
lib/lp/bugs/browser/tests/test_cve.py (+5/-5)
lib/lp/bugs/doc/bug-change.txt (+4/-4)
lib/lp/bugs/doc/bug-export.txt (+1/-1)
lib/lp/bugs/doc/bugnotification-email.txt (+4/-4)
lib/lp/bugs/doc/bugnotification-sending.txt (+11/-11)
lib/lp/bugs/doc/bugtracker-tokens.txt (+2/-2)
lib/lp/bugs/doc/externalbugtracker-bugzilla-api.txt (+2/-2)
lib/lp/bugs/doc/externalbugtracker-bugzilla-lp-plugin.txt (+1/-1)
lib/lp/bugs/doc/externalbugtracker-trac-lp-plugin.txt (+2/-2)
lib/lp/bugs/doc/initial-bug-contacts.txt (+1/-1)
lib/lp/bugs/doc/malone-xmlrpc.txt (+5/-5)
lib/lp/bugs/feed/bug.py (+1/-1)
lib/lp/bugs/javascript/tests/test_async_comment_loading.js (+1/-1)
lib/lp/bugs/javascript/tests/test_filebug_dupefinder.html (+2/-2)
lib/lp/bugs/javascript/tests/test_filebug_dupefinder.js (+3/-3)
lib/lp/bugs/mail/tests/test_commands.py (+1/-1)
lib/lp/bugs/mail/tests/test_handler.py (+10/-10)
lib/lp/bugs/stories/bug-also-affects/xx-also-affects-distribution-default-values.txt (+2/-2)
lib/lp/bugs/stories/bug-also-affects/xx-also-affects-new-upstream.txt (+5/-5)
lib/lp/bugs/stories/bug-also-affects/xx-bug-also-affects.txt (+48/-48)
lib/lp/bugs/stories/bug-also-affects/xx-bugtracker-information.txt (+3/-3)
lib/lp/bugs/stories/bug-also-affects/xx-duplicate-bugwatches.txt (+3/-3)
lib/lp/bugs/stories/bug-also-affects/xx-request-distribution-no-release-fix.txt (+6/-6)
lib/lp/bugs/stories/bug-also-affects/xx-upstream-bugtracker-links.txt (+9/-9)
lib/lp/bugs/stories/bug-privacy/xx-bug-privacy.txt (+12/-12)
lib/lp/bugs/stories/bug-privacy/xx-presenting-private-bugs.txt (+10/-10)
lib/lp/bugs/stories/bug-release-management/nomination-navigation.txt (+6/-6)
lib/lp/bugs/stories/bug-release-management/xx-anonymous-bug-nomination.txt (+1/-1)
lib/lp/bugs/stories/bug-release-management/xx-bug-release-management.txt (+23/-23)
lib/lp/bugs/stories/bug-tags/xx-official-bug-tags.txt (+12/-12)
lib/lp/bugs/stories/bug-tags/xx-searching-for-tags.txt (+4/-4)
lib/lp/bugs/stories/bug-tags/xx-tags-on-bug-listings-page.txt (+7/-7)
lib/lp/bugs/stories/bug-tags/xx-tags-on-bug-page.txt (+9/-9)
lib/lp/bugs/stories/bugattachments/xx-attachments-to-bug-report.txt (+4/-4)
lib/lp/bugs/stories/bugattachments/xx-bugattachments.txt (+31/-31)
lib/lp/bugs/stories/bugattachments/xx-delete-bug-attachment.txt (+3/-3)
lib/lp/bugs/stories/bugattachments/xx-display-filesize-attachment.txt (+4/-4)
lib/lp/bugs/stories/bugs/bug-add-subscriber.txt (+18/-18)
lib/lp/bugs/stories/bugs/xx-add-comment-bugtask-edit.txt (+2/-2)
lib/lp/bugs/stories/bugs/xx-add-comment-distribution-no-current-release.txt (+2/-2)
lib/lp/bugs/stories/bugs/xx-add-comment-with-bugwatch-and-cve.txt (+2/-2)
lib/lp/bugs/stories/bugs/xx-bug-activity.txt (+27/-27)
lib/lp/bugs/stories/bugs/xx-bug-affects-me-too.txt (+1/-1)
lib/lp/bugs/stories/bugs/xx-bug-comment-attach-file.txt (+11/-11)
lib/lp/bugs/stories/bugs/xx-bug-comments-truncated.txt (+5/-5)
lib/lp/bugs/stories/bugs/xx-bug-create-question.txt (+8/-8)
lib/lp/bugs/stories/bugs/xx-bug-edit.txt (+8/-8)
lib/lp/bugs/stories/bugs/xx-bug-heat-on-bug-page.txt (+1/-1)
lib/lp/bugs/stories/bugs/xx-bug-hidden-comments.txt (+7/-7)
lib/lp/bugs/stories/bugs/xx-bug-index-lots-of-comments.txt (+3/-3)
lib/lp/bugs/stories/bugs/xx-bug-index.txt (+17/-17)
lib/lp/bugs/stories/bugs/xx-bug-nomination-table-row.txt (+4/-4)
lib/lp/bugs/stories/bugs/xx-bug-obfuscation.txt (+2/-2)
lib/lp/bugs/stories/bugs/xx-bug-single-comment-view.txt (+3/-3)
lib/lp/bugs/stories/bugs/xx-bug-text-pages.txt (+26/-26)
lib/lp/bugs/stories/bugs/xx-bugs-advanced-search-upstream-status.txt (+11/-11)
lib/lp/bugs/stories/bugs/xx-bugs.txt (+1/-1)
lib/lp/bugs/stories/bugs/xx-bugtask-assignee-widget.txt (+3/-3)
lib/lp/bugs/stories/bugs/xx-distribution-bugs-page.txt (+8/-8)
lib/lp/bugs/stories/bugs/xx-distributionsourcepackage-bugs.txt (+1/-1)
lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt (+6/-6)
lib/lp/bugs/stories/bugs/xx-duplicate-of-private-bug.txt (+3/-3)
lib/lp/bugs/stories/bugs/xx-edit-no-currentrelease-distribution-task.txt (+1/-1)
lib/lp/bugs/stories/bugs/xx-front-page-bug-lists.txt (+1/-1)
lib/lp/bugs/stories/bugs/xx-front-page-info.txt (+5/-5)
lib/lp/bugs/stories/bugs/xx-front-page-search.txt (+16/-16)
lib/lp/bugs/stories/bugs/xx-front-page-statistics.txt (+1/-1)
lib/lp/bugs/stories/bugs/xx-incomplete-bugs.txt (+20/-20)
lib/lp/bugs/stories/bugs/xx-link-bug-to-branch.txt (+4/-4)
lib/lp/bugs/stories/bugs/xx-malone-homepage.txt (+4/-4)
lib/lp/bugs/stories/bugs/xx-numbered-comments.txt (+1/-1)
lib/lp/bugs/stories/bugs/xx-portlets-bug-milestones.txt (+3/-3)
lib/lp/bugs/stories/bugs/xx-portlets-bug-series.txt (+23/-23)
lib/lp/bugs/stories/bugs/xx-product-bugs-page.txt (+11/-11)
lib/lp/bugs/stories/bugs/xx-project-bugs-page.txt (+1/-1)
lib/lp/bugs/stories/bugs/xx-remote-bug-comments.txt (+4/-4)
lib/lp/bugs/stories/bugs/xx-switch-to-malone.txt (+4/-4)
lib/lp/bugs/stories/bugs/xx-unique-ids-on-bug-page.txt (+1/-1)
lib/lp/bugs/stories/bugtask-management/xx-bug-importance-change.txt (+7/-7)
lib/lp/bugs/stories/bugtask-management/xx-bug-privileged-statuses.txt (+10/-10)
lib/lp/bugs/stories/bugtask-management/xx-bugtask-edit-forms.txt (+6/-6)
lib/lp/bugs/stories/bugtask-management/xx-change-assignee.txt (+8/-8)
lib/lp/bugs/stories/bugtask-management/xx-change-milestone.txt (+5/-5)
lib/lp/bugs/stories/bugtask-management/xx-edit-email-address-bugtask.txt (+10/-10)
lib/lp/bugs/stories/bugtask-management/xx-subscribe-while-editing.txt (+2/-2)
lib/lp/bugs/stories/bugtask-management/xx-view-editable-bug-task.txt (+3/-3)
lib/lp/bugs/stories/bugtask-searches/xx-advanced-people-filters.txt (+13/-13)
lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-blueprints.txt (+1/-1)
lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-branches.txt (+4/-4)
lib/lp/bugs/stories/bugtask-searches/xx-listing-basics.txt (+24/-24)
lib/lp/bugs/stories/bugtask-searches/xx-old-urls-still-work.txt (+5/-5)
lib/lp/bugs/stories/bugtask-searches/xx-person-bugs.txt (+16/-16)
lib/lp/bugs/stories/bugtask-searches/xx-searching-by-tags.txt (+5/-5)
lib/lp/bugs/stories/bugtask-searches/xx-unexpected-form-data.txt (+1/-1)
lib/lp/bugs/stories/bugtracker/bugtrackers-index.txt (+8/-8)
lib/lp/bugs/stories/bugtracker/xx-bugtracker-handshake-tokens.txt (+2/-2)
lib/lp/bugs/stories/bugtracker/xx-bugtracker-remote-bug.txt (+23/-23)
lib/lp/bugs/stories/bugtracker/xx-bugtracker.txt (+45/-45)
lib/lp/bugs/stories/bugtracker/xx-reschedule-all-watches.txt (+1/-1)
lib/lp/bugs/stories/bugwatches/xx-bugtask-bugwatch-linkage.txt (+7/-7)
lib/lp/bugs/stories/bugwatches/xx-bugwatch-comments.txt (+3/-3)
lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt (+7/-7)
lib/lp/bugs/stories/bugwatches/xx-edit-bugwatch.txt (+14/-14)
lib/lp/bugs/stories/cve/cve-linking.txt (+5/-5)
lib/lp/bugs/stories/cve/cve-pages.txt (+8/-8)
lib/lp/bugs/stories/cve/xx-cve-link-xss.txt (+1/-1)
lib/lp/bugs/stories/distribution/xx-distribution-filebug-error-handling.txt (+2/-2)
lib/lp/bugs/stories/feeds/xx-bug-atom.txt (+60/-60)
lib/lp/bugs/stories/feeds/xx-bug-html.txt (+15/-15)
lib/lp/bugs/stories/guided-filebug/xx-bug-reporting-guidelines.txt (+16/-16)
lib/lp/bugs/stories/guided-filebug/xx-bug-reporting-tools.txt (+12/-12)
lib/lp/bugs/stories/guided-filebug/xx-displaying-similar-bugs.txt (+9/-9)
lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug-tags.txt (+2/-2)
lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug.txt (+6/-6)
lib/lp/bugs/stories/guided-filebug/xx-distro-sourcepackage-guided-filebug.txt (+2/-2)
lib/lp/bugs/stories/guided-filebug/xx-filebug-attachments.txt (+4/-4)
lib/lp/bugs/stories/guided-filebug/xx-filebug-tags.txt (+3/-3)
lib/lp/bugs/stories/guided-filebug/xx-no-launchpadder.txt (+9/-9)
lib/lp/bugs/stories/guided-filebug/xx-options-for-bug-supervisors.txt (+4/-4)
lib/lp/bugs/stories/guided-filebug/xx-product-guided-filebug.txt (+10/-10)
lib/lp/bugs/stories/guided-filebug/xx-productseries-guided-filebug.txt (+2/-2)
lib/lp/bugs/stories/guided-filebug/xx-project-guided-filebug.txt (+5/-5)
lib/lp/bugs/stories/guided-filebug/xx-sorting-by-relevance.txt (+2/-2)
lib/lp/bugs/stories/guided-filebug/xx-ubuntu-filebug.txt (+17/-17)
lib/lp/bugs/stories/patches-view/patches-view.txt (+9/-9)
lib/lp/bugs/stories/standalone/xx-filebug-package-chooser-radio-buttons.txt (+3/-3)
lib/lp/bugs/stories/standalone/xx-show-distribution-cve-report.txt (+3/-3)
lib/lp/bugs/stories/standalone/xx-show-distrorelease-cve-report.txt (+2/-2)
lib/lp/bugs/stories/structural-subscriptions/xx-bug-subscriptions.txt (+12/-12)
lib/lp/bugs/stories/upstream-bugprivacy/xx-upstream-bug-privacy.txt (+5/-5)
lib/lp/bugs/stories/webservice/xx-bug-target.txt (+2/-2)
lib/lp/bugs/stories/webservice/xx-bug-tracker.txt (+2/-2)
lib/lp/bugs/stories/webservice/xx-bug.txt (+46/-46)
lib/lp/bugs/stories/xx-bugs-statistics-portlet.txt (+3/-3)
lib/lp/bugs/tests/bug.py (+4/-4)
lib/lp/bugs/tests/bugs-emailinterface.txt (+1/-1)
lib/lp/bugs/tests/bugtarget-questiontarget.txt (+1/-1)
lib/lp/bugs/tests/bugzilla-api-xmlrpc-transport.txt (+1/-1)
lib/lp/buildmaster/browser/tests/test_processor.py (+1/-1)
lib/lp/buildmaster/stories/builder-views.txt (+1/-1)
lib/lp/buildmaster/stories/xx-builder-page.txt (+5/-5)
lib/lp/buildmaster/stories/xx-buildfarm-index.txt (+5/-5)
lib/lp/buildmaster/tests/test_buildfarmjobbehaviour.py (+2/-2)
lib/lp/buildmaster/tests/test_packagebuild.py (+2/-2)
lib/lp/buildmaster/tests/test_webservice.py (+1/-1)
lib/lp/code/browser/tests/test_branchlisting.py (+5/-5)
lib/lp/code/browser/tests/test_branchmergeproposal.py (+6/-6)
lib/lp/code/browser/tests/test_breadcrumbs.py (+3/-3)
lib/lp/code/browser/tests/test_gitlisting.py (+4/-4)
lib/lp/code/browser/tests/test_gitref.py (+4/-4)
lib/lp/code/browser/tests/test_gitrepository.py (+8/-8)
lib/lp/code/browser/tests/test_gitsubscription.py (+1/-1)
lib/lp/code/browser/tests/test_sourcepackagerecipe.py (+3/-3)
lib/lp/code/browser/tests/test_sourcepackagerecipebuild.py (+1/-1)
lib/lp/code/doc/branch-merge-proposal-notifications.txt (+1/-1)
lib/lp/code/doc/branch-notifications.txt (+11/-11)
lib/lp/code/doc/branch-xmlrpc.txt (+3/-3)
lib/lp/code/doc/branch.txt (+3/-3)
lib/lp/code/doc/codeimport-machine.txt (+2/-2)
lib/lp/code/doc/codeimport.txt (+6/-6)
lib/lp/code/doc/codereviewcomment.txt (+1/-1)
lib/lp/code/doc/xmlrpc-codeimport-scheduler.txt (+1/-1)
lib/lp/code/javascript/tests/test_branchmergeproposal.inlinecomments.js (+7/-7)
lib/lp/code/javascript/tests/test_branchmergeproposal.nominate.js (+2/-2)
lib/lp/code/javascript/tests/test_gitrepository.edit.html (+1/-1)
lib/lp/code/javascript/tests/test_productseries-setbranch.html (+1/-1)
lib/lp/code/javascript/tests/test_requestbuild_overlay.js (+3/-3)
lib/lp/code/mail/tests/test_codehandler.py (+3/-3)
lib/lp/code/mail/tests/test_codeimport.py (+7/-7)
lib/lp/code/mail/tests/test_codereviewcomment.py (+1/-1)
lib/lp/code/mail/tests/test_sourcepackagerecipebuild.py (+1/-1)
lib/lp/code/model/tests/test_branch.py (+11/-11)
lib/lp/code/model/tests/test_branchlookup.py (+5/-5)
lib/lp/code/model/tests/test_branchmergeproposal.py (+1/-1)
lib/lp/code/model/tests/test_branchmergeproposaljobs.py (+1/-1)
lib/lp/code/model/tests/test_codeimportjob.py (+1/-1)
lib/lp/code/model/tests/test_gitlookup.py (+7/-7)
lib/lp/code/model/tests/test_gitref.py (+7/-7)
lib/lp/code/model/tests/test_gitrepository.py (+2/-2)
lib/lp/code/stories/branches/xx-bazaar-home.txt (+4/-4)
lib/lp/code/stories/branches/xx-branch-deletion.txt (+5/-5)
lib/lp/code/stories/branches/xx-branch-edit.txt (+23/-23)
lib/lp/code/stories/branches/xx-branch-index.txt (+43/-43)
lib/lp/code/stories/branches/xx-branch-listings-merge-proposal-badge.txt (+1/-1)
lib/lp/code/stories/branches/xx-branch-listings.txt (+22/-22)
lib/lp/code/stories/branches/xx-branch-reference.txt (+8/-8)
lib/lp/code/stories/branches/xx-branch-tag-cloud.txt (+1/-1)
lib/lp/code/stories/branches/xx-branchmergeproposal-listings.txt (+6/-6)
lib/lp/code/stories/branches/xx-branchmergeproposals.txt (+13/-13)
lib/lp/code/stories/branches/xx-bug-branch-links.txt (+9/-9)
lib/lp/code/stories/branches/xx-claiming-team-code-reviews.txt (+2/-2)
lib/lp/code/stories/branches/xx-code-review-comments.txt (+2/-2)
lib/lp/code/stories/branches/xx-distribution-branches.txt (+3/-3)
lib/lp/code/stories/branches/xx-distroseries-branches.txt (+2/-2)
lib/lp/code/stories/branches/xx-person-branches.txt (+8/-8)
lib/lp/code/stories/branches/xx-person-portlet-teambranches.txt (+2/-2)
lib/lp/code/stories/branches/xx-personproduct-branch-listings.txt (+2/-2)
lib/lp/code/stories/branches/xx-private-branch-listings.txt (+8/-8)
lib/lp/code/stories/branches/xx-product-branches.txt (+20/-20)
lib/lp/code/stories/branches/xx-project-branches.txt (+3/-3)
lib/lp/code/stories/branches/xx-reviewing.txt (+2/-2)
lib/lp/code/stories/branches/xx-source-package-branches-empty.txt (+1/-1)
lib/lp/code/stories/branches/xx-subscribing-branches.txt (+8/-8)
lib/lp/code/stories/branches/xx-upgrading-branches.txt (+1/-1)
lib/lp/code/stories/branches/xx-upload-directions.txt (+8/-8)
lib/lp/code/stories/codeimport/xx-codeimport-machines.txt (+2/-2)
lib/lp/code/stories/codeimport/xx-codeimport-view.txt (+6/-6)
lib/lp/code/stories/codeimport/xx-create-codeimport.txt (+20/-20)
lib/lp/code/stories/codeimport/xx-failing-codeimport.txt (+2/-2)
lib/lp/code/stories/feeds/xx-branch-atom.txt (+11/-11)
lib/lp/code/stories/feeds/xx-revision-atom.txt (+7/-7)
lib/lp/code/stories/sourcepackagerecipes/xx-recipe-listings.txt (+6/-6)
lib/lp/code/stories/webservice/xx-branchmergeproposal.txt (+20/-20)
lib/lp/code/tests/test_branch.py (+1/-1)
lib/lp/code/vocabularies/tests/branch.txt (+1/-1)
lib/lp/code/xmlrpc/tests/test_branch.py (+3/-3)
lib/lp/code/xmlrpc/tests/test_codehosting.py (+1/-1)
lib/lp/codehosting/codeimport/tests/test_worker.py (+3/-3)
lib/lp/codehosting/puller/tests/test_errors.py (+1/-1)
lib/lp/codehosting/puller/tests/test_worker.py (+3/-3)
lib/lp/codehosting/scanner/tests/test_buglinks.py (+1/-1)
lib/lp/codehosting/sshserver/tests/test_session.py (+1/-1)
lib/lp/codehosting/tests/servers.py (+1/-1)
lib/lp/codehosting/tests/test_rewrite.py (+5/-5)
lib/lp/codehosting/vfs/branchfs.py (+1/-1)
lib/lp/codehosting/vfs/tests/test_branchfs.py (+3/-3)
lib/lp/coop/answersbugs/stories/question-buglink.txt (+6/-6)
lib/lp/coop/answersbugs/stories/question-makebug.txt (+3/-3)
lib/lp/hardwaredb/stories/hwdb/xx-hwdb.txt (+28/-28)
lib/lp/hardwaredb/stories/webservice/xx-hwdb.txt (+85/-85)
lib/lp/registry/browser/tests/announcement-views.txt (+2/-2)
lib/lp/registry/browser/tests/browser-views.txt (+1/-1)
lib/lp/registry/browser/tests/distribution-views.txt (+8/-8)
lib/lp/registry/browser/tests/distributionmirror-views.txt (+11/-11)
lib/lp/registry/browser/tests/distributionsourcepackage-views.txt (+3/-3)
lib/lp/registry/browser/tests/distroseries-views.txt (+3/-3)
lib/lp/registry/browser/tests/karmaaction-views.txt (+2/-2)
lib/lp/registry/browser/tests/karmacontext-views.txt (+1/-1)
lib/lp/registry/browser/tests/milestone-views.txt (+4/-4)
lib/lp/registry/browser/tests/packaging-views.txt (+5/-5)
lib/lp/registry/browser/tests/peoplemerge-views.txt (+3/-3)
lib/lp/registry/browser/tests/person-edit-views.txt (+1/-1)
lib/lp/registry/browser/tests/person-views.txt (+4/-4)
lib/lp/registry/browser/tests/pillar-views.txt (+14/-14)
lib/lp/registry/browser/tests/poll-views.txt (+1/-1)
lib/lp/registry/browser/tests/product-views.txt (+1/-1)
lib/lp/registry/browser/tests/productseries-setbranch-view.txt (+1/-1)
lib/lp/registry/browser/tests/productseries-views.txt (+9/-9)
lib/lp/registry/browser/tests/sourcepackage-views.txt (+5/-5)
lib/lp/registry/browser/tests/teammembership-views.txt (+1/-1)
lib/lp/registry/browser/tests/test_breadcrumbs.py (+4/-4)
lib/lp/registry/browser/tests/test_codeofconduct.py (+2/-2)
lib/lp/registry/browser/tests/test_distroseriesdifference_webservice.py (+1/-1)
lib/lp/registry/browser/tests/test_mailinglists.py (+4/-4)
lib/lp/registry/browser/tests/test_packaging.py (+2/-2)
lib/lp/registry/browser/tests/test_person.py (+8/-8)
lib/lp/registry/browser/tests/test_person_contact.py (+5/-5)
lib/lp/registry/browser/tests/test_person_webservice.py (+2/-2)
lib/lp/registry/browser/tests/test_pillar_sharing.py (+2/-2)
lib/lp/registry/browser/tests/test_sourcepackage_views.py (+1/-1)
lib/lp/registry/browser/tests/test_team.py (+1/-1)
lib/lp/registry/doc/distribution-mirror.txt (+4/-4)
lib/lp/registry/doc/launchpadlib/project-registry.txt.disabled (+4/-4)
lib/lp/registry/doc/standing.txt (+1/-1)
lib/lp/registry/doc/teammembership-email-notification.txt (+39/-39)
lib/lp/registry/javascript/tests/test_milestone_creation_failures.js (+2/-2)
lib/lp/registry/javascript/tests/test_structural_subscription.js (+13/-13)
lib/lp/registry/stories/announcements/xx-announcements.txt (+55/-55)
lib/lp/registry/stories/distribution/xx-distribution-launchpad-usage.txt (+7/-7)
lib/lp/registry/stories/distribution/xx-distribution-overview.txt (+25/-25)
lib/lp/registry/stories/distributionmirror/xx-distribution-countrymirrors.txt (+4/-4)
lib/lp/registry/stories/distributionmirror/xx-distribution-mirrors.txt (+12/-12)
lib/lp/registry/stories/distributionmirror/xx-distributionmirror-prober-logs.txt (+4/-4)
lib/lp/registry/stories/distributionmirror/xx-reassign-distributionmirror.txt (+6/-6)
lib/lp/registry/stories/distroseries/distroseries-admin.txt (+10/-10)
lib/lp/registry/stories/distroseries/xx-distroseries-index.txt (+8/-8)
lib/lp/registry/stories/distroseries/xx-show-distroseries-packaging.txt (+7/-7)
lib/lp/registry/stories/gpg-coc/xx-gpg-coc.txt (+26/-26)
lib/lp/registry/stories/gpg-coc/xx-ubuntu-codeofconduct-signer.txt (+5/-5)
lib/lp/registry/stories/location/personlocation-edit.txt (+3/-3)
lib/lp/registry/stories/mailinglists/hosted-email-address.txt (+1/-1)
lib/lp/registry/stories/mailinglists/lifecycle.txt (+29/-29)
lib/lp/registry/stories/mailinglists/subscriptions.txt (+40/-40)
lib/lp/registry/stories/mailinglists/welcome-message.txt (+2/-2)
lib/lp/registry/stories/milestone/object-milestones.txt (+28/-28)
lib/lp/registry/stories/milestone/xx-create-milestone-on-distribution.txt (+5/-5)
lib/lp/registry/stories/milestone/xx-milestone-add-and-edit.txt (+14/-14)
lib/lp/registry/stories/milestone/xx-milestone-description.txt (+10/-10)
lib/lp/registry/stories/object/xx-karmacontext-topcontributors.txt (+3/-3)
lib/lp/registry/stories/object/xx-nameblacklist.txt (+5/-5)
lib/lp/registry/stories/object/xx-object-branding.txt (+26/-26)
lib/lp/registry/stories/packaging/xx-distributionsourcepackage-packaging-concurrent-deletion.txt (+2/-2)
lib/lp/registry/stories/packaging/xx-distributionsourcepackage-packaging.txt (+4/-4)
lib/lp/registry/stories/packaging/xx-sourcepackage-packaging.txt (+5/-5)
lib/lp/registry/stories/person/xx-add-sshkey.txt (+8/-8)
lib/lp/registry/stories/person/xx-admin-person-review.txt (+6/-6)
lib/lp/registry/stories/person/xx-adminpeoplemerge.txt (+5/-5)
lib/lp/registry/stories/person/xx-approve-members.txt (+3/-3)
lib/lp/registry/stories/person/xx-deactivate-account.txt (+9/-9)
lib/lp/registry/stories/person/xx-people-search.txt (+1/-1)
lib/lp/registry/stories/person/xx-person-claim-merge.txt (+4/-4)
lib/lp/registry/stories/person/xx-person-edit-jabber-ids.txt (+1/-1)
lib/lp/registry/stories/person/xx-person-edit-profile-picture.txt (+5/-5)
lib/lp/registry/stories/person/xx-person-edit.txt (+7/-7)
lib/lp/registry/stories/person/xx-person-editgpgkeys-invalid-key.txt (+4/-4)
lib/lp/registry/stories/person/xx-person-home.txt (+27/-27)
lib/lp/registry/stories/person/xx-person-karma.txt (+3/-3)
lib/lp/registry/stories/person/xx-person-projects.txt (+4/-4)
lib/lp/registry/stories/person/xx-person-rdf.txt (+7/-7)
lib/lp/registry/stories/person/xx-person-subscriptions.txt (+14/-14)
lib/lp/registry/stories/person/xx-person-working-on.txt (+1/-1)
lib/lp/registry/stories/person/xx-user-to-user.txt (+2/-2)
lib/lp/registry/stories/pillar/xx-pillar-deactivation.txt (+9/-9)
lib/lp/registry/stories/pillar/xx-pillar-sprints.txt (+11/-11)
lib/lp/registry/stories/pillar/xx-pillar-traversal.txt (+4/-4)
lib/lp/registry/stories/product/xx-launchpad-project-search.txt (+8/-8)
lib/lp/registry/stories/product/xx-product-add.txt (+7/-7)
lib/lp/registry/stories/product/xx-product-code-trunk.txt (+25/-25)
lib/lp/registry/stories/product/xx-product-edit-sourceforge-project.txt (+5/-5)
lib/lp/registry/stories/product/xx-product-edit.txt (+24/-24)
lib/lp/registry/stories/product/xx-product-files.txt (+39/-39)
lib/lp/registry/stories/product/xx-product-index.txt (+22/-22)
lib/lp/registry/stories/product/xx-product-package-pages.txt (+5/-5)
lib/lp/registry/stories/product/xx-product-rdf.txt (+1/-1)
lib/lp/registry/stories/product/xx-product-reassignment-and-milestones.txt (+2/-2)
lib/lp/registry/stories/product/xx-productset.txt (+7/-7)
lib/lp/registry/stories/product/xx-projects-index.txt (+2/-2)
lib/lp/registry/stories/productrelease/xx-productrelease-basics.txt (+18/-18)
lib/lp/registry/stories/productrelease/xx-productrelease-delete.txt (+3/-3)
lib/lp/registry/stories/productrelease/xx-productrelease-view.txt (+2/-2)
lib/lp/registry/stories/productseries/xx-productseries-add-and-edit.txt (+11/-11)
lib/lp/registry/stories/productseries/xx-productseries-delete.txt (+3/-3)
lib/lp/registry/stories/productseries/xx-productseries-driver.txt (+3/-3)
lib/lp/registry/stories/productseries/xx-productseries-index.txt (+18/-18)
lib/lp/registry/stories/productseries/xx-productseries-review.txt (+1/-1)
lib/lp/registry/stories/productseries/xx-productseries-series.txt (+1/-1)
lib/lp/registry/stories/productseries/xx-productseries-set-branch.txt (+10/-10)
lib/lp/registry/stories/project/xx-project-add-product.txt (+6/-6)
lib/lp/registry/stories/project/xx-project-add.txt (+5/-5)
lib/lp/registry/stories/project/xx-project-driver.txt (+2/-2)
lib/lp/registry/stories/project/xx-project-edit.txt (+13/-13)
lib/lp/registry/stories/project/xx-project-index.txt (+14/-14)
lib/lp/registry/stories/project/xx-project-rdf.txt (+1/-1)
lib/lp/registry/stories/project/xx-reassign-project.txt (+1/-1)
lib/lp/registry/stories/team-polls/create-poll-options.txt (+6/-6)
lib/lp/registry/stories/team-polls/create-polls.txt (+17/-17)
lib/lp/registry/stories/team-polls/edit-options.txt (+7/-7)
lib/lp/registry/stories/team-polls/edit-poll.txt (+10/-10)
lib/lp/registry/stories/team-polls/vote-poll.txt (+12/-12)
lib/lp/registry/stories/team-polls/xx-poll-condorcet-voting.txt (+3/-3)
lib/lp/registry/stories/team-polls/xx-poll-confirm-vote.txt (+2/-2)
lib/lp/registry/stories/team-polls/xx-poll-results.txt (+3/-3)
lib/lp/registry/stories/team/xx-adminteammerge.txt (+3/-3)
lib/lp/registry/stories/team/xx-team-add-my-teams.txt (+14/-14)
lib/lp/registry/stories/team/xx-team-claim.txt (+3/-3)
lib/lp/registry/stories/team/xx-team-contactemail-xss.txt (+1/-1)
lib/lp/registry/stories/team/xx-team-contactemail.txt (+2/-2)
lib/lp/registry/stories/team/xx-team-home.txt (+15/-15)
lib/lp/registry/stories/team/xx-team-membership.txt (+14/-14)
lib/lp/registry/stories/teammembership/private-team.txt (+7/-7)
lib/lp/registry/stories/teammembership/xx-add-member.txt (+16/-16)
lib/lp/registry/stories/teammembership/xx-member-renewed-membership.txt (+13/-13)
lib/lp/registry/stories/teammembership/xx-renew-subscription.txt (+1/-1)
lib/lp/registry/stories/teammembership/xx-team-leave.txt (+6/-6)
lib/lp/registry/stories/teammembership/xx-teammembership.txt (+42/-42)
lib/lp/registry/stories/vouchers/xx-voucher-redemption.txt (+9/-9)
lib/lp/registry/stories/webservice/xx-distribution-source-package.txt (+2/-2)
lib/lp/registry/stories/webservice/xx-person.txt (+1/-1)
lib/lp/registry/stories/webservice/xx-private-team.txt (+6/-6)
lib/lp/registry/stories/webservice/xx-project-registry.txt (+1/-1)
lib/lp/registry/tests/test_mailinglist.py (+3/-3)
lib/lp/registry/tests/test_mailinglistapi.py (+5/-5)
lib/lp/registry/tests/test_notification.py (+1/-1)
lib/lp/registry/tests/test_persondistributionsourcepackage.py (+1/-1)
lib/lp/registry/tests/test_personproduct.py (+1/-1)
lib/lp/registry/tests/test_personset.py (+5/-5)
lib/lp/registry/tests/test_product.py (+5/-5)
lib/lp/registry/tests/test_product_webservice.py (+1/-1)
lib/lp/registry/tests/test_subscribers.py (+2/-2)
lib/lp/registry/tests/test_xmlrpc.py (+2/-2)
lib/lp/services/authserver/doc/xmlrpc-authserver.txt (+1/-1)
lib/lp/services/config/doc/canonical-config.txt (+2/-2)
lib/lp/services/config/schema-lazr.conf (+5/-5)
lib/lp/services/database/doc/storm-store-reset.txt (+1/-1)
lib/lp/services/feeds/doc/feeds.txt (+2/-2)
lib/lp/services/feeds/feed.py (+2/-2)
lib/lp/services/feeds/stories/xx-links.txt (+79/-79)
lib/lp/services/feeds/stories/xx-navigation.txt (+24/-24)
lib/lp/services/feeds/stories/xx-security.txt (+17/-17)
lib/lp/services/mail/tests/test_helpers.py (+1/-1)
lib/lp/services/mail/tests/test_signedmessage.py (+1/-1)
lib/lp/services/mailman/tests/test_lpheaders.py (+21/-21)
lib/lp/services/mailman/tests/test_mlist_sync.py (+10/-10)
lib/lp/services/mailman/tests/test_xmlrpcrunner.py (+3/-3)
lib/lp/services/oauth/stories/access-token.txt (+7/-7)
lib/lp/services/oauth/stories/authorize-token.txt (+17/-17)
lib/lp/services/oauth/stories/managing-tokens.txt (+4/-4)
lib/lp/services/oauth/stories/request-token.txt (+6/-6)
lib/lp/services/profile/profile.pt (+3/-3)
lib/lp/services/profile/profiling.txt (+1/-1)
lib/lp/services/sitesearch/tests/data/bingsearchservice-bugs-2.json (+5/-5)
lib/lp/services/sitesearch/tests/test_bing.py (+8/-8)
lib/lp/services/sitesearch/tests/test_pagematch.py (+6/-6)
lib/lp/services/temporaryblobstorage/stories/xx-tempstorage.txt (+2/-2)
lib/lp/services/verification/browser/tests/logintoken-corner-cases.txt (+1/-1)
lib/lp/services/verification/browser/tests/logintoken-views.txt (+1/-1)
lib/lp/services/verification/tests/test_logintoken.py (+1/-1)
lib/lp/services/webapp/doc/canonical_url.txt (+20/-20)
lib/lp/services/webapp/doc/canonical_url_examples.txt (+46/-46)
lib/lp/services/webapp/doc/menus.txt (+22/-22)
lib/lp/services/webapp/doc/renamed-view.txt (+6/-6)
lib/lp/services/webapp/doc/test_adapter_timeout.txt.disabled (+1/-1)
lib/lp/services/webapp/doc/webapp-publication.txt (+86/-86)
lib/lp/services/webapp/servers.py (+2/-2)
lib/lp/services/webapp/tests/cookie-authentication.txt (+7/-7)
lib/lp/services/webapp/tests/login.txt (+1/-1)
lib/lp/services/webapp/tests/no-anonymous-session-cookies.txt (+4/-4)
lib/lp/services/webapp/tests/test_breadcrumbs.py (+3/-3)
lib/lp/services/webapp/tests/test_dbpolicy.py (+6/-6)
lib/lp/services/webapp/tests/test_error.py (+2/-2)
lib/lp/services/webapp/tests/test_errorlog.py (+9/-9)
lib/lp/services/webapp/tests/test_login.py (+15/-15)
lib/lp/services/webapp/tests/test_login_account.py (+2/-2)
lib/lp/services/webapp/tests/test_pageid.py (+1/-1)
lib/lp/services/webapp/tests/test_publication.py (+2/-2)
lib/lp/services/webapp/tests/test_servers.py (+7/-7)
lib/lp/services/webapp/tests/test_session.py (+4/-4)
lib/lp/services/webhooks/tests/test_job.py (+2/-2)
lib/lp/services/webservice/doc/launchpadlib.txt (+2/-2)
lib/lp/services/webservice/doc/webservice-marshallers.txt (+4/-4)
lib/lp/services/webservice/stories/apidoc.txt (+4/-4)
lib/lp/services/webservice/stories/launchpadlib.txt (+4/-4)
lib/lp/services/webservice/stories/xx-service.txt (+18/-18)
lib/lp/services/webservice/stories/xx-wadl.txt (+2/-2)
lib/lp/services/worlddata/stories/webservice/xx-country.txt (+1/-1)
lib/lp/snappy/browser/tests/test_snap.py (+2/-2)
lib/lp/snappy/browser/tests/test_snapbuild.py (+1/-1)
lib/lp/snappy/javascript/tests/test_snap.edit.html (+1/-1)
lib/lp/snappy/tests/test_snapbuild.py (+5/-5)
lib/lp/snappy/tests/test_snapbuildbehaviour.py (+1/-1)
lib/lp/snappy/tests/test_snapbuildjob.py (+8/-8)
lib/lp/soyuz/adapters/tests/test_archivedependencies.py (+1/-1)
lib/lp/soyuz/browser/tests/archive-views.txt (+2/-2)
lib/lp/soyuz/browser/tests/archivesubscription-views.txt (+7/-7)
lib/lp/soyuz/browser/tests/binarypackagerelease-views.txt (+2/-2)
lib/lp/soyuz/browser/tests/distribution-views.txt (+2/-2)
lib/lp/soyuz/browser/tests/publishing-views.txt (+4/-4)
lib/lp/soyuz/browser/tests/sourcepackage-views.txt (+2/-2)
lib/lp/soyuz/browser/tests/test_build_views.py (+1/-1)
lib/lp/soyuz/browser/tests/test_livefs.py (+2/-2)
lib/lp/soyuz/browser/tests/test_livefsbuild.py (+1/-1)
lib/lp/soyuz/doc/archive.txt (+6/-6)
lib/lp/soyuz/doc/archiveauthtoken.txt (+1/-1)
lib/lp/soyuz/doc/archivesubscriber.txt (+5/-5)
lib/lp/soyuz/doc/build-failedtoupload-workflow.txt (+4/-4)
lib/lp/soyuz/doc/soyuz-set-of-uploads.txt (+1/-1)
lib/lp/soyuz/mail/tests/test_packageupload.py (+1/-1)
lib/lp/soyuz/scripts/tests/test_copypackage.py (+2/-2)
lib/lp/soyuz/scripts/tests/test_ppareport.py (+2/-2)
lib/lp/soyuz/stories/distribution/xx-distribution-packages.txt (+29/-29)
lib/lp/soyuz/stories/distroseries/add-architecture.txt (+5/-5)
lib/lp/soyuz/stories/packaging/package-pages-navigation.txt (+49/-49)
lib/lp/soyuz/stories/ppa/xx-copy-packages.txt (+15/-15)
lib/lp/soyuz/stories/ppa/xx-delete-packages.txt (+16/-16)
lib/lp/soyuz/stories/ppa/xx-edit-dependencies.txt (+20/-20)
lib/lp/soyuz/stories/ppa/xx-ppa-files.txt (+24/-24)
lib/lp/soyuz/stories/ppa/xx-ppa-navigation.txt (+30/-30)
lib/lp/soyuz/stories/ppa/xx-ppa-packages.txt (+22/-22)
lib/lp/soyuz/stories/ppa/xx-ppa-private-teams.txt (+3/-3)
lib/lp/soyuz/stories/ppa/xx-ppa-workflow.txt (+31/-31)
lib/lp/soyuz/stories/ppa/xx-private-ppa-presentation.txt (+2/-2)
lib/lp/soyuz/stories/ppa/xx-private-ppa-subscription-stories.txt (+15/-15)
lib/lp/soyuz/stories/ppa/xx-private-ppa-subscriptions.txt (+15/-15)
lib/lp/soyuz/stories/ppa/xx-private-ppas.txt (+15/-15)
lib/lp/soyuz/stories/ppa/xx-ubuntu-ppas.txt (+36/-36)
lib/lp/soyuz/stories/soyuz/xx-binarypackagerelease-index.txt (+9/-9)
lib/lp/soyuz/stories/soyuz/xx-build-record.txt (+18/-18)
lib/lp/soyuz/stories/soyuz/xx-builds-pages.txt (+17/-17)
lib/lp/soyuz/stories/soyuz/xx-distribution-add.txt (+7/-7)
lib/lp/soyuz/stories/soyuz/xx-distribution-archives.txt (+9/-9)
lib/lp/soyuz/stories/soyuz/xx-distribution-edit.txt (+3/-3)
lib/lp/soyuz/stories/soyuz/xx-distributionsourcepackagerelease-pages.txt (+18/-18)
lib/lp/soyuz/stories/soyuz/xx-distroarchseries-binpackages.txt (+8/-8)
lib/lp/soyuz/stories/soyuz/xx-distroarchseries.txt (+9/-9)
lib/lp/soyuz/stories/soyuz/xx-distroseries-binary-packages.txt (+5/-5)
lib/lp/soyuz/stories/soyuz/xx-distroseries-index.txt (+5/-5)
lib/lp/soyuz/stories/soyuz/xx-distroseries-sources.txt (+37/-37)
lib/lp/soyuz/stories/soyuz/xx-package-diff.txt (+2/-2)
lib/lp/soyuz/stories/soyuz/xx-packagepublishinghistory.txt (+3/-3)
lib/lp/soyuz/stories/soyuz/xx-person-packages.txt (+30/-30)
lib/lp/soyuz/stories/soyuz/xx-portlet-publishing-details.txt (+5/-5)
lib/lp/soyuz/stories/soyuz/xx-private-builds.txt (+23/-23)
lib/lp/soyuz/stories/soyuz/xx-queue-pages-motu.txt (+1/-1)
lib/lp/soyuz/stories/soyuz/xx-queue-pages.txt (+1/-1)
lib/lp/soyuz/stories/soyuz/xx-sourcepackage-changelog.txt (+16/-16)
lib/lp/soyuz/stories/webservice/xx-archive-commercial.txt (+4/-4)
lib/lp/soyuz/stories/webservice/xx-archive.txt (+7/-7)
lib/lp/soyuz/stories/webservice/xx-builders.txt (+2/-2)
lib/lp/soyuz/stories/webservice/xx-builds.txt (+4/-4)
lib/lp/soyuz/stories/webservice/xx-packageset.txt (+33/-33)
lib/lp/soyuz/stories/webservice/xx-person-createppa.txt (+8/-8)
lib/lp/soyuz/stories/webservice/xx-source-package-publishing.txt (+4/-4)
lib/lp/soyuz/tests/test_archive.py (+2/-2)
lib/lp/soyuz/tests/test_binarypackagebuild.py (+3/-3)
lib/lp/soyuz/tests/test_binarypackagebuildbehaviour.py (+1/-1)
lib/lp/soyuz/tests/test_build.py (+2/-2)
lib/lp/soyuz/tests/test_livefsbuild.py (+3/-3)
lib/lp/testing/_webservice.py (+1/-1)
lib/lp/testing/fixture.py (+4/-4)
lib/lp/testing/layers.py (+2/-2)
lib/lp/testing/pages.py (+1/-1)
lib/lp/testing/tests/test_publication.py (+5/-5)
lib/lp/testing/tests/test_standard_yuixhr_test_template.py (+2/-2)
lib/lp/testing/tests/test_yuixhr.py (+1/-1)
lib/lp/testing/tests/test_yuixhr_fixture_facet.js (+1/-1)
lib/lp/testopenid/stories/basics.txt (+21/-21)
lib/lp/testopenid/stories/logging-in.txt (+5/-5)
lib/lp/testopenid/templates/application-index.pt (+1/-1)
lib/lp/testopenid/templates/persistentidentity-xrds.pt (+1/-1)
lib/lp/translations/browser/tests/language-views.txt (+4/-4)
lib/lp/translations/browser/tests/test_breadcrumbs.py (+34/-34)
lib/lp/translations/browser/tests/test_sharing_details.py (+1/-1)
lib/lp/translations/browser/tests/translator-views.txt (+3/-3)
lib/lp/translations/doc/canonical_url_examples.txt (+11/-11)
lib/lp/translations/doc/poexport-request-productseries.txt (+1/-1)
lib/lp/translations/stories/distribution/xx-distribution-change-language-pack-admins.txt (+4/-4)
lib/lp/translations/stories/distribution/xx-distribution-translations.txt (+13/-13)
lib/lp/translations/stories/distroseries/xx-distroseries-language-packs.txt (+7/-7)
lib/lp/translations/stories/distroseries/xx-distroseries-translations.txt (+14/-14)
lib/lp/translations/stories/importqueue/xx-entry-details.txt (+1/-1)
lib/lp/translations/stories/importqueue/xx-translation-import-queue-edit-autofilling.txt (+8/-8)
lib/lp/translations/stories/importqueue/xx-translation-import-queue-entry.txt (+9/-9)
lib/lp/translations/stories/importqueue/xx-translation-import-queue-filtering.txt (+19/-19)
lib/lp/translations/stories/importqueue/xx-translation-import-queue-targets.txt (+5/-5)
lib/lp/translations/stories/importqueue/xx-translation-import-queue.txt (+36/-36)
lib/lp/translations/stories/navigation-links/pofile.txt (+15/-15)
lib/lp/translations/stories/navigation-links/pomsgset.txt (+15/-15)
lib/lp/translations/stories/navigation-links/potemplate.txt (+15/-15)
lib/lp/translations/stories/productseries/xx-productseries-export-to-branch.txt (+6/-6)
lib/lp/translations/stories/productseries/xx-productseries-translation-export.txt (+9/-9)
lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.txt (+9/-9)
lib/lp/translations/stories/productseries/xx-productseries-translations-settings.txt (+9/-9)
lib/lp/translations/stories/productseries/xx-productseries-translations.txt (+12/-12)
lib/lp/translations/stories/project/xx-project-translations.txt (+12/-12)
lib/lp/translations/stories/standalone/xx-language.txt (+28/-28)
lib/lp/translations/stories/standalone/xx-licensing.txt (+8/-8)
lib/lp/translations/stories/standalone/xx-person-activity.txt (+1/-1)
lib/lp/translations/stories/standalone/xx-person-editlanguages.txt (+11/-11)
lib/lp/translations/stories/standalone/xx-pofile-auto-alt-languages.txt (+6/-6)
lib/lp/translations/stories/standalone/xx-pofile-details.txt (+5/-5)
lib/lp/translations/stories/standalone/xx-pofile-export.txt (+8/-8)
lib/lp/translations/stories/standalone/xx-pofile-translate-alternative-language.txt (+6/-6)
lib/lp/translations/stories/standalone/xx-pofile-translate-dismiss-suggestions.txt (+5/-5)
lib/lp/translations/stories/standalone/xx-pofile-translate-empty-strings-without-validation.txt (+2/-2)
lib/lp/translations/stories/standalone/xx-pofile-translate-gettext-error-middle-page.txt (+2/-2)
lib/lp/translations/stories/standalone/xx-pofile-translate-html-tags-escape.txt (+2/-2)
lib/lp/translations/stories/standalone/xx-pofile-translate-lang-direction.txt (+3/-3)
lib/lp/translations/stories/standalone/xx-pofile-translate-legal-warning.txt (+1/-1)
lib/lp/translations/stories/standalone/xx-pofile-translate-message-filtering.txt (+8/-8)
lib/lp/translations/stories/standalone/xx-pofile-translate-needs-review-flags-preserved.txt (+4/-4)
lib/lp/translations/stories/standalone/xx-pofile-translate-newlines-check.txt (+7/-7)
lib/lp/translations/stories/standalone/xx-pofile-translate-performance.txt (+4/-4)
lib/lp/translations/stories/standalone/xx-pofile-translate-private-issues.txt (+3/-3)
lib/lp/translations/stories/standalone/xx-pofile-translate-search.txt (+1/-1)
lib/lp/translations/stories/standalone/xx-pofile-translate.txt (+8/-8)
lib/lp/translations/stories/standalone/xx-potemplate-admin.txt (+13/-13)
lib/lp/translations/stories/standalone/xx-potemplate-edit.txt (+11/-11)
lib/lp/translations/stories/standalone/xx-potemplate-export.txt (+4/-4)
lib/lp/translations/stories/standalone/xx-potemplate-index.txt (+18/-18)
lib/lp/translations/stories/standalone/xx-product-export.txt (+8/-8)
lib/lp/translations/stories/standalone/xx-product-translations.txt (+9/-9)
lib/lp/translations/stories/standalone/xx-products-with-translations.txt (+1/-1)
lib/lp/translations/stories/standalone/xx-rosetta-distributionsourcepackage-list.txt (+1/-1)
lib/lp/translations/stories/standalone/xx-rosetta-homepage.txt (+1/-1)
lib/lp/translations/stories/standalone/xx-rosetta-source-package-redirects.txt (+3/-3)
lib/lp/translations/stories/standalone/xx-rosetta-sourcepackage-list.txt (+1/-1)
lib/lp/translations/stories/standalone/xx-series-templates.txt (+17/-17)
lib/lp/translations/stories/standalone/xx-serieslanguage-index.txt (+14/-14)
lib/lp/translations/stories/standalone/xx-sourcepackage-export.txt (+7/-7)
lib/lp/translations/stories/standalone/xx-test-potlists.txt (+1/-1)
lib/lp/translations/stories/standalone/xx-translation-access-display.txt (+9/-9)
lib/lp/translations/stories/standalone/xx-translation-credits.txt (+3/-3)
lib/lp/translations/stories/standalone/xx-translation-help.txt (+6/-6)
lib/lp/translations/stories/standalone/xx-translationmessage-translate.txt (+14/-14)
lib/lp/translations/stories/standalone/xx-translations-to-complete.txt (+3/-3)
lib/lp/translations/stories/standalone/xx-translations-to-review.txt (+1/-1)
lib/lp/translations/stories/standalone/xx-translations-xpi-import.txt (+5/-5)
lib/lp/translations/stories/translationgroups/xx-change-translation-policy.txt (+10/-10)
lib/lp/translations/stories/translationgroups/xx-link-to-documentation.txt (+12/-12)
lib/lp/translations/stories/translationgroups/xx-translationgroups.txt (+94/-94)
lib/lp/translations/stories/translations/xx-translations.txt (+34/-34)
lib/lp/translations/tests/test_pofile.py (+2/-2)
lib/lp/xmlrpc/tests/test_private_xmlrpc.py (+3/-3)
lib/lp/xmlrpc/tests/test_xmlrpc_selftest.py (+2/-2)
scripts/generate-access-token.py (+1/-1)
utilities/list-pages (+2/-2)
utilities/make-dev-certificate (+11/-11)
utilities/make-lp-user (+1/-1)
utilities/rocketfuel-setup (+21/-21)
utilities/soyuz-sampledata-setup.py (+1/-1)
To merge this branch: bzr merge lp:~cjwatson/launchpad/test-domain
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+367784@code.launchpad.net

Commit message

Move development sites from .dev to .test.

Description of the change

We need this now that Google has bought .dev and added it to HSTS preload lists.

This commit is the result of the following commands:

  bzr grep -l '\.dev\b' | \
    xargs sed -Ei 's/(launchpad|l\.\.\.d|librarian|login1|login2|mail-archive|testopenid|\.\.)\.dev\b/\1\.test/g'
  sed -i '/^launchpadlib==/s/==.*/==1.10.7/' constraints.txt

If you don't want to re-run "make install", then run the following in the relevant container:

  sed -Ei 's/(launchpad|testopenid)\.dev\b/\1\.test/g' /etc/hosts /etc/apache2/sites-available/local-launchpad.conf
  mv /var/tmp/bazaar.launchpad.dev /var/tmp/bazaar.launchpad.test

If you don't want to re-run "make schema", then run the following in psql for each relevant database (by default, launchpad_empty, launchpad_dev_template, launchpad_dev, launchpad_ftest_template, and
  launchpad_ftest_playground):

  UPDATE logintoken SET redirection_url = regexp_replace(redirection_url, '\.dev', '.test');
  UPDATE publisherconfig SET base_url = regexp_replace(base_url, '\.dev', '.test');

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) wrote :

Rubber-stamping; I've discussed this in general terms with William, and there's no realistic possibility of anyone actually doing a detailed review of this ...

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Makefile'
2--- Makefile 2019-04-16 14:30:40 +0000
3+++ Makefile 2019-05-28 13:57:20 +0000
4@@ -45,9 +45,9 @@
5
6 MINS_TO_SHUTDOWN=15
7
8-CODEHOSTING_ROOT=/var/tmp/bazaar.launchpad.dev
9+CODEHOSTING_ROOT=/var/tmp/bazaar.launchpad.test
10
11-CONVOY_ROOT?=/srv/launchpad.dev/convoy
12+CONVOY_ROOT?=/srv/launchpad.test/convoy
13
14 VERSION_INFO = version-info.py
15
16@@ -155,7 +155,7 @@
17 endif
18
19 inplace: build logs clean_logs codehosting-dir
20- if [ -d /srv/launchpad.dev ]; then \
21+ if [ -d /srv/launchpad.test ]; then \
22 ln -sfn $(WD)/build/js $(CONVOY_ROOT); \
23 fi
24
25@@ -474,9 +474,9 @@
26 -e 's,%LISTEN_ADDRESS%,$(LISTEN_ADDRESS),' \
27 configs/development/local-launchpad-apache > \
28 /etc/apache2/sites-available/$$base
29- if [ ! -d /srv/launchpad.dev ]; then \
30- mkdir /srv/launchpad.dev; \
31- chown $(SUDO_UID):$(SUDO_GID) /srv/launchpad.dev; \
32+ if [ ! -d /srv/launchpad.test ]; then \
33+ mkdir /srv/launchpad.test; \
34+ chown $(SUDO_UID):$(SUDO_GID) /srv/launchpad.test; \
35 fi
36
37 enable-apache-launchpad: copy-apache-config copy-certificates
38
39=== modified file 'configs/README.txt'
40--- configs/README.txt 2014-01-30 15:04:06 +0000
41+++ configs/README.txt 2019-05-28 13:57:20 +0000
42@@ -111,10 +111,10 @@
43
44 >>> test_data = ("""
45 ... [answertracker]
46- ... email_domain: answers.launchpad.dev""")
47+ ... email_domain: answers.launchpad.test""")
48 >>> config.push('test_data', test_data)
49 >>> config.answertracker.email_domain
50- 'answers.launchpad.dev'
51+ 'answers.launchpad.test'
52
53 And tests can remove the data with pop() when they are done to restore
54 the config.
55
56=== modified file 'configs/development/launchpad-lazr.conf'
57--- configs/development/launchpad-lazr.conf 2019-05-22 16:54:09 +0000
58+++ configs/development/launchpad-lazr.conf 2019-05-28 13:57:20 +0000
59@@ -12,7 +12,7 @@
60 root: /var/tmp/builddmaster/
61 uploader: scripts/process-upload.py -Mvv
62 bzr_builder_sources_list: None
63-authentication_endpoint: http://xmlrpc-private.launchpad.dev:8087/authserver
64+authentication_endpoint: http://xmlrpc-private.launchpad.test:8087/authserver
65
66 [canonical]
67 show_tracebacks: True
68@@ -27,32 +27,32 @@
69 bugzilla-3.4.example.com.password: test
70
71 [codebrowse]
72-cachepath: /var/tmp/bazaar.launchpad.dev/cache
73-log_folder: /var/tmp/bazaar.launchpad.dev/logs
74-launchpad_root: https://code.launchpad.dev/
75+cachepath: /var/tmp/bazaar.launchpad.test/cache
76+log_folder: /var/tmp/bazaar.launchpad.test/logs
77+launchpad_root: https://code.launchpad.test/
78 secret_path: configs/development/codebrowse-secret
79
80 [codehosting]
81 launch: True
82-authentication_endpoint: http://xmlrpc-private.launchpad.dev:8087/authserver
83-codehosting_endpoint: http://xmlrpc-private.launchpad.dev:8087/codehosting
84-supermirror_root: http://bazaar.launchpad.dev/
85-secure_codebrowse_root: https://bazaar.launchpad.dev/
86-internal_branch_by_id_root: http://bazaar-internal.launchpad.dev/
87+authentication_endpoint: http://xmlrpc-private.launchpad.test:8087/authserver
88+codehosting_endpoint: http://xmlrpc-private.launchpad.test:8087/codehosting
89+supermirror_root: http://bazaar.launchpad.test/
90+secure_codebrowse_root: https://bazaar.launchpad.test/
91+internal_branch_by_id_root: http://bazaar-internal.launchpad.test/
92 internal_codebrowse_root: http://localhost:8080/
93-rewrite_script_log_file: /var/tmp/bazaar.launchpad.dev/rewrite.log
94+rewrite_script_log_file: /var/tmp/bazaar.launchpad.test/rewrite.log
95 host_key_pair_path: lib/lp/codehosting/sshserver/tests/keys
96 port: tcp:5022:interface=127.0.0.88
97 bzr_lp_prefix: lp://dev/
98 lp_url_hosts: dev
99-access_log: /var/tmp/bazaar.launchpad.dev/codehosting-access.log
100+access_log: /var/tmp/bazaar.launchpad.test/codehosting-access.log
101 blacklisted_hostnames:
102 use_forking_daemon: True
103-internal_bzr_api_endpoint: http://bazaar.launchpad.dev:8090/
104-internal_git_api_endpoint: http://git.launchpad.dev:19417/
105-git_browse_root: https://git.launchpad.dev/
106-git_anon_root: git://git.launchpad.dev/
107-git_ssh_root: git+ssh://git.launchpad.dev/
108+internal_bzr_api_endpoint: http://bazaar.launchpad.test:8090/
109+internal_git_api_endpoint: http://git.launchpad.test:19417/
110+git_browse_root: https://git.launchpad.test/
111+git_anon_root: git://git.launchpad.test/
112+git_ssh_root: git+ssh://git.launchpad.test/
113
114 [codeimport]
115 bazaar_branch_store: file:///tmp/bazaar-branches
116@@ -62,7 +62,7 @@
117 forced_hostname: bazaar-importer
118
119 [commercial]
120-voucher_proxy_url: http://launchpad.dev
121+voucher_proxy_url: http://launchpad.test
122 voucher_proxy_port: 2323
123 voucher_proxy_timeout: 60000
124 purchase_subscription_url: http://ubuntu.recycledmania.com/product_info.php?products_id=227
125@@ -82,7 +82,7 @@
126
127 [bing]
128 # Development and the testrunner should use the stub service by default.
129-site: http://launchpad.dev:8093/bingcustomsearch/v7.0/search
130+site: http://launchpad.test:8093/bingcustomsearch/v7.0/search
131 subscription_key: abcdef01234567890abcdef012345678
132 custom_config_id: 1234567890
133
134@@ -90,15 +90,15 @@
135 launch: True
136
137 [gpghandler]
138-host: keyserver.launchpad.dev
139-public_host: keyserver.launchpad.dev
140+host: keyserver.launchpad.test
141+public_host: keyserver.launchpad.test
142 public_https: False
143
144 [launchpad]
145 enable_test_openid_provider: True
146-openid_canonical_root: https://testopenid.dev/
147-openid_provider_root: https://testopenid.dev/
148-code_domain: code.launchpad.dev
149+openid_canonical_root: https://testopenid.test/
150+openid_provider_root: https://testopenid.test/
151+code_domain: code.launchpad.test
152 default_batch_size: 5
153 max_attachment_size: 2097152
154 branchlisting_batch_size: 6
155@@ -109,21 +109,21 @@
156 max_bug_feed_cache_minutes: 30
157 bzr_imports_root_url: file:///tmp/bazaar-branches
158 geoip_database: /usr/share/GeoIP/GeoLiteCity.dat
159-feature_flags_endpoint: http://xmlrpc-private.launchpad.dev:8087/featureflags/
160+feature_flags_endpoint: http://xmlrpc-private.launchpad.test:8087/featureflags/
161
162 [launchpad_session]
163 cookie: launchpad_dev
164 database: dbname=session_dev
165
166 [librarian]
167-download_url: http://launchpad.dev:58080/
168+download_url: http://launchpad.test:58080/
169 upload_port: 58090
170 download_port: 58080
171 restricted_upload_port: 58095
172 restricted_download_port: 58085
173-restricted_download_url: http://launchpad.dev:58085/
174+restricted_download_url: http://launchpad.test:58085/
175 use_https: False
176-authentication_endpoint: http://xmlrpc-private.launchpad.dev:8087/authserver
177+authentication_endpoint: http://xmlrpc-private.launchpad.test:8087/authserver
178
179 [librarian_server]
180 root: /var/tmp/fatsam
181@@ -148,12 +148,12 @@
182 build_var_dir: /var/tmp/mailman
183 xmlrpc_runner_sleep: 5
184 smtp: localhost:9025
185-list_help_header: http://help.launchpad.dev/ListHelp
186-archive_address: archive@mail-archive.dev
187-list_owner_header_template: http://launchpad.dev/~$team_name
188-archive_url_template: http://lists.launchpad.dev/$team_name
189-list_subscription_headers: http://launchpad.dev/~$team_name
190-build_host_name: lists.launchpad.dev
191+list_help_header: http://help.launchpad.test/ListHelp
192+archive_address: archive@mail-archive.test
193+list_owner_header_template: http://launchpad.test/~$team_name
194+archive_url_template: http://lists.launchpad.test/$team_name
195+list_subscription_headers: http://launchpad.test/~$team_name
196+build_host_name: lists.launchpad.test
197 # Crank these way down so they're easier to test.
198 soft_max_size: 40000
199 hard_max_size: 1000000
200@@ -171,11 +171,11 @@
201 [personalpackagearchive]
202 root: /var/tmp/ppa/
203 private_root: /var/tmp/ppa
204-base_url: http://ppa.launchpad.dev
205-private_base_url: http://private-ppa.launchpad.dev
206+base_url: http://ppa.launchpad.test
207+private_base_url: http://private-ppa.launchpad.test
208
209 [poppy]
210-authentication_endpoint: http://xmlrpc-private.launchpad.dev:8087/authserver
211+authentication_endpoint: http://xmlrpc-private.launchpad.test:8087/authserver
212 host_key_private=lib/lp/poppy/tests/poppy-sftp
213 host_key_public=lib/lp/poppy/tests/poppy-sftp.pub
214 port: tcp:5023
215@@ -188,9 +188,9 @@
216 virtual_host: /
217
218 [snappy]
219-builder_proxy_auth_api_admin_username: admin-launchpad.dev
220-builder_proxy_auth_api_endpoint: http://snap-proxy.launchpad.dev:8080/tokens
221-builder_proxy_host: snap-proxy.launchpad.dev
222+builder_proxy_auth_api_admin_username: admin-launchpad.test
223+builder_proxy_auth_api_endpoint: http://snap-proxy.launchpad.test:8080/tokens
224+builder_proxy_host: snap-proxy.launchpad.test
225 builder_proxy_port: 3128
226 store_search_url: https://api.snapcraft.io/
227 tools_source: deb http://ppa.launchpad.net/snappy-dev/snapcraft-daily/ubuntu %(series)s main
228@@ -212,39 +212,39 @@
229 use_https: True
230
231 [vhost.mainsite]
232-hostname: launchpad.dev
233+hostname: launchpad.test
234 althostnames: localhost
235 openid_delegate_profile: True
236
237 [vhost.api]
238-hostname: api.launchpad.dev
239+hostname: api.launchpad.test
240
241 [vhost.blueprints]
242-hostname: blueprints.launchpad.dev
243+hostname: blueprints.launchpad.test
244
245 [vhost.code]
246-hostname: code.launchpad.dev
247+hostname: code.launchpad.test
248
249 [vhost.translations]
250-hostname: translations.launchpad.dev
251+hostname: translations.launchpad.test
252
253 [vhost.bugs]
254-hostname: bugs.launchpad.dev
255+hostname: bugs.launchpad.test
256
257 [vhost.answers]
258-hostname: answers.launchpad.dev
259+hostname: answers.launchpad.test
260
261 [vhost.testopenid]
262-hostname: testopenid.dev
263+hostname: testopenid.test
264
265 [vhost.xmlrpc]
266-hostname: xmlrpc.launchpad.dev
267+hostname: xmlrpc.launchpad.test
268
269 [vhost.xmlrpc_private]
270-hostname: xmlrpc-private.launchpad.dev
271+hostname: xmlrpc-private.launchpad.test
272
273 [vhost.feeds]
274-hostname: feeds.launchpad.dev
275+hostname: feeds.launchpad.test
276
277 [immediate_mail]
278 # XXX sinzui 2008-03-26:
279
280=== modified file 'configs/development/local-launchpad-apache'
281--- configs/development/local-launchpad-apache 2019-04-16 14:30:40 +0000
282+++ configs/development/local-launchpad-apache 2019-05-28 13:57:20 +0000
283@@ -13,20 +13,20 @@
284 # These have to be first so non-Host/non-SNI requests don't hit bazaar etc.
285 # But they can't have a ServerAlias wildcard or they'll shadow bazaar.
286 <VirtualHost %LISTEN_ADDRESS%:80>
287- ServerName launchpad.dev
288- ServerAlias answers.launchpad.dev api.launchpad.dev blueprints.launchpad.dev
289- ServerAlias bugs.launchpad.dev code.launchpad.dev feeds.launchpad.dev
290- ServerAlias translations.launchpad.dev xmlrpc.launchpad.dev testopenid.dev
291+ ServerName launchpad.test
292+ ServerAlias answers.launchpad.test api.launchpad.test blueprints.launchpad.test
293+ ServerAlias bugs.launchpad.test code.launchpad.test feeds.launchpad.test
294+ ServerAlias translations.launchpad.test xmlrpc.launchpad.test testopenid.test
295
296 RewriteEngine On
297 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
298 </VirtualHost>
299
300 <VirtualHost %LISTEN_ADDRESS%:443>
301- ServerName launchpad.dev
302- ServerAlias answers.launchpad.dev api.launchpad.dev blueprints.launchpad.dev
303- ServerAlias bugs.launchpad.dev code.launchpad.dev feeds.launchpad.dev
304- ServerAlias translations.launchpad.dev xmlrpc.launchpad.dev testopenid.dev
305+ ServerName launchpad.test
306+ ServerAlias answers.launchpad.test api.launchpad.test blueprints.launchpad.test
307+ ServerAlias bugs.launchpad.test code.launchpad.test feeds.launchpad.test
308+ ServerAlias translations.launchpad.test xmlrpc.launchpad.test testopenid.test
309 SSLEngine On
310 SSLCertificateFile /etc/apache2/ssl/launchpad.crt
311 SSLCertificateKeyFile /etc/apache2/ssl/launchpad.key
312@@ -52,7 +52,7 @@
313 </VirtualHost>
314
315 <VirtualHost %LISTEN_ADDRESS%:80>
316- ServerName bazaar.launchpad.dev
317+ ServerName bazaar.launchpad.test
318 LogLevel debug
319
320 ProxyRequests off
321@@ -62,12 +62,12 @@
322 RewriteMap branch-rewrite prg:%BRANCH_REWRITE%
323 RewriteMap escape int:escape
324
325- RewriteRule ^/$ http://launchpad.dev [L]
326+ RewriteRule ^/$ http://launchpad.test [L]
327
328 RewriteRule ^(/.*)$ ${branch-rewrite:${escape:$1}} [L,P,NE]
329
330- DocumentRoot /var/tmp/bazaar.launchpad.dev/static/
331- <Directory /var/tmp/bazaar.launchpad.dev/static/>
332+ DocumentRoot /var/tmp/bazaar.launchpad.test/static/
333+ <Directory /var/tmp/bazaar.launchpad.test/static/>
334 Options SymLinksIfOwnerMatch
335 AllowOverride None
336 Options Indexes
337@@ -79,7 +79,7 @@
338 </VirtualHost>
339
340 <VirtualHost %LISTEN_ADDRESS%:443>
341- ServerName bazaar.launchpad.dev
342+ ServerName bazaar.launchpad.test
343 LogLevel debug
344
345 SSLEngine On
346@@ -94,7 +94,7 @@
347
348 RequestHeader add X-Forwarded-Scheme https
349
350- RewriteRule ^/$ http://launchpad.dev [L]
351+ RewriteRule ^/$ http://launchpad.test [L]
352 RewriteRule ^/(.*)$ http://localhost:8080/$1 [L,P]
353
354 <Location />
355@@ -103,11 +103,11 @@
356 </VirtualHost>
357
358 <VirtualHost %LISTEN_ADDRESS%:80>
359- ServerName bazaar-internal.launchpad.dev
360+ ServerName bazaar-internal.launchpad.test
361 LogLevel debug
362
363- DocumentRoot /var/tmp/bazaar.launchpad.dev/mirrors
364- <Directory /var/tmp/bazaar.launchpad.dev/mirrors/>
365+ DocumentRoot /var/tmp/bazaar.launchpad.test/mirrors
366+ <Directory /var/tmp/bazaar.launchpad.test/mirrors/>
367 <IfVersion >= 2.4>
368 Require ip 127.0.0.0/255.0.0.0
369 </IfVersion>
370@@ -123,7 +123,7 @@
371 </VirtualHost>
372
373 <VirtualHost %LISTEN_ADDRESS%:80>
374- ServerName lists.launchpad.dev
375+ ServerName lists.launchpad.test
376 Alias / /var/tmp/mailman/mhonarc/
377 <Directory /var/tmp/mailman/mhonarc>
378 AllowOverride None
379@@ -132,8 +132,8 @@
380 </VirtualHost>
381
382 <VirtualHost %LISTEN_ADDRESS%:80>
383- ServerName ppa.launchpad.dev
384- ServerAlias private-ppa.launchpad.dev
385+ ServerName ppa.launchpad.test
386+ ServerAlias private-ppa.launchpad.test
387 LogLevel debug
388
389 DocumentRoot /var/tmp/ppa
390@@ -152,7 +152,7 @@
391 </VirtualHost>
392
393 <VirtualHost %LISTEN_ADDRESS%:80>
394- ServerName archive.launchpad.dev
395+ ServerName archive.launchpad.test
396 LogLevel debug
397
398 DocumentRoot /var/tmp/archive
399
400=== modified file 'configs/development/txpkgupload.yaml'
401--- configs/development/txpkgupload.yaml 2015-01-13 16:02:40 +0000
402+++ configs/development/txpkgupload.yaml 2019-05-28 13:57:20 +0000
403@@ -13,7 +13,7 @@
404 sftp:
405 ## The URL of the XML-RPC endpoint that handles authentication of SSH
406 ## users.
407- authentication_endpoint: "http://xmlrpc-private.launchpad.dev:8087/authserver"
408+ authentication_endpoint: "http://xmlrpc-private.launchpad.test:8087/authserver"
409 ## The absolute path to the private key used for the SFTP server.
410 host_key_private: "configs/development/txpkgupload-sftp"
411 ## The absolute path to the public key used for the SFTP server.
412
413=== modified file 'configs/testrunner-appserver/launchpad-lazr.conf'
414--- configs/testrunner-appserver/launchpad-lazr.conf 2018-11-01 18:03:06 +0000
415+++ configs/testrunner-appserver/launchpad-lazr.conf 2019-05-28 13:57:20 +0000
416@@ -12,7 +12,7 @@
417 launch: False
418
419 [launchpad]
420-openid_provider_root: http://testopenid.dev:8085/
421+openid_provider_root: http://testopenid.test:8085/
422 internal_macaroon_secret_key: internal-dev-macaroon-secret
423
424 [librarian_server]
425@@ -24,37 +24,37 @@
426 register_bounces_every: 1
427
428 [vhost.mainsite]
429-rooturl: http://launchpad.dev:8085/
430+rooturl: http://launchpad.test:8085/
431
432 [vhost.api]
433-rooturl: http://api.launchpad.dev:8085/
434+rooturl: http://api.launchpad.test:8085/
435
436 [vhost.blueprints]
437-rooturl: http://blueprints.launchpad.dev:8085/
438+rooturl: http://blueprints.launchpad.test:8085/
439
440 [vhost.code]
441-rooturl: http://code.launchpad.dev:8085/
442+rooturl: http://code.launchpad.test:8085/
443
444 [vhost.translations]
445-rooturl: http://translations.launchpad.dev:8085/
446+rooturl: http://translations.launchpad.test:8085/
447
448 [vhost.bugs]
449-rooturl: http://bugs.launchpad.dev:8085/
450+rooturl: http://bugs.launchpad.test:8085/
451
452 [vhost.answers]
453-rooturl: http://answers.launchpad.dev:8085/
454+rooturl: http://answers.launchpad.test:8085/
455
456 [vhost.testopenid]
457-rooturl: http://testopenid.dev:8085/
458+rooturl: http://testopenid.test:8085/
459
460 [vhost.xmlrpc]
461-rooturl: http://xmlrpc.launchpad.dev:8085/
462+rooturl: http://xmlrpc.launchpad.test:8085/
463
464 [vhost.xmlrpc_private]
465-rooturl: http://xmlrpc-private.launchpad.dev:8085/
466+rooturl: http://xmlrpc-private.launchpad.test:8085/
467
468 [vhost.feeds]
469-rooturl: http://feeds.launchpad.dev:8085/
470+rooturl: http://feeds.launchpad.test:8085/
471
472 [immediate_mail]
473 # BarryWarsaw 04-Dec-2008: AppServerLayer tests should send email to the fake
474
475=== modified file 'configs/testrunner/launchpad-lazr.conf'
476--- configs/testrunner/launchpad-lazr.conf 2019-04-27 08:35:51 +0000
477+++ configs/testrunner/launchpad-lazr.conf 2019-05-28 13:57:20 +0000
478@@ -19,9 +19,9 @@
479 [codehosting]
480 bzr_lp_prefix: lp://dev/
481 host_key_pair_path: lib/lp/codehosting/sshserver/tests/keys
482-port: tcp:22222:interface=bazaar.launchpad.dev
483+port: tcp:22222:interface=bazaar.launchpad.test
484 access_log: /tmp/test-codehosting-access.log
485-internal_branch_by_id_root: file:///var/tmp/bazaar.launchpad.dev/mirrors
486+internal_branch_by_id_root: file:///var/tmp/bazaar.launchpad.test/mirrors
487
488 [database]
489 rw_main_master: dbname=launchpad_ftest
490@@ -89,7 +89,7 @@
491 root: /tmp/gina_test_archive
492
493 [bing]
494-site: http://launchpad.dev:8093/bingcustomsearch/v7.0/search
495+site: http://launchpad.test:8093/bingcustomsearch/v7.0/search
496
497 [gpghandler]
498 upload_keys: True
499@@ -105,10 +105,10 @@
500 max_attachment_size: 1024
501 geoip_database: /usr/share/GeoIP/GeoLiteCity.dat
502 logparser_max_parsed_lines: 100000
503-homepage_recent_posts_feed: http://launchpad.dev:8093/blog-feed
504-openid_canonical_root: http://testopenid.dev/
505-openid_provider_root: http://testopenid.dev/
506-openid_alternate_provider_roots: http://login1.dev/, http://login2.dev/
507+homepage_recent_posts_feed: http://launchpad.test:8093/blog-feed
508+openid_canonical_root: http://testopenid.test/
509+openid_provider_root: http://testopenid.test/
510+openid_alternate_provider_roots: http://login1.test/, http://login2.test/
511
512 [launchpad_session]
513 cookie: launchpad_tests
514
515=== modified file 'constraints.txt'
516--- constraints.txt 2019-04-28 15:22:08 +0000
517+++ constraints.txt 2019-05-28 13:57:20 +0000
518@@ -276,7 +276,7 @@
519 keyring==0.6.2
520 kombu==4.4.0
521 launchpad-buildd==159
522-launchpadlib==1.10.5
523+launchpadlib==1.10.7
524 lazr.authentication==0.1.1
525 lazr.batchnavigator==1.2.11
526 lazr.config==2.2.1
527
528=== modified file 'database/sampledata/README'
529--- database/sampledata/README 2012-05-11 05:21:08 +0000
530+++ database/sampledata/README 2019-05-28 13:57:20 +0000
531@@ -2,9 +2,9 @@
532 ===========
533
534 There are two sorts of sample data. One used by developers when playing around
535-in http://launchpad.dev and another used by our tests.
536+in http://launchpad.test and another used by our tests.
537
538-The sample data used by default in http://launchpad.dev is stored as a SQL
539+The sample data used by default in http://launchpad.test is stored as a SQL
540 file called current-dev.sql, in this same directory. That data is loaded into
541 the launchpad_dev DB and you can change it as you like, as its main purpose is
542 to aid developers experimenting all features of Launchpad.
543@@ -12,7 +12,7 @@
544 Sample data for tests is stored as a SQL file called current.sql, under this
545 same directory. This data is loaded into the launchpad_ftest_template and
546 launchpad_ftest_playground DBs. The former is used by our test runner and the
547-latter can be accessed through http://launchpad.dev when you run the web app
548+latter can be accessed through http://launchpad.test when you run the web app
549 using the test-playground config (i.e. make LPCONFIG=test-playground run),
550 so that you can see the world as one of our tests would.
551
552
553=== modified file 'database/sampledata/current-dev.sql'
554--- database/sampledata/current-dev.sql 2019-04-16 14:30:40 +0000
555+++ database/sampledata/current-dev.sql 2019-05-28 13:57:20 +0000
556@@ -4682,7 +4682,7 @@
557
558 ALTER TABLE logintoken DISABLE TRIGGER ALL;
559
560-INSERT INTO logintoken (id, requester, requesteremail, email, created, tokentype, token, fingerprint, redirection_url, date_consumed) VALUES (1, NULL, NULL, 'bac@canonical.com', '2008-06-27 14:48:38.308457', 3, '4d0a02130ab51372bb2114a9abe3ad8482810bdac58a4231c85c005c923cd57c', NULL, 'http://launchpad.dev', '2008-06-27 14:49:11.149508');
561+INSERT INTO logintoken (id, requester, requesteremail, email, created, tokentype, token, fingerprint, redirection_url, date_consumed) VALUES (1, NULL, NULL, 'bac@canonical.com', '2008-06-27 14:48:38.308457', 3, '4d0a02130ab51372bb2114a9abe3ad8482810bdac58a4231c85c005c923cd57c', NULL, 'http://launchpad.test', '2008-06-27 14:49:11.149508');
562 INSERT INTO logintoken (id, requester, requesteremail, email, created, tokentype, token, fingerprint, redirection_url, date_consumed) VALUES (2, 16, 'foo.bar@canonical.com', 'admin@canonical.com', '2008-08-05 11:59:42.448213', 4, 'd617585e5d8be1b4eba0c4d5f5058f0f761f6d2912d8c780b257d483ac3e5c8f', NULL, NULL, '2008-08-05 12:01:32.086327');
563
564
565@@ -9186,8 +9186,8 @@
566
567 ALTER TABLE publisherconfig DISABLE TRIGGER ALL;
568
569-INSERT INTO publisherconfig (id, distribution, root_dir, base_url, copy_base_url) VALUES (1, 1, '/var/tmp/archive', 'http://archive.launchpad.dev/', 'http://rebuild-test.internal/');
570-INSERT INTO publisherconfig (id, distribution, root_dir, base_url, copy_base_url) VALUES (2, 8, '/var/tmp/archive', 'http://archive.launchpad.dev/', 'http://rebuild-test.internal/');
571+INSERT INTO publisherconfig (id, distribution, root_dir, base_url, copy_base_url) VALUES (1, 1, '/var/tmp/archive', 'http://archive.launchpad.test/', 'http://rebuild-test.internal/');
572+INSERT INTO publisherconfig (id, distribution, root_dir, base_url, copy_base_url) VALUES (2, 8, '/var/tmp/archive', 'http://archive.launchpad.test/', 'http://rebuild-test.internal/');
573
574
575 ALTER TABLE publisherconfig ENABLE TRIGGER ALL;
576
577=== modified file 'database/sampledata/current.sql'
578--- database/sampledata/current.sql 2017-12-15 12:15:25 +0000
579+++ database/sampledata/current.sql 2019-05-28 13:57:20 +0000
580@@ -4596,7 +4596,7 @@
581
582 ALTER TABLE logintoken DISABLE TRIGGER ALL;
583
584-INSERT INTO logintoken (id, requester, requesteremail, email, created, tokentype, token, fingerprint, redirection_url, date_consumed) VALUES (1, NULL, NULL, 'bac@canonical.com', '2008-06-27 14:48:38.308457', 3, '4d0a02130ab51372bb2114a9abe3ad8482810bdac58a4231c85c005c923cd57c', NULL, 'http://launchpad.dev', '2008-06-27 14:49:11.149508');
585+INSERT INTO logintoken (id, requester, requesteremail, email, created, tokentype, token, fingerprint, redirection_url, date_consumed) VALUES (1, NULL, NULL, 'bac@canonical.com', '2008-06-27 14:48:38.308457', 3, '4d0a02130ab51372bb2114a9abe3ad8482810bdac58a4231c85c005c923cd57c', NULL, 'http://launchpad.test', '2008-06-27 14:49:11.149508');
586 INSERT INTO logintoken (id, requester, requesteremail, email, created, tokentype, token, fingerprint, redirection_url, date_consumed) VALUES (2, 16, 'foo.bar@canonical.com', 'admin@canonical.com', '2008-08-05 11:59:42.448213', 4, 'd617585e5d8be1b4eba0c4d5f5058f0f761f6d2912d8c780b257d483ac3e5c8f', NULL, NULL, '2008-08-05 12:01:32.086327');
587
588
589@@ -9100,8 +9100,8 @@
590
591 ALTER TABLE publisherconfig DISABLE TRIGGER ALL;
592
593-INSERT INTO publisherconfig (id, distribution, root_dir, base_url, copy_base_url) VALUES (1, 1, '/var/tmp/archive', 'http://archive.launchpad.dev/', 'http://rebuild-test.internal/');
594-INSERT INTO publisherconfig (id, distribution, root_dir, base_url, copy_base_url) VALUES (2, 8, '/var/tmp/archive', 'http://archive.launchpad.dev/', 'http://rebuild-test.internal/');
595+INSERT INTO publisherconfig (id, distribution, root_dir, base_url, copy_base_url) VALUES (1, 1, '/var/tmp/archive', 'http://archive.launchpad.test/', 'http://rebuild-test.internal/');
596+INSERT INTO publisherconfig (id, distribution, root_dir, base_url, copy_base_url) VALUES (2, 8, '/var/tmp/archive', 'http://archive.launchpad.test/', 'http://rebuild-test.internal/');
597
598
599 ALTER TABLE publisherconfig ENABLE TRIGGER ALL;
600
601=== modified file 'database/schema/Makefile'
602--- database/schema/Makefile 2019-02-25 22:58:26 +0000
603+++ database/schema/Makefile 2019-05-28 13:57:20 +0000
604@@ -27,7 +27,7 @@
605 TEST_SESSION_DBNAME=session_ftest
606
607 # The database which is a copy of launchpad_ftest_template and can be accessed
608-# via http://launchpad.dev when you use LPCONFIG=test-playground.
609+# via http://launchpad.test when you use LPCONFIG=test-playground.
610 TEST_PLAYGROUND_DBNAME=launchpad_ftest_playground
611
612 # The session database name.
613
614=== modified file 'lib/canonical/launchpad/icing/css/forms.css'
615--- lib/canonical/launchpad/icing/css/forms.css 2016-07-01 21:05:38 +0000
616+++ lib/canonical/launchpad/icing/css/forms.css 2019-05-28 13:57:20 +0000
617@@ -142,7 +142,7 @@
618 }
619 table.form, table.extra-options {
620 /* Many forms are laid out using tables, with appropriate spacing: */
621- /* http://launchpad.dev/firefox/+edit */
622+ /* http://launchpad.test/firefox/+edit */
623 margin: 1em 0 inherit inherit;
624 width: 100%;
625 }
626@@ -436,8 +436,8 @@
627 * without using tables.
628 *
629 * Examples:
630- * https://translations.launchpad.dev/evolution/trunk/+pots/evolution-2.2/es/+upload
631- * https://translations.launchpad.dev/evolution/trunk/+pots/evolution-2.2/+export
632+ * https://translations.launchpad.test/evolution/trunk/+pots/evolution-2.2/es/+upload
633+ * https://translations.launchpad.test/evolution/trunk/+pots/evolution-2.2/+export
634 */
635 form.translations div.alignment .content {
636 float: left;
637
638=== modified file 'lib/canonical/launchpad/icing/style.css'
639--- lib/canonical/launchpad/icing/style.css 2018-08-29 14:54:10 +0000
640+++ lib/canonical/launchpad/icing/style.css 2019-05-28 13:57:20 +0000
641@@ -812,8 +812,8 @@
642 /* Templates listing.
643 *
644 * Examples:
645- * https://translations.launchpad.dev/ubuntu/hoary/+templates
646- * https://translations.launchpad.dev/evolution/trunk/+templates
647+ * https://translations.launchpad.test/ubuntu/hoary/+templates
648+ * https://translations.launchpad.test/evolution/trunk/+templates
649 */
650 .inactive-template td {
651 background-color: #fee;
652@@ -823,8 +823,8 @@
653 /* Translations statistics and legend.
654 *
655 * Examples:
656- * https://translations.launchpad.dev/ubuntu/hoary/+lang/es
657- * https://translations.launchpad.dev/evolution/trunk/+lang/es
658+ * https://translations.launchpad.test/ubuntu/hoary/+lang/es
659+ * https://translations.launchpad.test/evolution/trunk/+lang/es
660 */
661
662 div.translations-legend {
663@@ -857,9 +857,9 @@
664 /* Translations help links.
665 *
666 * Examples:
667- * https://translations.launchpad.dev/ubuntu/hoary/+source/evolution/+pots/evolution-2.2/
668- * https://translations.launchpad.dev/ubuntu/hoary/+source/evolution/+translations
669- * https://translations.launchpad.dev/ubuntu/hoary/
670+ * https://translations.launchpad.test/ubuntu/hoary/+source/evolution/+pots/evolution-2.2/
671+ * https://translations.launchpad.test/ubuntu/hoary/+source/evolution/+translations
672+ * https://translations.launchpad.test/ubuntu/hoary/
673 *
674 */
675 div.translation-help-links a {
676
677=== modified file 'lib/launchpad_loggerhead/tests.py'
678--- lib/launchpad_loggerhead/tests.py 2018-06-06 12:46:56 +0000
679+++ lib/launchpad_loggerhead/tests.py 2019-05-28 13:57:20 +0000
680@@ -202,7 +202,7 @@
681 allow_redirects=False)
682 self.assertEqual(301, response.status_code)
683 self.assertEqual(
684- "testopenid.dev:8085",
685+ "testopenid.test:8085",
686 urlsplit(response.headers["Location"]).netloc)
687
688 def test_private_port_public_branch(self):
689
690=== modified file 'lib/lp/answers/browser/tests/faq-views.txt'
691--- lib/lp/answers/browser/tests/faq-views.txt 2018-06-02 19:27:16 +0000
692+++ lib/lp/answers/browser/tests/faq-views.txt 2019-05-28 13:57:20 +0000
693@@ -45,10 +45,10 @@
694 that the form works from any page.
695
696 >>> print(view.portlet_action)
697- http://answers.launchpad.dev/firefox/+faqs
698+ http://answers.launchpad.test/firefox/+faqs
699
700 >>> print(content.form['action'])
701- http://answers.launchpad.dev/firefox/+faqs
702+ http://answers.launchpad.test/firefox/+faqs
703
704 The portlet provides a link to create a FAQ when the user that has append
705 permission, such as the project owner.
706
707=== modified file 'lib/lp/answers/doc/notifications.txt'
708--- lib/lp/answers/doc/notifications.txt 2018-11-18 17:38:02 +0000
709+++ lib/lp/answers/doc/notifications.txt 2019-05-28 13:57:20 +0000
710@@ -622,13 +622,13 @@
711
712 >>> print(notifications[0].body)
713 Your question #... on Mozilla Firefox changed:
714- http://answers.launchpad.dev/firefox/+question/...
715+ http://answers.launchpad.test/firefox/+question/...
716 <BLANKLINE>
717 Status: Open => Answered
718 <BLANKLINE>
719 Related FAQ set to:
720 How do I install plugins (Shockwave, QuickTime, etc.)?
721- http://answers.launchpad.dev/firefox/+faq/10
722+ http://answers.launchpad.test/firefox/+faq/10
723 <BLANKLINE>
724 Sample Person proposed the following answer:
725 Read the FAQ.
726@@ -643,11 +643,11 @@
727
728 >>> print(notifications[0].body)
729 Your question #... on Mozilla Firefox changed:
730- http://answers.launchpad.dev/firefox/+question/...
731+ http://answers.launchpad.test/firefox/+question/...
732 <BLANKLINE>
733 Related FAQ was removed:
734 How do I install plugins (Shockwave, QuickTime, etc.)?
735- http://answers.launchpad.dev/firefox/+faq/10
736+ http://answers.launchpad.test/firefox/+faq/10
737 <BLANKLINE>
738 Sample Person proposed the following answer:
739 Sorry, this wasn't so useful.
740
741=== modified file 'lib/lp/answers/stories/answer-contact-report.txt'
742--- lib/lp/answers/stories/answer-contact-report.txt 2018-06-02 19:27:16 +0000
743+++ lib/lp/answers/stories/answer-contact-report.txt 2019-05-28 13:57:20 +0000
744@@ -5,7 +5,7 @@
745 the 'Answer Contact For' link from the actions portlet while viewing
746 the Person's page.
747
748- >>> anon_browser.open('http://answers.launchpad.dev/~no-priv')
749+ >>> anon_browser.open('http://answers.launchpad.test/~no-priv')
750 >>> anon_browser.getLink('Answer contact for').click()
751 >>> print(anon_browser.title)
752 Projects for which...
753@@ -20,7 +20,7 @@
754 But when the person is an answer contact, the page displays the project
755 they registered for.
756
757- >>> anon_browser.open('http://answers.launchpad.dev/~name16')
758+ >>> anon_browser.open('http://answers.launchpad.test/~name16')
759 >>> anon_browser.getLink('Answer contact for').click()
760 >>> print(anon_browser.title)
761 Projects for which...
762@@ -49,7 +49,7 @@
763
764 >>> browser.addHeader('Authorization', 'Basic test@canonical.com:test')
765 >>> browser.open(
766- ... 'http://answers.launchpad.dev/~name12')
767+ ... 'http://answers.launchpad.test/~name12')
768 >>> browser.getLink('Answer contact for').click()
769 >>> print(browser.title)
770 Projects for which...
771@@ -68,7 +68,7 @@
772 see the link for other users.
773
774 >>> browser.open(
775- ... 'http://answers.launchpad.dev/~name16')
776+ ... 'http://answers.launchpad.test/~name16')
777 >>> browser.getLink('Answer contact for').click()
778 >>> print(browser.title)
779 Projects for which...
780
781=== modified file 'lib/lp/answers/stories/distribution-package-answer-contact.txt'
782--- lib/lp/answers/stories/distribution-package-answer-contact.txt 2018-06-02 19:27:16 +0000
783+++ lib/lp/answers/stories/distribution-package-answer-contact.txt 2019-05-28 13:57:20 +0000
784@@ -26,7 +26,7 @@
785 and another one listing those of the distribution.
786
787 >>> anon_browser.open(
788- ... 'http://launchpad.dev/ubuntu/+source/evolution')
789+ ... 'http://launchpad.test/ubuntu/+source/evolution')
790 >>> anon_browser.getLink('Answers').click()
791 >>> portlet = find_portlet(
792 ... anon_browser.contents,
793@@ -42,7 +42,7 @@
794
795 >>> browser.addHeader('Authorization', 'Basic test@canonical.com:test')
796 >>> browser.open(
797- ... 'http://launchpad.dev/ubuntu/+source/evolution/+questions')
798+ ... 'http://launchpad.test/ubuntu/+source/evolution/+questions')
799 >>> browser.getLink('Answers').click()
800 >>> browser.getLink('Set answer contact').click()
801 >>> print(browser.title)
802
803=== modified file 'lib/lp/answers/stories/faq-add.txt'
804--- lib/lp/answers/stories/faq-add.txt 2018-06-02 19:27:16 +0000
805+++ lib/lp/answers/stories/faq-add.txt 2019-05-28 13:57:20 +0000
806@@ -6,7 +6,7 @@
807 No Privileges Person is not an answer contact for Mozilla Firefox, nor
808 the project owner, therefore they cannot create a new FAQ.
809
810- >>> user_browser.open('http://answers.launchpad.dev/firefox')
811+ >>> user_browser.open('http://answers.launchpad.test/firefox')
812 >>> user_browser.getLink('All FAQs').click()
813
814 >>> user_browser.getLink('Create a new FAQ')
815@@ -15,7 +15,7 @@
816 LinkNotFoundError
817
818 >>> user_browser.open(
819- ... 'http://answers.launchpad.dev/firefox/+createfaq')
820+ ... 'http://answers.launchpad.test/firefox/+createfaq')
821 Traceback (most recent call last):
822 ...
823 Unauthorized: ...
824@@ -26,7 +26,7 @@
825 from various sources about the subject.
826
827 >>> owner_browser = setupBrowser(auth='Basic test@canonical.com:test')
828- >>> owner_browser.open('http://answers.launchpad.dev/firefox')
829+ >>> owner_browser.open('http://answers.launchpad.test/firefox')
830 >>> owner_browser.getLink('All FAQs').click()
831 >>> print(owner_browser.title)
832 FAQs for Mozilla Firefox : Questions : Mozilla Firefox
833@@ -46,7 +46,7 @@
834 content field. They then submit the form using the 'Create' button.
835
836 >>> owner_browser.url
837- 'http://answers.launchpad.dev/firefox/+createfaq'
838+ 'http://answers.launchpad.test/firefox/+createfaq'
839 >>> print(owner_browser.title)
840 Create a FAQ for...
841
842@@ -65,7 +65,7 @@
843 The FAQ is created and the browser displays the page for Sample Person.
844
845 >>> owner_browser.url
846- 'http://answers.launchpad.dev/firefox/+faq/...'
847+ 'http://answers.launchpad.test/firefox/+faq/...'
848 >>> print(owner_browser.title)
849 FAQ #... : Questions : Mozilla Firefox
850
851
852=== modified file 'lib/lp/answers/stories/faq-browse-and-search.txt'
853--- lib/lp/answers/stories/faq-browse-and-search.txt 2018-06-02 19:27:16 +0000
854+++ lib/lp/answers/stories/faq-browse-and-search.txt 2019-05-28 13:57:20 +0000
855@@ -21,14 +21,14 @@
856 >>> transaction.commit()
857 >>> logout()
858
859- >>> browser.open('http://answers.launchpad.dev/kubuntu')
860+ >>> browser.open('http://answers.launchpad.test/kubuntu')
861 >>> browser.getLink('All FAQs').click()
862
863 Unfortunately, it seems that nobody has problems or questions about
864 Kubuntu:
865
866 >>> print(browser.url)
867- http://answers.launchpad.dev/kubuntu/+faqs
868+ http://answers.launchpad.test/kubuntu/+faqs
869 >>> print(browser.title)
870 FAQs for Kubuntu : Questions : Kubuntu
871
872@@ -41,7 +41,7 @@
873 She learns through Fozzie Bear that support for Kubuntu is really
874 happening on the Ubuntu project.
875
876- >>> browser.open('http://answers.launchpad.dev/ubuntu')
877+ >>> browser.open('http://answers.launchpad.test/ubuntu')
878 >>> browser.getLink('All FAQs').click()
879 >>> print(browser.title)
880 FAQs for Ubuntu : Questions : Ubuntu
881@@ -83,7 +83,7 @@
882 >>> print(backslashreplace(browser.title))
883 FAQ #6 : Questions : Ubuntu
884 >>> print(browser.url)
885- http://answers.launchpad.dev/ubuntu/+faq/6
886+ http://answers.launchpad.test/ubuntu/+faq/6
887
888 The FAQ page has a link back to the FAQ listing:
889
890@@ -91,7 +91,7 @@
891 >>> print(browser.title)
892 FAQs for Ubuntu : Questions : Ubuntu
893 >>> print(browser.url)
894- http://answers.launchpad.dev/ubuntu/+faqs
895+ http://answers.launchpad.test/ubuntu/+faqs
896
897
898 == Searching FAQs ==
899@@ -166,25 +166,25 @@
900 FAQs. The 'All FAQs' link that appears in that context links to the
901 distribution FAQs.
902
903- >>> browser.open('http://answers.launchpad.dev/ubuntu/'
904+ >>> browser.open('http://answers.launchpad.test/ubuntu/'
905 ... '+source/mozilla-firefox')
906 >>> browser.getLink('All FAQs').click()
907 >>> print(browser.title)
908 FAQs for Ubuntu : Questions : Ubuntu
909 >>> print(browser.url)
910- http://answers.launchpad.dev/ubuntu/+faqs
911+ http://answers.launchpad.test/ubuntu/+faqs
912
913
914 == Accessing an FAQ directly ==
915
916 Asking for a non-existent FAQ or an invalid ID will raise a 404 error.
917
918- >>> anon_browser.open('http://answers.launchpad.dev/ubuntu/+faq/171717')
919+ >>> anon_browser.open('http://answers.launchpad.test/ubuntu/+faq/171717')
920 Traceback (most recent call last):
921 ...
922 NotFound: ...
923
924- >>> anon_browser.open('http://answers.launchpad.dev/ubuntu/+faq/bad')
925+ >>> anon_browser.open('http://answers.launchpad.test/ubuntu/+faq/bad')
926 Traceback (most recent call last):
927 ...
928 NotFound: ...
929
930=== modified file 'lib/lp/answers/stories/faq-edit.txt'
931--- lib/lp/answers/stories/faq-edit.txt 2018-06-02 19:27:16 +0000
932+++ lib/lp/answers/stories/faq-edit.txt 2019-05-28 13:57:20 +0000
933@@ -8,7 +8,7 @@
934 appear for the anonymous user nor No Privileges Person:
935
936 >>> from lp.services.helpers import backslashreplace
937- >>> anon_browser.open('http://answers.launchpad.dev/firefox/+faq/7')
938+ >>> anon_browser.open('http://answers.launchpad.test/firefox/+faq/7')
939 >>> print(backslashreplace(anon_browser.title))
940 FAQ #7 : Questions : Mozilla Firefox
941
942@@ -17,7 +17,7 @@
943 ...
944 LinkNotFoundError
945
946- >>> user_browser.open('http://answers.launchpad.dev/firefox/+faq/7')
947+ >>> user_browser.open('http://answers.launchpad.test/firefox/+faq/7')
948 >>> user_browser.getLink('Edit FAQ')
949 Traceback (most recent call last):
950 ...
951@@ -26,12 +26,12 @@
952 Even trying to access the link directly will fail:
953
954 >>> anon_browser.open(
955- ... 'http://answers.launchpad.dev/firefox/+faq/7/+edit')
956+ ... 'http://answers.launchpad.test/firefox/+faq/7/+edit')
957 Traceback (most recent call last):
958 ...
959 Unauthorized: ...
960 >>> user_browser.open(
961- ... 'http://answers.launchpad.dev/firefox/+faq/7/+edit')
962+ ... 'http://answers.launchpad.test/firefox/+faq/7/+edit')
963 Traceback (most recent call last):
964 ...
965 Unauthorized: ...
966@@ -40,10 +40,10 @@
967 project:
968
969 >>> browser.addHeader('Authorization', 'Basic test@canonical.com:test')
970- >>> browser.open('http://answers.launchpad.dev/firefox/+faq/7')
971+ >>> browser.open('http://answers.launchpad.test/firefox/+faq/7')
972 >>> browser.getLink('Edit FAQ').click()
973 >>> print(browser.url)
974- http://answers.launchpad.dev/firefox/+faq/7/+edit
975+ http://answers.launchpad.test/firefox/+faq/7/+edit
976 >>> print(browser.title)
977 Edit FAQ...
978
979@@ -68,7 +68,7 @@
980 The user can see their changes on the page:
981
982 >>> print(browser.url)
983- http://answers.launchpad.dev/firefox/+faq/7
984+ http://answers.launchpad.test/firefox/+faq/7
985
986 >>> print(extract_text(find_tag_by_id(browser.contents, 'faq-keywords')))
987 Keywords: windows ubuntu plugins extensions
988
989=== modified file 'lib/lp/answers/stories/project-add-question.txt'
990--- lib/lp/answers/stories/project-add-question.txt 2018-06-02 19:27:16 +0000
991+++ lib/lp/answers/stories/project-add-question.txt 2019-05-28 13:57:20 +0000
992@@ -19,13 +19,13 @@
993 The logged user will see the Ask a Question page, for the Mozilla
994 Project in this case.
995
996- >>> anon_browser.open('http://answers.launchpad.dev/mozilla')
997+ >>> anon_browser.open('http://answers.launchpad.test/mozilla')
998 >>> anon_browser.getLink('Ask a question').click()
999 Traceback (most recent call last):
1000 ...
1001 Unauthorized...
1002
1003- >>> user_browser.open('http://answers.launchpad.dev/mozilla')
1004+ >>> user_browser.open('http://answers.launchpad.test/mozilla')
1005 >>> user_browser.getLink('Ask a question').click()
1006 >>> print(user_browser.title)
1007 Ask a question...
1008@@ -155,7 +155,7 @@
1009 speaks Japanese, so we will use him.
1010
1011 >>> daf_browser = setupBrowser(auth='Basic daf@canonical.com:test')
1012- >>> daf_browser.open('http://launchpad.dev/~daf/+editlanguages')
1013+ >>> daf_browser.open('http://launchpad.test/~daf/+editlanguages')
1014 >>> print(daf_browser.title)
1015 Language preferences...
1016
1017@@ -163,7 +163,7 @@
1018 True
1019
1020 >>> daf_browser.open(
1021- ... 'http://answers.launchpad.dev/thunderbird/+answer-contact')
1022+ ... 'http://answers.launchpad.test/thunderbird/+answer-contact')
1023 >>> print(daf_browser.title)
1024 Answer contact for...
1025
1026@@ -181,7 +181,7 @@
1027 match. This condition demonstrates the supported language behaviour.
1028
1029 >>> user_browser.open(
1030- ... 'http://launchpad.dev/~no-priv/+editlanguages')
1031+ ... 'http://launchpad.test/~no-priv/+editlanguages')
1032 >>> print(user_browser.title)
1033 Language preferences...
1034
1035@@ -198,7 +198,7 @@
1036 and expect someone to reply in the same language.
1037
1038 >>> user_browser.open(
1039- ... 'http://answers.launchpad.dev/firefox/+addquestion')
1040+ ... 'http://answers.launchpad.test/firefox/+addquestion')
1041 >>> print(user_browser.getControl('Language').displayOptions)
1042 ['English (en) *', 'Japanese (ja)']
1043
1044@@ -225,7 +225,7 @@
1045 No Privileged Person did above, but this time in wants to do so in
1046 Japanese.
1047
1048- >>> user_browser.open('http://answers.launchpad.dev/mozilla')
1049+ >>> user_browser.open('http://answers.launchpad.test/mozilla')
1050 >>> user_browser.getLink('Ask a question').click()
1051 >>> print(user_browser.title)
1052 Ask a question...
1053@@ -295,7 +295,7 @@
1054 Privileges Person correctly chooses Thunderbird as the subject of their
1055 question.
1056
1057- >>> user_browser.open('http://answers.launchpad.dev/mozilla')
1058+ >>> user_browser.open('http://answers.launchpad.test/mozilla')
1059 >>> user_browser.getLink('Ask a question').click()
1060 >>> print(user_browser.title)
1061 Ask a question...
1062
1063=== modified file 'lib/lp/answers/stories/question-add-in-other-languages.txt'
1064--- lib/lp/answers/stories/question-add-in-other-languages.txt 2018-06-02 19:27:16 +0000
1065+++ lib/lp/answers/stories/question-add-in-other-languages.txt 2019-05-28 13:57:20 +0000
1066@@ -4,7 +4,7 @@
1067 'Ask a question' page has a pop-up where the user can select the language
1068 of the question. By default, the question language is 'English'.
1069
1070- >>> user_browser.open('http://launchpad.dev/ubuntu/+questions')
1071+ >>> user_browser.open('http://launchpad.test/ubuntu/+questions')
1072 >>> user_browser.getLink('Ask a question').click()
1073 >>> user_browser.getControl('Language').value
1074 ['en']
1075@@ -21,7 +21,7 @@
1076 The languages that are supported are displayed with an asterisk.
1077
1078 >>> browser.addHeader('Authorization', 'Basic salgado@ubuntu.com:test')
1079- >>> browser.open('http://launchpad.dev/ubuntu/+addquestion')
1080+ >>> browser.open('http://launchpad.test/ubuntu/+addquestion')
1081
1082 >>> browser.getControl('Language').displayOptions
1083 ['English (en) *', 'Portuguese (Brazil) (pt_BR)']
1084@@ -104,7 +104,7 @@
1085 then changed their mind on the second page.
1086
1087 >>> browser = setupBrowser(auth='Basic daf@canonical.com:test')
1088- >>> browser.open('http://launchpad.dev/ubuntu/+addquestion')
1089+ >>> browser.open('http://launchpad.test/ubuntu/+addquestion')
1090
1091 >>> browser.getControl('Language').value = ['en']
1092 >>> browser.getControl('Summary').value = 'some random words'
1093@@ -126,7 +126,7 @@
1094 >>> browser.getControl('Post Question').click()
1095
1096 >>> browser.url
1097- 'http://launchpad.dev/ubuntu/+addquestion'
1098+ 'http://launchpad.test/ubuntu/+addquestion'
1099
1100 >>> for tag in find_tags_by_class(browser.contents, 'warning message'):
1101 ... print(tag.renderContents())
1102
1103=== modified file 'lib/lp/answers/stories/question-add.txt'
1104--- lib/lp/answers/stories/question-add.txt 2018-06-02 19:27:16 +0000
1105+++ lib/lp/answers/stories/question-add.txt 2019-05-28 13:57:20 +0000
1106@@ -5,7 +5,7 @@
1107 one involes two steps. First, go to the product or distribution for
1108 which support is desired:
1109
1110- >>> browser.open('http://answers.launchpad.dev/ubuntu')
1111+ >>> browser.open('http://answers.launchpad.test/ubuntu')
1112 >>> print(browser.title)
1113 Questions : Ubuntu
1114
1115@@ -21,7 +21,7 @@
1116 Traceback (most recent call last):
1117 ...
1118 Unauthorized...
1119- >>> user_browser.open('http://answers.launchpad.dev/ubuntu/')
1120+ >>> user_browser.open('http://answers.launchpad.test/ubuntu/')
1121 >>> user_browser.getLink('Ask a question').click()
1122 >>> print(user_browser.title)
1123 Ask a question...
1124@@ -37,7 +37,7 @@
1125 associated with the source package of the used application.
1126
1127 >>> user_browser.open(
1128- ... 'http://launchpad.dev/ubuntu/hoary/'
1129+ ... 'http://launchpad.test/ubuntu/hoary/'
1130 ... '+sources/mozilla-firefox/+gethelp')
1131 >>> print(user_browser.title)
1132 Help and support...
1133@@ -86,7 +86,7 @@
1134 How can I play MP3/Divx/DVDs/Quicktime/Realmedia files or view
1135 Flash/Java web pages
1136 >>> similar_faqs.a['href']
1137- u'http://answers.launchpad.dev/ubuntu/+faq/...'
1138+ u'http://answers.launchpad.test/ubuntu/+faq/...'
1139
1140 >>> similar_questions = contents.find(id='similar-questions')
1141 >>> print(extract_text(similar_questions).encode(
1142
1143=== modified file 'lib/lp/answers/stories/question-answer-contact.txt'
1144--- lib/lp/answers/stories/question-answer-contact.txt 2018-06-02 19:27:16 +0000
1145+++ lib/lp/answers/stories/question-answer-contact.txt 2019-05-28 13:57:20 +0000
1146@@ -11,7 +11,7 @@
1147
1148 >>> browser.addHeader('Authorization', 'Basic test@canonical.com:test')
1149 >>> browser.addHeader('Accept-Language', 'en, es')
1150- >>> browser.open('http://launchpad.dev/ubuntu/+questions')
1151+ >>> browser.open('http://launchpad.test/ubuntu/+questions')
1152 >>> print(extract_text(
1153 ... find_tag_by_id(
1154 ... browser.contents, 'portlet-answer-contacts-ubuntu')))
1155@@ -68,7 +68,7 @@
1156 answer contact' link and uncheck themselves or the team they want to remove
1157 from the answer contact list.
1158
1159- >>> browser.open('http://launchpad.dev/ubuntu/+questions')
1160+ >>> browser.open('http://launchpad.test/ubuntu/+questions')
1161 >>> browser.getLink('Set answer contact').click()
1162 >>> browser.getControl(
1163 ... "I want to be an answer contact for Ubuntu").selected
1164@@ -92,13 +92,13 @@
1165
1166 The 'Set answer contact' action is also available on products:
1167
1168- >>> browser.open('http://answers.launchpad.dev/firefox')
1169+ >>> browser.open('http://answers.launchpad.test/firefox')
1170 >>> browser.getLink('Set answer contact').click()
1171 >>> print(browser.title)
1172 Answer contact for...
1173
1174 >>> print(browser.url)
1175- http://answers.launchpad.dev/firefox/+answer-contact
1176+ http://answers.launchpad.test/firefox/+answer-contact
1177
1178
1179 Answer Contact teams and preferred languages
1180@@ -115,7 +115,7 @@
1181 contacts for Ubuntu, but only for Spanish questions to keep the email
1182 traffic to a manageable volume.
1183
1184- >>> browser.open('http://answers.launchpad.dev/ubuntu/')
1185+ >>> browser.open('http://answers.launchpad.test/ubuntu/')
1186 >>> print(browser.title)
1187 Questions : Ubuntu
1188
1189@@ -129,7 +129,7 @@
1190 Sample Person navigates to the team page to set it's preferred
1191 languages. They must add Spanish to the team's preferred languages.
1192
1193- >>> browser.open('http://launchpad.dev/~landscape-developers')
1194+ >>> browser.open('http://launchpad.test/~landscape-developers')
1195 >>> browser.title
1196 'Landscape Developers in Launchpad'
1197
1198
1199=== modified file 'lib/lp/answers/stories/question-answers-vhost.txt'
1200--- lib/lp/answers/stories/question-answers-vhost.txt 2018-06-02 19:27:16 +0000
1201+++ lib/lp/answers/stories/question-answers-vhost.txt 2019-05-28 13:57:20 +0000
1202@@ -9,7 +9,7 @@
1203 Product
1204 -------
1205
1206- >>> anon_browser.open('http://answers.launchpad.dev/firefox')
1207+ >>> anon_browser.open('http://answers.launchpad.test/firefox')
1208 >>> print(anon_browser.title)
1209 Questions : Mozilla Firefox
1210
1211@@ -17,7 +17,7 @@
1212 Distribution
1213 ------------
1214
1215- >>> anon_browser.open('http://answers.launchpad.dev/ubuntu')
1216+ >>> anon_browser.open('http://answers.launchpad.test/ubuntu')
1217 >>> print(anon_browser.title)
1218 Questions : Ubuntu
1219
1220@@ -26,7 +26,7 @@
1221 ---------------------------
1222
1223 >>> anon_browser.open(
1224- ... 'http://answers.launchpad.dev/ubuntu/+source/mozilla-firefox')
1225+ ... 'http://answers.launchpad.test/ubuntu/+source/mozilla-firefox')
1226 >>> print(anon_browser.title)
1227 Questions : mozilla-firefox package : Ubuntu
1228
1229@@ -35,7 +35,7 @@
1230 ------------
1231
1232 >>> anon_browser.open(
1233- ... 'http://answers.launchpad.dev/mozilla')
1234+ ... 'http://answers.launchpad.test/mozilla')
1235 >>> print(anon_browser.title)
1236 Questions : The Mozilla Project
1237
1238@@ -43,6 +43,6 @@
1239 Person
1240 ------
1241
1242- >>> anon_browser.open('http://answers.launchpad.dev/~name16')
1243+ >>> anon_browser.open('http://answers.launchpad.test/~name16')
1244 >>> print(anon_browser.title)
1245 Questions : Foo Bar
1246
1247=== modified file 'lib/lp/answers/stories/question-browse-and-search.txt'
1248--- lib/lp/answers/stories/question-browse-and-search.txt 2018-06-02 19:27:16 +0000
1249+++ lib/lp/answers/stories/question-browse-and-search.txt 2019-05-28 13:57:20 +0000
1250@@ -21,7 +21,7 @@
1251 >>> transaction.commit()
1252 >>> logout()
1253
1254- >>> browser.open('http://launchpad.dev/kubuntu')
1255+ >>> browser.open('http://launchpad.test/kubuntu')
1256 >>> browser.getLink('Answers').click()
1257
1258 He discovers that there are no questions on the Kubuntu Answers page:
1259@@ -34,7 +34,7 @@
1260
1261 For projects that don't have products, the Answers facet is disabled.
1262
1263- >>> browser.open('http://launchpad.dev/aaa')
1264+ >>> browser.open('http://launchpad.test/aaa')
1265 >>> browser.getLink('Answers')
1266 Traceback (most recent call last):
1267 ...
1268@@ -45,7 +45,7 @@
1269 He realises that support for Kubuntu is probably going on in the Ubuntu
1270 Answers page and goes there to check.
1271
1272- >>> browser.open('http://launchpad.dev/ubuntu/+questions')
1273+ >>> browser.open('http://launchpad.test/ubuntu/+questions')
1274 >>> print(browser.title)
1275 Questions : Ubuntu
1276
1277@@ -144,7 +144,7 @@
1278 Launchpad Answer Tracker. He visits the main page and enters '9'
1279 to jump to the question.
1280
1281- >>> browser.open('http://answers.launchpad.dev/')
1282+ >>> browser.open('http://answers.launchpad.test/')
1283 >>> browser.getControl(name='field.search_text').value = '9'
1284 >>> browser.getControl('Find Answers').click()
1285 >>> from lp.services.helpers import backslashreplace
1286@@ -157,7 +157,7 @@
1287 and pastes it into the main page of the Answer Tracker to read
1288 the answer.
1289
1290- >>> browser.open('http://answers.launchpad.dev/')
1291+ >>> browser.open('http://answers.launchpad.test/')
1292 >>> browser.getControl(name='field.search_text').value = ' #6 '
1293 >>> browser.getControl('Find Answers').click()
1294 >>> print(backslashreplace(browser.title))
1295@@ -168,7 +168,7 @@
1296 and pastes it into the text field on the Answer Tracker main page. He
1297 is shown search results instead of the question.
1298
1299- >>> browser.open('http://answers.launchpad.dev/')
1300+ >>> browser.open('http://answers.launchpad.test/')
1301 >>> browser.getControl(name='field.search_text').value = 'question 8'
1302 >>> browser.getControl('Find Answers').click()
1303 >>> print(browser.title)
1304@@ -189,7 +189,7 @@
1305 similar questions is easy: on the question listing page, he just
1306 enters his search key and hit the 'Search' button.
1307
1308- >>> browser.open('http://launchpad.dev/ubuntu/+questions')
1309+ >>> browser.open('http://launchpad.test/ubuntu/+questions')
1310 >>> browser.getControl(name='field.search_text').value = 'firefox is slow'
1311 >>> browser.getControl('Search', index=0).click()
1312
1313@@ -232,7 +232,7 @@
1314 The user must choose at least one status when searching questions. An
1315 error is displayed when the user forgets to select a status.
1316
1317- >>> browser.open('http://launchpad.dev/ubuntu/+questions')
1318+ >>> browser.open('http://launchpad.test/ubuntu/+questions')
1319 >>> browser.getControl(name='field.status').displayValue = []
1320 >>> browser.getControl('Search', index=0).click()
1321 >>> messages = find_tags_by_class(browser.contents, 'message')
1322@@ -251,7 +251,7 @@
1323 # We should use goBack() here but can't because of bug #98372:
1324 # zope.testbrowser truncates document content after goBack().
1325 #>>> browser.goBack()
1326- >>> browser.open('http://launchpad.dev/ubuntu/+questions')
1327+ >>> browser.open('http://launchpad.test/ubuntu/+questions')
1328 >>> browser.getLink('mozilla-firefox').click()
1329 >>> browser.title
1330 'Questions : mozilla-firefox package : Ubuntu'
1331@@ -289,7 +289,7 @@
1332 Nice Guy likes helping others. He uses the 'Open' link to view the most
1333 recent questions on Mozilla Firefox.
1334
1335- >>> browser.open('http://launchpad.dev/firefox/+questions')
1336+ >>> browser.open('http://launchpad.test/firefox/+questions')
1337 >>> browser.getLink('Open').click()
1338 >>> print(browser.title)
1339 Questions : Mozilla Firefox
1340@@ -326,7 +326,7 @@
1341 similar problems. (This listing includes both 'Answered' and 'Solved'
1342 questions.)
1343
1344- >>> browser.open('http://launchpad.dev/ubuntu/+questions')
1345+ >>> browser.open('http://launchpad.test/ubuntu/+questions')
1346 >>> browser.getLink('Answered').click()
1347 >>> print(browser.title)
1348 Questions : Ubuntu
1349@@ -362,7 +362,7 @@
1350 They need to login to access that page:
1351
1352 >>> anon_browser.open(
1353- ... 'http://launchpad.dev/ubuntu/+source/mozilla-firefox/'
1354+ ... 'http://launchpad.test/ubuntu/+source/mozilla-firefox/'
1355 ... '+questions')
1356 >>> anon_browser.getLink('My questions').click()
1357 Traceback (most recent call last):
1358@@ -372,7 +372,7 @@
1359 >>> sample_person_browser = setupBrowser(
1360 ... auth='Basic test@canonical.com:test')
1361 >>> sample_person_browser.open(
1362- ... 'http://launchpad.dev/ubuntu/+source/mozilla-firefox/'
1363+ ... 'http://launchpad.test/ubuntu/+source/mozilla-firefox/'
1364 ... '+questions')
1365 >>> sample_person_browser.getLink('My questions').click()
1366 >>> print(repr(sample_person_browser.title))
1367@@ -417,7 +417,7 @@
1368 >>> logout()
1369
1370 >>> sample_person_browser.open(
1371- ... 'http://launchpad.dev/gnomebaker/+questions')
1372+ ... 'http://launchpad.test/gnomebaker/+questions')
1373 >>> sample_person_browser.getLink('My questions').click()
1374 >>> print(find_main_content(
1375 ... sample_person_browser.contents).find('p').renderContents())
1376@@ -434,14 +434,14 @@
1377
1378 They need to login to access that page:
1379
1380- >>> anon_browser.open('http://launchpad.dev/distros/ubuntu/+questions')
1381+ >>> anon_browser.open('http://launchpad.test/distros/ubuntu/+questions')
1382 >>> anon_browser.getLink('Need attention').click()
1383 Traceback (most recent call last):
1384 ...
1385 Unauthorized...
1386
1387 >>> sample_person_browser.open(
1388- ... 'http://launchpad.dev/distros/ubuntu/+questions')
1389+ ... 'http://launchpad.test/distros/ubuntu/+questions')
1390 >>> sample_person_browser.getLink('Need attention').click()
1391 >>> print(sample_person_browser.title)
1392 Questions needing your attention for Ubuntu : Questions : Ubuntu
1393@@ -469,7 +469,7 @@
1394 informing them of this fact is displayed.
1395
1396 >>> sample_person_browser.open(
1397- ... 'http://launchpad.dev/products/gnomebaker/+questions')
1398+ ... 'http://launchpad.test/products/gnomebaker/+questions')
1399 >>> sample_person_browser.getLink('Need attention').click()
1400 >>> print(find_main_content(
1401 ... sample_person_browser.contents).find('p').renderContents())
1402@@ -486,7 +486,7 @@
1403 the person asked, answered, is assigned to, is subscribed to, or
1404 commented on.
1405
1406- >>> browser.open('http://launchpad.dev/~name16')
1407+ >>> browser.open('http://launchpad.test/~name16')
1408 >>> browser.getLink('Answers').click()
1409 >>> print(browser.title)
1410 Questions : Foo Bar
1411@@ -526,7 +526,7 @@
1412 questions to a particular status:
1413
1414 # goBack() doesn't work.
1415- >>> browser.open('http://launchpad.dev/~name16/+questions')
1416+ >>> browser.open('http://launchpad.test/~name16/+questions')
1417 >>> browser.getControl(name='field.search_text').value = 'Firefox'
1418 >>> browser.getControl(name='field.status').displayValue = [
1419 ... b'Solved', b'Invalid']
1420@@ -634,7 +634,7 @@
1421 When going to the Answers facet of a project, a listing of all the
1422 questions filed against any of the project's products is displayed.
1423
1424- >>> browser.open('http://launchpad.dev/mozilla')
1425+ >>> browser.open('http://launchpad.test/mozilla')
1426 >>> browser.getLink('Answers').click()
1427 >>> print(browser.title)
1428 Questions : The Mozilla Project
1429@@ -677,7 +677,7 @@
1430 Questions : The Mozilla Project
1431
1432 # The next two reports are only available to a logged-in user.
1433- >>> user_browser.open('http://launchpad.dev/mozilla/+questions')
1434+ >>> user_browser.open('http://launchpad.test/mozilla/+questions')
1435 >>> user_browser.getLink('My questions').click()
1436 >>> print(user_browser.title)
1437 Questions you asked about The Mozilla Project : Questions : The Mozilla Project
1438@@ -692,7 +692,7 @@
1439 It is possible from the Answer Tracker front page to search among all
1440 questions ever filed on Launchpad.
1441
1442- >>> browser.open('http://answers.launchpad.dev/')
1443+ >>> browser.open('http://answers.launchpad.test/')
1444 >>> browser.getControl(name='field.search_text').value = 'firefox'
1445 >>> browser.getControl('Find Answers').click()
1446
1447@@ -700,7 +700,7 @@
1448 Questions matching "firefox"
1449
1450 >>> print(browser.url)
1451- http://answers.launchpad.dev/questions/+questions?...
1452+ http://answers.launchpad.test/questions/+questions?...
1453
1454 The results are displayed in a format similar to the Person reports:
1455 there is an 'In' column displaying where the questions were filed.
1456@@ -750,7 +750,7 @@
1457
1458 They must enter the project's name in the text field:
1459
1460- >>> anon_browser.open('http://answers.launchpad.dev')
1461+ >>> anon_browser.open('http://answers.launchpad.test')
1462 >>> anon_browser.getControl('One project').selected = True
1463 >>> anon_browser.getControl('Find Answers').click()
1464
1465@@ -773,12 +773,12 @@
1466
1467 >>> find_link = anon_browser.getLink('Find')
1468 >>> print(find_link.url)
1469- http://answers.launchpad.dev/questions...
1470+ http://answers.launchpad.test/questions...
1471
1472
1473 The form field can be filled manually without using the ajax widget.
1474
1475- >>> anon_browser.open('http://answers.launchpad.dev')
1476+ >>> anon_browser.open('http://answers.launchpad.test')
1477 >>> anon_browser.getControl(name='field.search_text').value = 'plugins'
1478 >>> anon_browser.getControl('One project').selected = True
1479 >>> anon_browser.getControl(name='field.scope.target').value = 'mozilla'
1480@@ -788,7 +788,7 @@
1481
1482 This works also with distributions:
1483
1484- >>> anon_browser.open('http://answers.launchpad.dev')
1485+ >>> anon_browser.open('http://answers.launchpad.test')
1486 >>> anon_browser.getControl(name='field.search_text').value = 'firefox'
1487 >>> anon_browser.getControl('One project').selected = True
1488 >>> anon_browser.getControl(name='field.scope.target').value = 'ubuntu'
1489@@ -798,7 +798,7 @@
1490
1491 And also with products:
1492
1493- >>> anon_browser.open('http://answers.launchpad.dev')
1494+ >>> anon_browser.open('http://answers.launchpad.test')
1495 >>> anon_browser.getControl(name='field.search_text').value = 'plugins'
1496 >>> anon_browser.getControl('One project').selected = True
1497 >>> anon_browser.getControl(name='field.scope.target').value = 'firefox'
1498
1499=== modified file 'lib/lp/answers/stories/question-compatibility-urls.txt'
1500--- lib/lp/answers/stories/question-compatibility-urls.txt 2018-06-02 19:27:16 +0000
1501+++ lib/lp/answers/stories/question-compatibility-urls.txt 2019-05-28 13:57:20 +0000
1502@@ -6,67 +6,67 @@
1503
1504 == Answer Contact Page ==
1505
1506- >>> user_browser.open('http://launchpad.dev/firefox/+support-contact')
1507+ >>> user_browser.open('http://launchpad.test/firefox/+support-contact')
1508 >>> print(user_browser.url)
1509- http://answers.launchpad.dev/firefox/+answer-contact
1510+ http://answers.launchpad.test/firefox/+answer-contact
1511
1512 == Add Question Page ==
1513
1514- >>> user_browser.open('http://launchpad.dev/firefox/+addticket')
1515+ >>> user_browser.open('http://launchpad.test/firefox/+addticket')
1516 >>> print(user_browser.url)
1517- http://answers.launchpad.dev/firefox/+addquestion
1518+ http://answers.launchpad.test/firefox/+addquestion
1519
1520- >>> user_browser.open('http://launchpad.dev/mozilla/+addticket')
1521+ >>> user_browser.open('http://launchpad.test/mozilla/+addticket')
1522 >>> print(user_browser.url)
1523- http://answers.launchpad.dev/mozilla/+addquestion
1524+ http://answers.launchpad.test/mozilla/+addquestion
1525
1526 == My Questions Page ==
1527
1528- >>> user_browser.open('http://launchpad.dev/firefox/+mytickets')
1529+ >>> user_browser.open('http://launchpad.test/firefox/+mytickets')
1530 >>> print(user_browser.url)
1531- http://answers.launchpad.dev/firefox/+myquestions
1532+ http://answers.launchpad.test/firefox/+myquestions
1533
1534 == Questions Listing ==
1535
1536- >>> browser.open('http://launchpad.dev/firefox/+tickets')
1537+ >>> browser.open('http://launchpad.test/firefox/+tickets')
1538 >>> print(browser.url)
1539- http://answers.launchpad.dev/firefox/+questions
1540+ http://answers.launchpad.test/firefox/+questions
1541
1542 == Question Page ==
1543
1544- >>> browser.open('http://launchpad.dev/firefox/+ticket/1')
1545+ >>> browser.open('http://launchpad.test/firefox/+ticket/1')
1546 >>> print(browser.url)
1547- http://answers.launchpad.dev/firefox/+question/1
1548+ http://answers.launchpad.test/firefox/+question/1
1549
1550 == Person Questions Listing ==
1551
1552- >>> browser.open('http://launchpad.dev/~name12/+tickets')
1553- >>> print(browser.url)
1554- http://answers.launchpad.dev/~name12/+questions
1555-
1556- >>> browser.open('http://launchpad.dev/~name12/+answeredtickets')
1557- >>> print(browser.url)
1558- http://answers.launchpad.dev/~name12/+answeredquestions
1559-
1560- >>> browser.open('http://launchpad.dev/~name12/+assignedtickets')
1561- >>> print(browser.url)
1562- http://answers.launchpad.dev/~name12/+assignedquestions
1563-
1564- >>> browser.open('http://launchpad.dev/~name12/+commentedtickets')
1565- >>> print(browser.url)
1566- http://answers.launchpad.dev/~name12/+commentedquestions
1567-
1568- >>> browser.open('http://launchpad.dev/~name12/+createdtickets')
1569- >>> print(browser.url)
1570- http://answers.launchpad.dev/~name12/+createdquestions
1571-
1572- >>> browser.open('http://launchpad.dev/~name12/+needattentiontickets')
1573- >>> print(browser.url)
1574- http://answers.launchpad.dev/~name12/+needattentionquestions
1575-
1576- >>> browser.open('http://launchpad.dev/~name12/+subscribedtickets')
1577- >>> print(browser.url)
1578- http://answers.launchpad.dev/~name12/+subscribedquestions
1579+ >>> browser.open('http://launchpad.test/~name12/+tickets')
1580+ >>> print(browser.url)
1581+ http://answers.launchpad.test/~name12/+questions
1582+
1583+ >>> browser.open('http://launchpad.test/~name12/+answeredtickets')
1584+ >>> print(browser.url)
1585+ http://answers.launchpad.test/~name12/+answeredquestions
1586+
1587+ >>> browser.open('http://launchpad.test/~name12/+assignedtickets')
1588+ >>> print(browser.url)
1589+ http://answers.launchpad.test/~name12/+assignedquestions
1590+
1591+ >>> browser.open('http://launchpad.test/~name12/+commentedtickets')
1592+ >>> print(browser.url)
1593+ http://answers.launchpad.test/~name12/+commentedquestions
1594+
1595+ >>> browser.open('http://launchpad.test/~name12/+createdtickets')
1596+ >>> print(browser.url)
1597+ http://answers.launchpad.test/~name12/+createdquestions
1598+
1599+ >>> browser.open('http://launchpad.test/~name12/+needattentiontickets')
1600+ >>> print(browser.url)
1601+ http://answers.launchpad.test/~name12/+needattentionquestions
1602+
1603+ >>> browser.open('http://launchpad.test/~name12/+subscribedtickets')
1604+ >>> print(browser.url)
1605+ http://answers.launchpad.test/~name12/+subscribedquestions
1606
1607
1608 == Unsupported questions ==
1609@@ -74,9 +74,9 @@
1610 The Unsupported View is irrelevant. The question search page provides
1611 links to the +by-language pages that have unsolved questions.
1612
1613- >>> browser.open('http://launchpad.dev/ubuntu/+unsupported')
1614+ >>> browser.open('http://launchpad.test/ubuntu/+unsupported')
1615 >>> print(browser.url)
1616- http://answers.launchpad.dev/ubuntu/+questions
1617+ http://answers.launchpad.test/ubuntu/+questions
1618
1619
1620 == Enumeration changes in search URLs ==
1621@@ -90,7 +90,7 @@
1622
1623 >>> old_sort = 'by+status'
1624 >>> old_status = 'Needs+information'
1625- >>> url = ('http://answers.launchpad.dev/ubuntu/+questions'
1626+ >>> url = ('http://answers.launchpad.test/ubuntu/+questions'
1627 ... '?field.sort=%s&field.sort-empty-marker=1'
1628 ... '&field.language=en&field.language-empty-marker=1'
1629 ... '&field.search_text=&field.actions.search=Search'
1630
1631=== modified file 'lib/lp/answers/stories/question-edit.txt'
1632--- lib/lp/answers/stories/question-edit.txt 2018-06-02 19:27:16 +0000
1633+++ lib/lp/answers/stories/question-edit.txt 2019-05-28 13:57:20 +0000
1634@@ -5,22 +5,22 @@
1635 only the question creator or an owner of the question target can change the
1636 title and description.
1637
1638- >>> anon_browser.open('http://launchpad.dev/firefox/+question/2')
1639+ >>> anon_browser.open('http://launchpad.test/firefox/+question/2')
1640 >>> anon_browser.getLink('Edit question').click()
1641 Traceback (most recent call last):
1642 ...
1643 Unauthorized...
1644
1645 >>> test_browser = setupBrowser(auth='Basic test@canonical.com:test')
1646- >>> test_browser.open('http://launchpad.dev/firefox/+question/2')
1647+ >>> test_browser.open('http://launchpad.test/firefox/+question/2')
1648 >>> test_browser.getLink('Edit question').click()
1649 >>> print(test_browser.url)
1650- http://answers.launchpad.dev/firefox/+question/2/+edit
1651+ http://answers.launchpad.test/firefox/+question/2/+edit
1652
1653 There is a cancel link should the user decide otherwise:
1654
1655 >>> print(test_browser.getLink('Cancel').url)
1656- http://answers.launchpad.dev/firefox/+question/2
1657+ http://answers.launchpad.test/firefox/+question/2
1658
1659 When we post the form, we should be redirected back to the question page.
1660
1661@@ -33,7 +33,7 @@
1662 >>> test_browser.getControl('Save Changes').click()
1663
1664 >>> print(test_browser.url)
1665- http://answers.launchpad.dev/firefox/+question/2
1666+ http://answers.launchpad.test/firefox/+question/2
1667
1668 And viewing that page should show the updated information.
1669
1670@@ -52,7 +52,7 @@
1671 ... print(extract_text(
1672 ... find_tag_by_id(browser.contents, 'question-status')))
1673
1674- >>> test_browser.open('http://launchpad.dev/ubuntu/+question/3')
1675+ >>> test_browser.open('http://launchpad.test/ubuntu/+question/3')
1676 >>> print_question_status(test_browser)
1677 Status: Invalid
1678
1679@@ -66,7 +66,7 @@
1680 Any logged in user can change the question source package on the
1681 'Edit Question' page.
1682
1683- >>> user_browser.open('http://launchpad.dev/ubuntu/+question/5')
1684+ >>> user_browser.open('http://launchpad.test/ubuntu/+question/5')
1685 >>> user_browser.getLink('Edit question').click()
1686 >>> user_browser.getControl(
1687 ... name='field.target.package').value = 'linux-source-2.6.15'
1688@@ -74,7 +74,7 @@
1689
1690 Product questions ignore sourcepackage information if it is submitted:
1691
1692- >>> user_browser.open('http://launchpad.dev/firefox/+question/2')
1693+ >>> user_browser.open('http://launchpad.test/firefox/+question/2')
1694 >>> user_browser.getLink('Edit question').click()
1695 >>> user_browser.getControl(
1696 ... name='field.target.package').value = 'linux-source-2.6.15'
1697
1698=== modified file 'lib/lp/answers/stories/question-message.txt'
1699--- lib/lp/answers/stories/question-message.txt 2018-06-02 19:27:16 +0000
1700+++ lib/lp/answers/stories/question-message.txt 2019-05-28 13:57:20 +0000
1701@@ -10,7 +10,7 @@
1702 an email post to examine the markup rules. This message contains a
1703 quoted passage, and a signature with an email address in it.
1704
1705- >>> user_browser.open('http://answers.launchpad.dev/ubuntu/+question/11')
1706+ >>> user_browser.open('http://answers.launchpad.test/ubuntu/+question/11')
1707 >>> print(user_browser.title.decode('utf-8'))
1708 Question #11 : ...
1709
1710@@ -50,7 +50,7 @@
1711 of 'person@domain.dom'. The anonymous user is unauthenticated, so they will
1712 see the obfuscated email address (<email address hidden>).
1713
1714- >>> anon_browser.open('http://answers.launchpad.dev/ubuntu/+question/11')
1715+ >>> anon_browser.open('http://answers.launchpad.test/ubuntu/+question/11')
1716 >>> print(anon_browser.title)
1717 Question #11 : ...
1718
1719
1720=== modified file 'lib/lp/answers/stories/question-obfuscation.txt'
1721--- lib/lp/answers/stories/question-obfuscation.txt 2018-06-02 19:27:16 +0000
1722+++ lib/lp/answers/stories/question-obfuscation.txt 2019-05-28 13:57:20 +0000
1723@@ -12,7 +12,7 @@
1724 questions in the Latest questions solved portlet on the Answers
1725 front page.
1726
1727- >>> user_browser.open('http://answers.launchpad.dev/')
1728+ >>> user_browser.open('http://answers.launchpad.test/')
1729 >>> question_portlet = find_tag_by_id(
1730 ... user_browser.contents, 'latest-questions-solved')
1731 >>> for li in question_portlet.findAll('li'):
1732@@ -78,7 +78,7 @@
1733 >>> print(user_browser.title)
1734 Question #... : ...
1735
1736- >>> user_browser.open('http://answers.launchpad.dev/')
1737+ >>> user_browser.open('http://answers.launchpad.test/')
1738 >>> question_portlet = find_tag_by_id(
1739 ... user_browser.contents, 'latest-questions-asked')
1740 >>> for li in question_portlet.findAll('li'):
1741@@ -92,7 +92,7 @@
1742 Anonymous cannot see the email address anywhere on the Answers front
1743 page.
1744
1745- >>> anon_browser.open('http://answers.launchpad.dev/')
1746+ >>> anon_browser.open('http://answers.launchpad.test/')
1747 >>> b'user@domain.com' in anon_browser.contents
1748 False
1749
1750
1751=== modified file 'lib/lp/answers/stories/question-overview.txt'
1752--- lib/lp/answers/stories/question-overview.txt 2018-06-02 19:27:16 +0000
1753+++ lib/lp/answers/stories/question-overview.txt 2019-05-28 13:57:20 +0000
1754@@ -12,7 +12,7 @@
1755 Creating a new question is possible directly from the main page of a
1756 product. Users simply click the 'Ask a question' buttion.
1757
1758- >>> user_browser.open('http://launchpad.dev/firefox')
1759+ >>> user_browser.open('http://launchpad.test/firefox')
1760 >>> user_browser.getLink('Ask a question').click()
1761 >>> print(user_browser.title)
1762 Ask a question about...
1763@@ -20,7 +20,7 @@
1764 There is also an 'Ask a question' link on the Bugs home page of the
1765 product:
1766
1767- >>> user_browser.open('http://bugs.launchpad.dev/firefox')
1768+ >>> user_browser.open('http://bugs.launchpad.test/firefox')
1769 >>> user_browser.getLink('Ask a question').click()
1770 >>> print(user_browser.title)
1771 Ask a question about...
1772@@ -28,7 +28,7 @@
1773 The list of all the currently active questions for the product is
1774 available from the 'Answers' facet.
1775
1776- >>> browser.open('http://launchpad.dev/firefox')
1777+ >>> browser.open('http://launchpad.test/firefox')
1778 >>> browser.getLink('Answers').click()
1779
1780 >>> soup = find_main_content(browser.contents)
1781@@ -41,7 +41,7 @@
1782 There is also an 'Ask a question' link to ask a new question.
1783
1784 >>> browser.getLink('Ask a question').url
1785- 'http://answers.launchpad.dev/firefox/+addquestion'
1786+ 'http://answers.launchpad.test/firefox/+addquestion'
1787
1788 There are links to some common listing of questions:
1789
1790@@ -70,23 +70,23 @@
1791
1792 Distributions have an 'Ask a question' link on the front page:
1793
1794- >>> user_browser.open('http://launchpad.dev/ubuntu')
1795+ >>> user_browser.open('http://launchpad.test/ubuntu')
1796 >>> user_browser.getLink('Ask a question').click()
1797 >>> print(user_browser.title)
1798 Ask a question about...
1799
1800 As well as on the Bugs facet home page:
1801
1802- >>> user_browser.open('http://bugs.launchpad.dev/ubuntu')
1803+ >>> user_browser.open('http://bugs.launchpad.test/ubuntu')
1804 >>> user_browser.getLink('Ask a question').click()
1805 >>> print(user_browser.title)
1806 Ask a question about...
1807
1808 The distribution home page also has a link to the 'Answers' facet:
1809
1810- >>> browser.open('http://launchpad.dev/ubuntu')
1811+ >>> browser.open('http://launchpad.test/ubuntu')
1812 >>> browser.getLink('Answers').url
1813- 'http://answers.launchpad.dev/ubuntu'
1814+ 'http://answers.launchpad.test/ubuntu'
1815
1816 >>> browser.getLink('Answers').click()
1817 >>> print(browser.title)
1818@@ -113,9 +113,9 @@
1819 On a source package, the 'Ask a question' link is accessible through the
1820 Answers facet.
1821
1822- >>> browser.open('http://launchpad.dev/ubuntu/+source/evolution')
1823+ >>> browser.open('http://launchpad.test/ubuntu/+source/evolution')
1824 >>> browser.getLink('Answers').url
1825- 'http://answers.launchpad.dev/ubuntu/+source/evolution'
1826+ 'http://answers.launchpad.test/ubuntu/+source/evolution'
1827
1828 >>> browser.getLink('Answers').click()
1829 >>> print(browser.title)
1830@@ -138,9 +138,9 @@
1831 The 'Answers' facet is also available on the distribution source package
1832 page:
1833
1834- >>> browser.open('http://launchpad.dev/ubuntu/+source/mozilla-firefox')
1835+ >>> browser.open('http://launchpad.test/ubuntu/+source/mozilla-firefox')
1836 >>> browser.getLink('Answers').url
1837- 'http://answers.launchpad.dev/ubuntu/+source/mozilla-firefox'
1838+ 'http://answers.launchpad.test/ubuntu/+source/mozilla-firefox'
1839
1840 >>> browser.getLink('Answers').click()
1841 >>> browser.title
1842@@ -165,7 +165,7 @@
1843 ProjectGroups also have the 'Latest questions' portlet and the 'Ask a
1844 question' button on their overview page.
1845
1846- >>> user_browser.open('http://launchpad.dev/mozilla')
1847+ >>> user_browser.open('http://launchpad.test/mozilla')
1848
1849 >>> questions = find_tag_by_id(
1850 ... user_browser.contents, 'portlet-latest-questions')
1851@@ -189,9 +189,9 @@
1852 The 'Answers' facet link will display a page listing all the questions
1853 involving a person.
1854
1855- >>> browser.open('http://launchpad.dev/~name16')
1856+ >>> browser.open('http://launchpad.test/~name16')
1857 >>> browser.getLink('Answers').url
1858- 'http://answers.launchpad.dev/~name16'
1859+ 'http://answers.launchpad.test/~name16'
1860
1861 >>> browser.getLink('Answers').click()
1862 >>> print(browser.title)
1863@@ -215,12 +215,12 @@
1864 -----------------------------
1865
1866 You can access any question by its ID using the URL
1867-http://answers.launchpad.dev/questions/<id>. This URL will redirect to
1868+http://answers.launchpad.test/questions/<id>. This URL will redirect to
1869 the proper context where the question can be found:
1870
1871- >>> browser.open('http://answers.launchpad.dev/questions/1')
1872+ >>> browser.open('http://answers.launchpad.test/questions/1')
1873 >>> print(browser.url)
1874- http://answers.launchpad.dev/firefox/+question/1
1875+ http://answers.launchpad.test/firefox/+question/1
1876
1877 >>> print(find_main_content(browser.contents).find('h1').renderContents())
1878 Firefox cannot render Bank Site
1879@@ -228,12 +228,12 @@
1880 Asking for a non-existent question or an invalid ID will still raise a
1881 404 though:
1882
1883- >>> browser.open('http://answers.launchpad.dev/questions/255')
1884+ >>> browser.open('http://answers.launchpad.test/questions/255')
1885 Traceback (most recent call last):
1886 ...
1887 NotFound: ...
1888
1889- >>> browser.open('http://answers.launchpad.dev/questions/bad_id')
1890+ >>> browser.open('http://answers.launchpad.test/questions/bad_id')
1891 Traceback (most recent call last):
1892 ...
1893 NotFound: ...
1894@@ -242,26 +242,26 @@
1895 redirected to the question in the proper context. (For example, this is
1896 useful after a question was retargeted.)
1897
1898- >>> browser.open('http://answers.launchpad.dev/ubuntu/+question/1')
1899+ >>> browser.open('http://answers.launchpad.test/ubuntu/+question/1')
1900 >>> print(browser.url)
1901- http://answers.launchpad.dev/firefox/+question/1
1902+ http://answers.launchpad.test/firefox/+question/1
1903
1904 It also works with pages below that URL:
1905
1906 >>> browser.open(
1907- ... 'http://answers.launchpad.dev/ubuntu/+question/1/+history')
1908+ ... 'http://answers.launchpad.test/ubuntu/+question/1/+history')
1909 >>> print(browser.url)
1910- http://answers.launchpad.dev/firefox/+question/1/+history
1911+ http://answers.launchpad.test/firefox/+question/1/+history
1912
1913 But again, an invalid ID still raises a 404:
1914
1915- >>> browser.open('http://answers.launchpad.dev/ubuntu/+question/255')
1916+ >>> browser.open('http://answers.launchpad.test/ubuntu/+question/255')
1917 Traceback (most recent call last):
1918 ...
1919 NotFound: ...
1920
1921 >>> browser.open(
1922- ... 'http://answers.launchpad.dev/ubuntu/+question/bad_id')
1923+ ... 'http://answers.launchpad.test/ubuntu/+question/bad_id')
1924 Traceback (most recent call last):
1925 ...
1926 NotFound: ...
1927
1928=== modified file 'lib/lp/answers/stories/question-reject-and-change-status.txt'
1929--- lib/lp/answers/stories/question-reject-and-change-status.txt 2018-06-02 19:27:16 +0000
1930+++ lib/lp/answers/stories/question-reject-and-change-status.txt 2019-05-28 13:57:20 +0000
1931@@ -7,7 +7,7 @@
1932 No Privileges Person isn't an answer contact or administrator, so they
1933 don't have access to that feature.
1934
1935- >>> user_browser.open('http://launchpad.dev/firefox/+question/2')
1936+ >>> user_browser.open('http://launchpad.test/firefox/+question/2')
1937 >>> user_browser.getLink('Reject question')
1938 Traceback (most recent call last):
1939 ...
1940@@ -17,14 +17,14 @@
1941 error.
1942
1943 >>> user_browser.open(
1944- ... 'http://launchpad.dev/firefox/+question/2/+reject')
1945+ ... 'http://launchpad.test/firefox/+question/2/+reject')
1946 Traceback (most recent call last):
1947 ...
1948 Unauthorized: ...
1949
1950 To reject the question, the user clicks on the 'Reject Question' link.
1951
1952- >>> admin_browser.open('http://answers.launchpad.dev/firefox/+question/2')
1953+ >>> admin_browser.open('http://answers.launchpad.test/firefox/+question/2')
1954 >>> admin_browser.getLink('Reject question').click()
1955 >>> admin_browser.getControl('Reject').click()
1956
1957@@ -39,7 +39,7 @@
1958 cancel link to take them back to the question:
1959
1960 >>> print(admin_browser.getLink('Cancel').url)
1961- http://answers.launchpad.dev/firefox/+question/2
1962+ http://answers.launchpad.test/firefox/+question/2
1963
1964 Entering an explanation message and clicking the 'Reject' button,
1965 will reject the question.
1966@@ -79,7 +79,7 @@
1967
1968 >>> admin_browser.getLink('Reject question').click()
1969 >>> print(admin_browser.url)
1970- http://answers.launchpad.dev/firefox/+question/2
1971+ http://answers.launchpad.test/firefox/+question/2
1972 >>> for message in find_tags_by_class(admin_browser.contents, 'message'):
1973 ... print(message.renderContents())
1974 The question is already rejected.
1975@@ -97,7 +97,7 @@
1976
1977 That action isn't available to a non-privileged user:
1978
1979- >>> browser.open('http://launchpad.dev/firefox/+question/2')
1980+ >>> browser.open('http://launchpad.test/firefox/+question/2')
1981 >>> browser.getLink('Change status')
1982 Traceback (most recent call last):
1983 ...
1984@@ -106,7 +106,7 @@
1985 The change status form is available to an administrator through the
1986 'Change status' link.
1987
1988- >>> admin_browser.open('http://launchpad.dev/firefox/+question/2')
1989+ >>> admin_browser.open('http://launchpad.test/firefox/+question/2')
1990 >>> admin_browser.getLink('Change status').click()
1991
1992 The form has a select widget displaying the current status.
1993@@ -117,7 +117,7 @@
1994 There is also a cancel link should the user decide otherwise:
1995
1996 >>> print(admin_browser.getLink('Cancel').url)
1997- http://answers.launchpad.dev/firefox/+question/2
1998+ http://answers.launchpad.test/firefox/+question/2
1999
2000 The user needs to select a status and enter a message explaining the
2001 status change:
2002
2003=== modified file 'lib/lp/answers/stories/question-search-multiple-languages.txt'
2004--- lib/lp/answers/stories/question-search-multiple-languages.txt 2018-06-02 19:27:16 +0000
2005+++ lib/lp/answers/stories/question-search-multiple-languages.txt 2019-05-28 13:57:20 +0000
2006@@ -12,7 +12,7 @@
2007 questions will be shown when the user has not provided language
2008 information.
2009
2010- >>> anon_browser.open('http://launchpad.dev/distros/ubuntu/+questions')
2011+ >>> anon_browser.open('http://launchpad.test/distros/ubuntu/+questions')
2012 >>> soup = find_main_content(anon_browser.contents)
2013 >>> for question in soup.findAll('td', 'questionTITLE'):
2014 ... print(question.find('a').renderContents())
2015@@ -97,7 +97,7 @@
2016 >>> transaction.commit()
2017 >>> logout()
2018
2019- >>> anon_browser.open('http://launchpad.dev/kubuntu/+questions')
2020+ >>> anon_browser.open('http://launchpad.test/kubuntu/+questions')
2021 >>> anon_browser.getControl(name='field.language')
2022 Traceback (most recent call last):
2023 ...
2024@@ -115,7 +115,7 @@
2025
2026 >>> anon_browser.addHeader('X_FORWARDED_FOR', '172.16.1.1')
2027 >>> anon_browser.open(
2028- ... 'http://launchpad.dev/ubuntu/+source/mozilla-firefox/+questions')
2029+ ... 'http://launchpad.test/ubuntu/+source/mozilla-firefox/+questions')
2030 >>> anon_browser.getControl(name='field.language')
2031 Traceback (most recent call last):
2032 ...
2033@@ -125,7 +125,7 @@
2034 then questions with those language will be displayed:
2035
2036 >>> anon_browser.addHeader('Accept-Language', 'es, en')
2037- >>> anon_browser.open('http://launchpad.dev/distros/ubuntu/+questions')
2038+ >>> anon_browser.open('http://launchpad.test/distros/ubuntu/+questions')
2039 >>> anon_browser.getControl('English (en)').selected
2040 True
2041 >>> anon_browser.getControl('Spanish (es)').selected
2042@@ -159,7 +159,7 @@
2043 rules. As with the anonymous user, the intersection of the GeoIP
2044 languages and the target's question languages is 'en'.
2045
2046- >>> user_browser.open('http://launchpad.dev/distros/ubuntu/+questions')
2047+ >>> user_browser.open('http://launchpad.test/distros/ubuntu/+questions')
2048 >>> sorted(user_browser.getControl(name='field.language').options)
2049 ['en']
2050
2051@@ -168,7 +168,7 @@
2052
2053 >>> user_browser.addHeader('X_FORWARDED_FOR', '172.16.1.1')
2054 >>> user_browser.open(
2055- ... 'http://launchpad.dev/ubuntu/+source/mozilla-firefox/+questions')
2056+ ... 'http://launchpad.test/ubuntu/+source/mozilla-firefox/+questions')
2057 >>> user_browser.getControl(name='field.language')
2058 Traceback (most recent call last):
2059 ...
2060@@ -178,7 +178,7 @@
2061 are added to the language controls.
2062
2063 >>> user_browser.addHeader('Accept-Language', 'es, en')
2064- >>> user_browser.open('http://launchpad.dev/distros/ubuntu/+questions')
2065+ >>> user_browser.open('http://launchpad.test/distros/ubuntu/+questions')
2066 >>> sorted(user_browser.getControl(name='field.language').options)
2067 ['en', 'es']
2068
2069@@ -192,7 +192,7 @@
2070 >>> from lp.testing.pages import strip_label
2071
2072 >>> browser.addHeader('Authorization', 'Basic carlos@canonical.com:test')
2073- >>> browser.open('http://launchpad.dev/distros/ubuntu/+questions')
2074+ >>> browser.open('http://launchpad.test/distros/ubuntu/+questions')
2075 >>> language_control = browser.getControl(name='field.language')
2076 >>> for label in sorted(language_control.displayOptions):
2077 ... strip_label(label)
2078@@ -220,7 +220,7 @@
2079 searching Ubuntu.
2080
2081 >>> daf_browser = setupBrowser(auth='Basic daf@canonical.com:test')
2082- >>> daf_browser.open('http://launchpad.dev/~daf/+editlanguages')
2083+ >>> daf_browser.open('http://launchpad.test/~daf/+editlanguages')
2084 >>> daf_browser.getControl('English (United Kingdom)').selected
2085 True
2086 >>> daf_browser.getControl('Japanese').selected
2087@@ -235,7 +235,7 @@
2088 their languages. Daf, in this example, can see a language filter for
2089 English, and can use it to locate English questions.
2090
2091- >>> daf_browser.open('http://launchpad.dev/distros/ubuntu/+questions')
2092+ >>> daf_browser.open('http://launchpad.test/distros/ubuntu/+questions')
2093 >>> language_control = daf_browser.getControl(name='field.language')
2094 >>> for label in language_control.displayOptions:
2095 ... strip_label(label)
2096@@ -266,12 +266,12 @@
2097 but when they visit Mozilla Firefox, they are informed that there are
2098 questions going unanswered.
2099
2100- >>> user_browser.open('http://answers.launchpad.dev/kubuntu')
2101+ >>> user_browser.open('http://answers.launchpad.test/kubuntu')
2102 >>> paragraph = find_main_content(user_browser.contents).find('p')
2103 >>> print(extract_text(paragraph))
2104 There are no questions for Kubuntu with the requested statuses.
2105
2106- >>> user_browser.open('http://answers.launchpad.dev/firefox')
2107+ >>> user_browser.open('http://answers.launchpad.test/firefox')
2108 >>> paragraph = find_main_content(user_browser.contents).find('p')
2109 >>> print(extract_text(paragraph))
2110 Mozilla Firefox has unanswered questions in the following languages:
2111@@ -312,7 +312,7 @@
2112
2113 >>> sample_person_browser = setupBrowser(
2114 ... auth='Basic test@canonical.com:test')
2115- >>> sample_person_browser.open('http://answers.launchpad.dev/ubuntu')
2116+ >>> sample_person_browser.open('http://answers.launchpad.test/ubuntu')
2117 >>> sample_person_browser.getLink('My questions').click()
2118 >>> sample_person_browser.getLink('Next').click()
2119 >>> print(sample_person_browser.title)
2120
2121=== modified file 'lib/lp/answers/stories/question-subscriptions.txt'
2122--- lib/lp/answers/stories/question-subscriptions.txt 2018-06-02 19:27:16 +0000
2123+++ lib/lp/answers/stories/question-subscriptions.txt 2019-05-28 13:57:20 +0000
2124@@ -11,13 +11,13 @@
2125 sees a link to their subscribed questions.
2126
2127 >>> user_browser.open(
2128- ... 'http://launchpad.dev/firefox/+question/2')
2129+ ... 'http://launchpad.test/firefox/+question/2')
2130 >>> user_browser.getLink('Subscribe').click()
2131 >>> print(user_browser.title)
2132 Subscription : Question #2 ...
2133
2134 >>> print(user_browser.getLink('your subscribed questions page'))
2135- <Link ...'http://answers.launchpad.dev/~no-priv/+subscribedquestions'>
2136+ <Link ...'http://answers.launchpad.test/~no-priv/+subscribedquestions'>
2137
2138 >>> user_browser.getControl('Subscribe').click()
2139
2140@@ -55,7 +55,7 @@
2141 on an existing question. The user can simply check the 'Email me future
2142 discussion about this question' checkbox:
2143
2144- >>> user_browser.open('http://launchpad.dev/firefox/+question/6')
2145+ >>> user_browser.open('http://launchpad.test/firefox/+question/6')
2146 >>> user_browser.getControl('Message').value = (
2147 ... "Try starting firefox from the command-line. Are there any "
2148 ... "messages appearing?")
2149
2150=== modified file 'lib/lp/answers/stories/question-workflow.txt'
2151--- lib/lp/answers/stories/question-workflow.txt 2018-06-02 19:27:16 +0000
2152+++ lib/lp/answers/stories/question-workflow.txt 2019-05-28 13:57:20 +0000
2153@@ -33,7 +33,7 @@
2154
2155 To participate in a question, the user must be logged in.
2156
2157- >>> anon_browser.open('http://launchpad.dev/firefox/+question/2')
2158+ >>> anon_browser.open('http://launchpad.test/firefox/+question/2')
2159 >>> print(anon_browser.contents)
2160 <!DOCTYPE...
2161 ...
2162@@ -55,7 +55,7 @@
2163 on the 'Add Information Request' button.
2164
2165 >>> support_browser.open(
2166- ... 'http://launchpad.dev/firefox/+question/2')
2167+ ... 'http://launchpad.test/firefox/+question/2')
2168 >>> content = find_tag_by_id(
2169 ... support_browser.contents, 'can-you-help-with-this-problem')
2170 >>> print(content.h2.renderContents())
2171@@ -122,7 +122,7 @@
2172 relevant to their tasks.
2173
2174 >>> owner_browser.open(
2175- ... 'http://launchpad.dev/firefox/+question/2')
2176+ ... 'http://launchpad.test/firefox/+question/2')
2177 >>> content = find_tag_by_id(
2178 ... owner_browser.contents, 'can-you-help-with-this-problem')
2179 >>> content is None
2180@@ -153,7 +153,7 @@
2181 clicking the 'Propose Answer' button.
2182
2183 >>> support_browser.open(
2184- ... 'http://launchpad.dev/firefox/+question/2')
2185+ ... 'http://launchpad.test/firefox/+question/2')
2186 >>> support_browser.getControl('Message').value = (
2187 ... "New version of the firefox package are available with SVG "
2188 ... "support enabled. You can use apt-get or adept to upgrade.")
2189@@ -177,7 +177,7 @@
2190 'This Solved My Problem' button near the answer.
2191
2192 >>> owner_browser.open(
2193- ... 'http://launchpad.dev/firefox/+question/2')
2194+ ... 'http://launchpad.test/firefox/+question/2')
2195 >>> soup = find_main_content(owner_browser.contents)
2196 >>> soup.findAll('div', 'boardComment')[-1].find('input', type='submit')
2197 <input type="submit" name="field.actions.confirm"
2198@@ -374,7 +374,7 @@
2199 The history of the question is available on the 'History' page.
2200
2201 >>> anon_browser.open(
2202- ... 'http://launchpad.dev/firefox/+question/2')
2203+ ... 'http://launchpad.test/firefox/+question/2')
2204 >>> anon_browser.getLink('History').click()
2205 >>> print(anon_browser.title)
2206 History of question #2...
2207@@ -420,7 +420,7 @@
2208 choosing an answer that helped him solve his problem.
2209
2210 >>> carlos_browser = setupBrowser(auth='Basic carlos@canonical.com:test')
2211- >>> carlos_browser.open('http://launchpad.dev/firefox/+question/12')
2212+ >>> carlos_browser.open('http://launchpad.test/firefox/+question/12')
2213 >>> print(find_request_status(carlos_browser.contents))
2214 Status: Open ...
2215
2216@@ -453,7 +453,7 @@
2217 Firefox question. The solution does not work, but they think they have a
2218 similar problem so they ask their own question.
2219
2220- >>> user_browser.open('http://launchpad.dev/firefox/+question/2')
2221+ >>> user_browser.open('http://launchpad.test/firefox/+question/2')
2222
2223 >>> content = find_main_content(user_browser.contents)
2224 >>> print(content.find(id='can-you-help-with-this-problem'))
2225
2226=== modified file 'lib/lp/answers/stories/questions-index.txt'
2227--- lib/lp/answers/stories/questions-index.txt 2018-06-02 19:27:16 +0000
2228+++ lib/lp/answers/stories/questions-index.txt 2019-05-28 13:57:20 +0000
2229@@ -16,7 +16,7 @@
2230 >>> logout()
2231 >>> transaction.commit()
2232
2233- >>> anon_browser.open('http://answers.launchpad.dev/')
2234+ >>> anon_browser.open('http://answers.launchpad.test/')
2235 >>> print(anon_browser.title)
2236 Launchpad Answers
2237
2238@@ -71,7 +71,7 @@
2239 ... ('firefox', 1)])
2240 >>> logout()
2241
2242- >>> anon_browser.open('http://answers.launchpad.dev/')
2243+ >>> anon_browser.open('http://answers.launchpad.test/')
2244 >>> print(extract_text(find_tag_by_id(
2245 ... anon_browser.contents, 'most-active-projects')))
2246 Most active projects
2247@@ -83,6 +83,6 @@
2248
2249 >>> anon_browser.getLink('Ubuntu').click()
2250 >>> print(anon_browser.url)
2251- http://answers.launchpad.dev/ubuntu
2252+ http://answers.launchpad.test/ubuntu
2253 >>> print(anon_browser.title)
2254 Questions : Ubuntu
2255
2256=== modified file 'lib/lp/answers/stories/this-is-a-faq.txt'
2257--- lib/lp/answers/stories/this-is-a-faq.txt 2018-06-02 19:27:16 +0000
2258+++ lib/lp/answers/stories/this-is-a-faq.txt 2019-05-28 13:57:20 +0000
2259@@ -35,7 +35,7 @@
2260 # We use backslashreplace because the page title includes smart quotes.
2261 >>> from lp.services.helpers import backslashreplace
2262 >>> user_browser.open(
2263- ... 'http://answers.launchpad.dev/firefox/+question/2')
2264+ ... 'http://answers.launchpad.test/firefox/+question/2')
2265 >>> print(backslashreplace(user_browser.title))
2266 Question #2 : ...
2267
2268@@ -70,7 +70,7 @@
2269 ( ) 9: How do I troubleshoot problems with extensions/themes?
2270
2271 >>> print(user_browser.getLink('How do I troubleshoot problems').url)
2272- http://answers.launchpad.dev/firefox/+faq/9
2273+ http://answers.launchpad.test/firefox/+faq/9
2274
2275 The query used to find these results is displayed in the search field
2276 under the radio widgets. That query defaults to the question's title.
2277@@ -113,7 +113,7 @@
2278
2279 >>> user_browser.getControl('Link to FAQ').click()
2280 >>> print(user_browser.url)
2281- http://answers.launchpad.dev/firefox/+question/2
2282+ http://answers.launchpad.test/firefox/+question/2
2283
2284 They see that the question's status was changed to 'Answered':
2285
2286@@ -130,7 +130,7 @@
2287 ... find_tag_by_id(user_browser.contents, 'related-faq')))
2288 Related FAQ: How do I install plugins (Shockwave, QuickTime, etc.)? ...
2289 >>> print(user_browser.getLink('How do I install plugins').url)
2290- http://answers.launchpad.dev/firefox/+faq/10
2291+ http://answers.launchpad.test/firefox/+faq/10
2292
2293 The answer message was added to the question's discussion:
2294
2295@@ -170,7 +170,7 @@
2296 with an error message.
2297
2298 >>> print(user_browser.url)
2299- http://answers.launchpad.dev/firefox/+question/2/+linkfaq
2300+ http://answers.launchpad.test/firefox/+question/2/+linkfaq
2301 >>> print_feedback_messages(user_browser.contents)
2302 There is 1 error.
2303 You didn&#x27;t modify the linked FAQ.
2304@@ -217,7 +217,7 @@
2305 LinkNotFoundError
2306
2307 >>> user_browser.open(
2308- ... 'http://answers.launchpad.dev/firefox/+question/2/+createfaq')
2309+ ... 'http://answers.launchpad.test/firefox/+question/2/+createfaq')
2310 Traceback (most recent call last):
2311 ...
2312 Unauthorized: ...
2313@@ -226,13 +226,13 @@
2314
2315 >>> owner_browser = setupBrowser(auth='Basic test@canonical.com:test')
2316 >>> owner_browser.open(
2317- ... 'http://answers.launchpad.dev/firefox/+question/2')
2318+ ... 'http://answers.launchpad.test/firefox/+question/2')
2319 >>> owner_browser.getLink('Create a new FAQ')
2320 <Link text='Create a new FAQ' url='http://.../firefox/+question/2/+createfaq'>
2321 >>> owner_browser.getLink('Link to a FAQ').click()
2322 >>> owner_browser.getLink('create a new FAQ').click()
2323 >>> print(owner_browser.url)
2324- http://answers.launchpad.dev/firefox/+question/2/+createfaq
2325+ http://answers.launchpad.test/firefox/+question/2/+createfaq
2326 >>> print(owner_browser.title)
2327 Create a FAQ for Mozilla...
2328
2329@@ -271,7 +271,7 @@
2330
2331 >>> owner_browser.getControl('Create and Link').click()
2332 >>> print(owner_browser.url)
2333- http://answers.launchpad.dev/firefox/+question/2
2334+ http://answers.launchpad.test/firefox/+question/2
2335
2336 The answer message was added to the question's discussion:
2337
2338@@ -296,7 +296,7 @@
2339
2340 >>> owner_browser.getLink('Displaying SVG in Firefox').click()
2341 >>> print(owner_browser.url)
2342- http://answers.launchpad.dev/firefox/+faq/...
2343+ http://answers.launchpad.test/firefox/+faq/...
2344 >>> print(backslashreplace(owner_browser.title))
2345 FAQ #... : Questions : Mozilla Firefox
2346
2347@@ -325,7 +325,7 @@
2348 #2 SVG extension
2349
2350 >>> print(owner_browser.getLink('SVG extension').url)
2351- http://answers.launchpad.dev/firefox/+question/2
2352+ http://answers.launchpad.test/firefox/+question/2
2353
2354
2355 == Distribution and Source Packages ==
2356@@ -334,7 +334,7 @@
2357 can also be linked to FAQs.
2358
2359 >>> user_browser.open(
2360- ... 'http://answers.launchpad.dev/ubuntu/+question/11')
2361+ ... 'http://answers.launchpad.test/ubuntu/+question/11')
2362 >>> print(user_browser.title)
2363 Question #11 : ...
2364 >>> user_browser.getLink('Link to a FAQ').click()
2365@@ -342,7 +342,7 @@
2366 Is question #11 a FAQ...
2367
2368 >>> user_browser.open(
2369- ... 'http://answers.launchpad.dev/ubuntu/+source/mozilla-firefox'
2370+ ... 'http://answers.launchpad.test/ubuntu/+source/mozilla-firefox'
2371 ... '/+question/8')
2372 >>> print(user_browser.title)
2373 Question #8 : ...
2374@@ -361,7 +361,7 @@
2375 information.
2376
2377 >>> user_browser.open(
2378- ... 'http://answers.launchpad.dev/ubuntu/+source/mozilla-firefox/'
2379+ ... 'http://answers.launchpad.test/ubuntu/+source/mozilla-firefox/'
2380 ... '+question/9')
2381 >>> details_portlet = find_portlet(
2382 ... user_browser.contents, 'mozilla-firefox in ubuntu question #9')
2383@@ -405,14 +405,14 @@
2384 item, as above:
2385
2386 >>> user_browser.getLink('FAQ #6').url
2387- 'http://answers.launchpad.dev/ubuntu/+faq/6'
2388+ 'http://answers.launchpad.test/ubuntu/+faq/6'
2389
2390 Or you can just refer to FAQs in comments:
2391
2392 >>> user_browser.getControl('Message').value = 'No, this is FAQ #2'
2393 >>> user_browser.getControl('Just Add a Comment').click()
2394 >>> user_browser.getLink("FAQ #2").url
2395- 'http://answers.launchpad.dev/ubuntu/+faq/2'
2396+ 'http://answers.launchpad.test/ubuntu/+faq/2'
2397
2398 The linkification also happens, incidentally, in bug comments and
2399 anywhere else the email-to-html formatter is used. See
2400
2401=== modified file 'lib/lp/answers/stories/webservice.txt'
2402--- lib/lp/answers/stories/webservice.txt 2018-06-02 19:27:16 +0000
2403+++ lib/lp/answers/stories/webservice.txt 2019-05-28 13:57:20 +0000
2404@@ -115,7 +115,7 @@
2405 ... contact['self_link'], 'getDirectAnswerQuestionTargets',
2406 ... api_version='devel').jsonBody()
2407 >>> print_self_link_of_entries(targets)
2408- http://api.launchpad.dev/devel/my-project
2409+ http://api.launchpad.test/devel/my-project
2410
2411 Anyone can retrieve the collection of `IQuestionTarget`s that a person's
2412 teams is an answer contact for using getTeamAnswerQuestionTargets.
2413@@ -124,7 +124,7 @@
2414 ... contact['self_link'], 'getTeamAnswerQuestionTargets',
2415 ... api_version='devel').jsonBody()
2416 >>> print_self_link_of_entries(targets)
2417- http://api.launchpad.dev/devel/team-project
2418+ http://api.launchpad.test/devel/team-project
2419
2420
2421 Question collections
2422@@ -208,16 +208,16 @@
2423 date_solved: None
2424 description: u'description...'
2425 id: ...
2426- language_link: u'http://api.launchpad.dev/devel/+languages/en'
2427+ language_link: u'http://api.launchpad.test/devel/+languages/en'
2428 messages_collection_link:
2429- u'http://api.launchpad.dev/devel/my-project/+question/.../messages'
2430- owner_link: u'http://api.launchpad.dev/devel/~asker'
2431- resource_type_link: u'http://api.launchpad.dev/devel/#question'
2432- self_link: u'http://api.launchpad.dev/devel/my-project/+question/...'
2433+ u'http://api.launchpad.test/devel/my-project/+question/.../messages'
2434+ owner_link: u'http://api.launchpad.test/devel/~asker'
2435+ resource_type_link: u'http://api.launchpad.test/devel/#question'
2436+ self_link: u'http://api.launchpad.test/devel/my-project/+question/...'
2437 status: u'Answered'
2438- target_link: u'http://api.launchpad.dev/devel/my-project'
2439+ target_link: u'http://api.launchpad.test/devel/my-project'
2440 title: u'Q 1 great'
2441- web_link: u'http://answers.launchpad.dev/my-project/+question/...'
2442+ web_link: u'http://answers.launchpad.test/my-project/+question/...'
2443
2444
2445 Question messages
2446@@ -236,13 +236,13 @@
2447 date_created: u'20...+00:00'
2448 index: 1
2449 new_status: u'Answered'
2450- owner_link: u'http://api.launchpad.dev/devel/~contact'
2451+ owner_link: u'http://api.launchpad.test/devel/~contact'
2452 parent_link: None
2453- question_link: u'http://api.launchpad.dev/devel/my-project/+question/...'
2454- resource_type_link: u'http://api.launchpad.dev/devel/#question_message'
2455+ question_link: u'http://api.launchpad.test/devel/my-project/+question/...'
2456+ resource_type_link: u'http://api.launchpad.test/devel/#question_message'
2457 self_link:
2458- u'http://api.launchpad.dev/devel/my-project/+question/.../messages/1'
2459+ u'http://api.launchpad.test/devel/my-project/+question/.../messages/1'
2460 subject: u'Re: Q 1 great'
2461 visible: True
2462 web_link:
2463- u'http://answers.launchpad.dev/my-project/+question/.../messages/1'
2464+ u'http://answers.launchpad.test/my-project/+question/.../messages/1'
2465
2466=== modified file 'lib/lp/app/browser/doc/base-layout.txt'
2467--- lib/lp/app/browser/doc/base-layout.txt 2018-05-23 14:35:48 +0000
2468+++ lib/lp/app/browser/doc/base-layout.txt 2019-05-28 13:57:20 +0000
2469@@ -16,7 +16,7 @@
2470
2471 >>> user = factory.makePerson(name='waffles')
2472 >>> request = LaunchpadTestRequest(
2473- ... SERVER_URL='http://launchpad.dev',
2474+ ... SERVER_URL='http://launchpad.test',
2475 ... PATH_INFO='/~waffles/+layout')
2476 >>> request.setPrincipal(user)
2477
2478@@ -135,18 +135,18 @@
2479 ... """A simple view to test base-layout."""
2480 ... __launchpad_facetname__ = 'bugs'
2481 >>> bugs_request = LaunchpadTestRequest(
2482- ... SERVER_URL='http://bugs.launchpad.dev',
2483+ ... SERVER_URL='http://bugs.launchpad.test',
2484 ... PATH_INFO='/~waffles/+layout')
2485 >>> bugs_request.setPrincipal(user)
2486 >>> view = BugsMainSideView(user, bugs_request)
2487 >>> footer = find_tag_by_id(html, 'footer')
2488 >>> for tag in footer.findAll('a'):
2489 ... print tag.string, tag['href']
2490- None http://launchpad.dev/
2491- Take the tour http://launchpad.dev/+tour
2492+ None http://launchpad.test/
2493+ Take the tour http://launchpad.test/+tour
2494 Read the guide https://help.launchpad.net/
2495 Canonical&nbsp;Ltd. http://canonical.com/
2496- Terms of use http://launchpad.dev/legal
2497+ Terms of use http://launchpad.test/legal
2498 Data privacy https://www.ubuntu.com/legal/dataprivacy
2499 Contact Launchpad Support /feedback
2500 Blog http://blog.launchpad.net/
2501
2502=== modified file 'lib/lp/app/browser/doc/launchpad-search-pages.txt'
2503--- lib/lp/app/browser/doc/launchpad-search-pages.txt 2018-05-21 20:30:16 +0000
2504+++ lib/lp/app/browser/doc/launchpad-search-pages.txt 2019-05-28 13:57:20 +0000
2505@@ -39,7 +39,7 @@
2506 ... search_param_list.append('%s=%s' % (name, value))
2507 ... query_string = '&'.join(search_param_list)
2508 ... request = LaunchpadTestRequest(
2509- ... SERVER_URL='https://launchpad.dev/+search',
2510+ ... SERVER_URL='https://launchpad.test/+search',
2511 ... QUERY_STRING=query_string, form=form, PATH_INFO='/+search')
2512 ... search_view = getMultiAdapter((root, request), name="+search")
2513 ... search_view.initialize()
2514@@ -514,7 +514,7 @@
2515 >>> page.title
2516 u'...Bug... #2 in Ubuntu Hoary: \u201cBlackhole Trash folder\u201d'
2517 >>> page.url
2518- 'http://bugs.launchpad.dev/ubuntu/hoary/+bug/2'
2519+ 'http://bugs.launchpad.test/ubuntu/hoary/+bug/2'
2520 >>> page.summary
2521 u'...Launchpad\u2019s ...bug... tracker allows collaboration...'
2522
2523@@ -566,7 +566,7 @@
2524 link to try the search again
2525
2526 >>> print search_view.url
2527- https://launchpad.dev/+search?field.text=gnomebaker
2528+ https://launchpad.test/+search?field.text=gnomebaker
2529
2530
2531 SearchFormView and SearchFormPrimaryView
2532@@ -589,7 +589,7 @@
2533 >>> search_form_view.id_suffix
2534 '-secondary'
2535 >>> print search_form_view.render()
2536- <form action="http://launchpad.dev/+search" method="get"
2537+ <form action="http://launchpad.test/+search" method="get"
2538 accept-charset="UTF-8" id="sitesearch-secondary"
2539 name="sitesearch-secondary">
2540 <div>
2541@@ -611,7 +611,7 @@
2542 >>> search_form_view.id_suffix
2543 ''
2544 >>> print search_form_view.render()
2545- <form action="http://launchpad.dev/+search" method="get"
2546+ <form action="http://launchpad.test/+search" method="get"
2547 accept-charset="UTF-8" id="sitesearch"
2548 name="sitesearch">
2549 <div>
2550
2551=== modified file 'lib/lp/app/browser/doc/menu.txt'
2552--- lib/lp/app/browser/doc/menu.txt 2018-03-28 19:31:02 +0000
2553+++ lib/lp/app/browser/doc/menu.txt 2019-05-28 13:57:20 +0000
2554@@ -64,9 +64,9 @@
2555 Related pages
2556 >>> for link in menu_view.links:
2557 ... print link.enabled, link.url
2558- True http://launchpad.dev/~beaker/+edit
2559- True http://launchpad.dev/~beaker/+edit-people
2560- False http://launchpad.dev/~beaker/+admin
2561+ True http://launchpad.test/~beaker/+edit
2562+ True http://launchpad.test/~beaker/+edit-people
2563+ False http://launchpad.test/~beaker/+admin
2564
2565 The view renders the heading using the menu title and a list of the links. A
2566 link is rendered only if its 'enabled' property is true. The template uses the
2567@@ -81,13 +81,13 @@
2568 <BLANKLINE>
2569 <li>
2570 <a class="menu-link-edit_thing sprite modify edit"
2571- href="http://launchpad.dev/~beaker/+edit">Edit thing</a>
2572+ href="http://launchpad.test/~beaker/+edit">Edit thing</a>
2573 </li>
2574 <BLANKLINE>
2575 <BLANKLINE>
2576 <li>
2577 <a class="menu-link-edit_people"
2578- href="http://launchpad.dev/~beaker/+edit-people">Edit
2579+ href="http://launchpad.test/~beaker/+edit-people">Edit
2580 people related to thing</a>
2581 </li>
2582 ...
2583@@ -99,18 +99,18 @@
2584 be clickable.
2585
2586 >>> request = LaunchpadTestRequest(
2587- ... SERVER_URL='http://launchpad.dev/~beaker/+edit')
2588+ ... SERVER_URL='http://launchpad.test/~beaker/+edit')
2589 >>> print request.getURL()
2590- http://launchpad.dev/~beaker/+edit
2591+ http://launchpad.test/~beaker/+edit
2592
2593 >>> view = EditView(user, request)
2594 >>> menu_view = create_initialized_view(
2595 ... view, '+related-pages', principal=user)
2596 >>> for link in menu_view.links:
2597 ... print link.enabled, link.linked, link.url
2598- True False http://launchpad.dev/~beaker/+edit
2599- True True http://launchpad.dev/~beaker/+edit-people
2600- False True http://launchpad.dev/~beaker/+admin
2601+ True False http://launchpad.test/~beaker/+edit
2602+ True True http://launchpad.test/~beaker/+edit-people
2603+ False True http://launchpad.test/~beaker/+admin
2604
2605 >>> print menu_view.render()
2606 <div id="related-pages" class="portlet">
2607@@ -134,8 +134,8 @@
2608 ... view, '+global-actions', principal=user)
2609 >>> for link in menu_view.enabled_links:
2610 ... print link.enabled, link.linked, link.url
2611- True False http://launchpad.dev/~beaker/+edit
2612- True True http://launchpad.dev/~beaker/+edit-people
2613+ True False http://launchpad.test/~beaker/+edit
2614+ True True http://launchpad.test/~beaker/+edit-people
2615
2616 The generated markup is for a portlet with the global-actions id.
2617
2618@@ -148,7 +148,7 @@
2619 </li>
2620 <li>
2621 <a class="menu-link-edit_people"
2622- href="http://launchpad.dev/~beaker/+edit-people">Edit
2623+ href="http://launchpad.test/~beaker/+edit-people">Edit
2624 people related to thing</a>
2625 </li>
2626 </ul>
2627
2628=== modified file 'lib/lp/app/browser/launchpad.py'
2629--- lib/lp/app/browser/launchpad.py 2019-02-07 10:17:43 +0000
2630+++ lib/lp/app/browser/launchpad.py 2019-05-28 13:57:20 +0000
2631@@ -475,7 +475,7 @@
2632 http://launchpad.net/+main-template-macros
2633 http://launchpad.net/ubuntu/+main-template-macros
2634 http://launchpad.net/ubuntu/+main-template-macros
2635- https://blueprints.launchpad.dev/ubuntu/hoary/+main-template-macros
2636+ https://blueprints.launchpad.test/ubuntu/hoary/+main-template-macros
2637
2638 Obviously, those requests wouldn't do anything useful and would instead
2639 generate an OOPS.
2640
2641=== modified file 'lib/lp/app/browser/tests/test_base_layout.py'
2642--- lib/lp/app/browser/tests/test_base_layout.py 2019-04-24 16:13:34 +0000
2643+++ lib/lp/app/browser/tests/test_base_layout.py 2019-05-28 13:57:20 +0000
2644@@ -56,7 +56,7 @@
2645 self.context = context
2646
2647 request = LaunchpadTestRequest(
2648- SERVER_URL='http://launchpad.dev', PATH_INFO='/~waffles/+layout')
2649+ SERVER_URL='http://launchpad.test', PATH_INFO='/~waffles/+layout')
2650 request.setPrincipal(self.user)
2651 request.traversed_objects.append(self.context)
2652 view = TemplateView(self.context, request)
2653
2654=== modified file 'lib/lp/app/browser/tests/test_formatters.py'
2655--- lib/lp/app/browser/tests/test_formatters.py 2015-10-26 14:54:43 +0000
2656+++ lib/lp/app/browser/tests/test_formatters.py 2019-05-28 13:57:20 +0000
2657@@ -32,7 +32,7 @@
2658 def test_pagetitle_vhost(self):
2659 project = self.factory.makeProduct(name='fnord')
2660 view = create_view(project, name='+bugs', rootsite='bugs',
2661- current_request=True, server_url='https://bugs.launchpad.dev/')
2662+ current_request=True, server_url='https://bugs.launchpad.test/')
2663 view.request.traversed_objects = [project, view]
2664 formatter = ObjectFormatterAPI(view)
2665 self.assertEqual('Bugs : Fnord', formatter.pagetitle())
2666@@ -62,7 +62,7 @@
2667 bug = self.factory.makeBug(target=project, title='bang')
2668 view = create_view(
2669 bug.bugtasks[0], name='+index', rootsite='bugs',
2670- current_request=True, server_url='https://bugs.launchpad.dev/')
2671+ current_request=True, server_url='https://bugs.launchpad.test/')
2672 view.request.traversed_objects = [project, bug.bugtasks[0], view]
2673 formatter = ObjectFormatterAPI(view)
2674 self.assertEqual(
2675@@ -75,7 +75,7 @@
2676 bug = self.factory.makeBug(target=project, title=title)
2677 view = create_view(
2678 bug.bugtasks[0], name='+index', rootsite='bugs',
2679- current_request=True, server_url='https://bugs.launchpad.dev/')
2680+ current_request=True, server_url='https://bugs.launchpad.test/')
2681 view.request.traversed_objects = [project, bug.bugtasks[0], view]
2682 formatter = ObjectFormatterAPI(view)
2683 detail = u'%s \u201c%s\u201d' % (bug.displayname, title)
2684
2685=== modified file 'lib/lp/app/browser/tests/test_launchpad.py'
2686--- lib/lp/app/browser/tests/test_launchpad.py 2018-01-02 16:10:26 +0000
2687+++ lib/lp/app/browser/tests/test_launchpad.py 2019-05-28 13:57:20 +0000
2688@@ -56,7 +56,7 @@
2689
2690 # We set the request header HTTP_REFERER when we want to simulate navigation
2691 # from a valid page. This is used in the assertDisplaysNotification check.
2692-DEFAULT_REFERER = 'http://launchpad.dev'
2693+DEFAULT_REFERER = 'http://launchpad.test'
2694
2695
2696 class TraversalMixin:
2697@@ -123,7 +123,7 @@
2698
2699 :param path: A slash-delimited path.
2700 :param use_default_referer: If True, set the referer attribute in the
2701- request header to DEFAULT_REFERER = "http://launchpad.dev"
2702+ request header to DEFAULT_REFERER = "http://launchpad.test"
2703 (otherwise it remains as None)
2704 :return: The object found.
2705 """
2706@@ -667,7 +667,7 @@
2707 # Just /~/ expands to the current user. (Bug 785800).
2708 person = self.factory.makePerson()
2709 login_person(person)
2710- obj, view, req = test_traverse('http://launchpad.dev/~')
2711+ obj, view, req = test_traverse('http://launchpad.test/~')
2712 view = removeSecurityProxy(view)
2713 self.assertEqual(
2714 canonical_url(person),
2715@@ -676,13 +676,13 @@
2716 def test_self_url_not_logged_in(self):
2717 # /~/ when not logged in asks you to log in.
2718 self.assertRaises(Unauthorized,
2719- test_traverse, 'http://launchpad.dev/~')
2720+ test_traverse, 'http://launchpad.test/~')
2721
2722 def test_self_url_pathinfo(self):
2723 # You can traverse below /~/.
2724 person = self.factory.makePerson()
2725 login_person(person)
2726- obj, view, req = test_traverse('http://launchpad.dev/~/+editsshkeys')
2727+ obj, view, req = test_traverse('http://launchpad.test/~/+editsshkeys')
2728 view = removeSecurityProxy(view)
2729 self.assertEqual(
2730 canonical_url(person) + '/+editsshkeys',
2731@@ -692,7 +692,7 @@
2732 # You can traverse below /~/.
2733 person = self.factory.makePerson()
2734 login_person(person)
2735- obj, view, req = test_traverse('http://bugs.launchpad.dev/~')
2736+ obj, view, req = test_traverse('http://bugs.launchpad.test/~')
2737 view = removeSecurityProxy(view)
2738 self.assertEqual(
2739 canonical_url(person, rootsite='bugs'),
2740
2741=== modified file 'lib/lp/app/browser/tests/test_launchpadroot.py'
2742--- lib/lp/app/browser/tests/test_launchpadroot.py 2019-04-24 16:13:34 +0000
2743+++ lib/lp/app/browser/tests/test_launchpadroot.py 2019-05-28 13:57:20 +0000
2744@@ -107,17 +107,17 @@
2745 def test_support(self):
2746 # The /support link redirects to answers.
2747 context, view, request = test_traverse(
2748- 'http://launchpad.dev/support')
2749+ 'http://launchpad.test/support')
2750 view()
2751 self.assertEqual(301, request.response.getStatus())
2752 self.assertEqual(
2753- 'http://answers.launchpad.dev/launchpad',
2754+ 'http://answers.launchpad.test/launchpad',
2755 request.response.getHeader('location'))
2756
2757 def test_feedback(self):
2758 # The /feedback link redirects to the help site.
2759 context, view, request = test_traverse(
2760- 'http://launchpad.dev/feedback')
2761+ 'http://launchpad.test/feedback')
2762 view()
2763 self.assertEqual(301, request.response.getStatus())
2764 self.assertEqual(
2765
2766=== modified file 'lib/lp/app/browser/tests/test_macro_view.py'
2767--- lib/lp/app/browser/tests/test_macro_view.py 2017-07-21 09:41:18 +0000
2768+++ lib/lp/app/browser/tests/test_macro_view.py 2019-05-28 13:57:20 +0000
2769@@ -62,5 +62,5 @@
2770
2771 def test_macro_names_not_traversable(self):
2772 for name in self.macro_names:
2773- self.assertTrue(self.is_not_found('http://launchpad.dev/' + name),
2774+ self.assertTrue(self.is_not_found('http://launchpad.test/' + name),
2775 'macro name %r should not be URL accessable' % name)
2776
2777=== modified file 'lib/lp/app/browser/tests/test_page_macro.py'
2778--- lib/lp/app/browser/tests/test_page_macro.py 2015-07-08 16:05:11 +0000
2779+++ lib/lp/app/browser/tests/test_page_macro.py 2019-05-28 13:57:20 +0000
2780@@ -69,7 +69,7 @@
2781 self._setUpView()
2782
2783 def test_base_template(self):
2784- # Requests on the launchpad.dev vhost use the Launchpad base template.
2785+ # Requests on the launchpad.test vhost use the Launchpad base template.
2786 adapter = self.getAdapter([self.view], IPathAdapter, name='macro')
2787 template_path = os.path.normpath(adapter.base.filename)
2788 self.assertIn('lp/app/templates', template_path)
2789
2790=== modified file 'lib/lp/app/browser/tests/test_vocabulary.py'
2791--- lib/lp/app/browser/tests/test_vocabulary.py 2016-02-05 16:51:12 +0000
2792+++ lib/lp/app/browser/tests/test_vocabulary.py 2019-05-28 13:57:20 +0000
2793@@ -143,7 +143,7 @@
2794 getUtility(IIrcIDSet).new(person, 'eg.dom', 'snarf')
2795 getUtility(IIrcIDSet).new(person, 'ex.dom', 'pting')
2796 entry = get_picker_entry(person, None, picker_expander_enabled=True)
2797- self.assertEqual('http://launchpad.dev/~snarf', entry.alt_title_link)
2798+ self.assertEqual('http://launchpad.test/~snarf', entry.alt_title_link)
2799 self.assertEqual(
2800 ['snarf on eg.dom, pting on ex.dom', 'Member since 2005-01-30'],
2801 entry.details)
2802@@ -152,7 +152,7 @@
2803 # The person picker provides more information for teams.
2804 team = self.factory.makeTeam(email='fnord@eg.dom', name='fnord')
2805 entry = get_picker_entry(team, None, picker_expander_enabled=True)
2806- self.assertEqual('http://launchpad.dev/~fnord', entry.alt_title_link)
2807+ self.assertEqual('http://launchpad.test/~fnord', entry.alt_title_link)
2808 self.assertEqual(['Team members: 1'], entry.details)
2809
2810 def test_PersonPickerEntryAdapter_badges(self):
2811@@ -256,7 +256,7 @@
2812 sourcepackagename='snarf', distroseries=series, publish=True)
2813 dsp = distro.getSourcePackage('snarf')
2814 self.assertEqual(
2815- 'http://launchpad.dev/fnord/+source/snarf',
2816+ 'http://launchpad.test/fnord/+source/snarf',
2817 self.getPickerEntry(dsp).alt_title_link)
2818
2819
2820@@ -309,7 +309,7 @@
2821 def test_product_provides_alt_title_link(self):
2822 product = self.factory.makeProduct(name='fnord')
2823 self.assertEqual(
2824- 'http://launchpad.dev/fnord',
2825+ 'http://launchpad.test/fnord',
2826 self.getPickerEntry(product).alt_title_link)
2827
2828 def test_provides_commercial_subscription_none(self):
2829@@ -388,7 +388,7 @@
2830 def test_projectgroup_provides_alt_title_link(self):
2831 projectgroup = self.factory.makeProject(name='fnord')
2832 self.assertEqual(
2833- 'http://launchpad.dev/fnord',
2834+ 'http://launchpad.test/fnord',
2835 self.getPickerEntry(projectgroup).alt_title_link)
2836
2837
2838@@ -445,7 +445,7 @@
2839 def test_distribution_provides_alt_title_link(self):
2840 distribution = self.factory.makeDistribution(name='fnord')
2841 self.assertEqual(
2842- 'http://launchpad.dev/fnord',
2843+ 'http://launchpad.test/fnord',
2844 self.getPickerEntry(distribution).alt_title_link)
2845
2846
2847@@ -544,7 +544,7 @@
2848 result = simplejson.loads(view())
2849 expected = [{
2850 "alt_title": team.name,
2851- "alt_title_link": "http://launchpad.dev/~%s" % team.name,
2852+ "alt_title_link": "http://launchpad.test/~%s" % team.name,
2853 "api_uri": "/~%s" % team.name,
2854 "badges":
2855 [{"label": product.displayname,
2856@@ -562,7 +562,7 @@
2857 },
2858 {
2859 "alt_title": person.name,
2860- "alt_title_link": "http://launchpad.dev/~%s" % person.name,
2861+ "alt_title_link": "http://launchpad.test/~%s" % person.name,
2862 "api_uri": "/~%s" % person.name,
2863 "css": "sprite person",
2864 "description": "<email address hidden>",
2865
2866=== modified file 'lib/lp/app/doc/displaying-paragraphs-of-text.txt'
2867--- lib/lp/app/doc/displaying-paragraphs-of-text.txt 2016-06-20 22:52:44 +0000
2868+++ lib/lp/app/doc/displaying-paragraphs-of-text.txt 2019-05-28 13:57:20 +0000
2869@@ -332,12 +332,12 @@
2870 ... 'faq number 2\n'
2871 ... )
2872 >>> print test_tales('foo/fmt:text-to-html', foo=text)
2873- <p><a href="http://answers.launchpad.dev/ubuntu/+faq/1">faq 1</a><br />
2874- <a href="http://answers.launchpad.dev/ubuntu/+faq/2">faq #2</a><br />
2875- <a href="http://answers.launchpad.dev/ubuntu/+faq/2">faq-2</a><br />
2876- <a href="http://answers.launchpad.dev/ubuntu/+faq/2">faq=2</a><br />
2877- <a href="http://answers.launchpad.dev/ubuntu/+faq/1">faq item 1</a><br />
2878- <a href="http://answers.launchpad.dev/ubuntu/+faq/2">faq number 2</a></p>
2879+ <p><a href="http://answers.launchpad.test/ubuntu/+faq/1">faq 1</a><br />
2880+ <a href="http://answers.launchpad.test/ubuntu/+faq/2">faq #2</a><br />
2881+ <a href="http://answers.launchpad.test/ubuntu/+faq/2">faq-2</a><br />
2882+ <a href="http://answers.launchpad.test/ubuntu/+faq/2">faq=2</a><br />
2883+ <a href="http://answers.launchpad.test/ubuntu/+faq/1">faq item 1</a><br />
2884+ <a href="http://answers.launchpad.test/ubuntu/+faq/2">faq number 2</a></p>
2885
2886 Except, that is, when the FAQ doesn't exist:
2887
2888
2889=== modified file 'lib/lp/app/doc/hierarchical-menu.txt'
2890--- lib/lp/app/doc/hierarchical-menu.txt 2017-10-21 18:14:14 +0000
2891+++ lib/lp/app/doc/hierarchical-menu.txt 2019-05-28 13:57:20 +0000
2892@@ -74,7 +74,7 @@
2893
2894 >>> from lp.testing.menu import make_fake_request
2895 >>> request = make_fake_request(
2896- ... 'http://launchpad.dev/joy-of-cooking/spam',
2897+ ... 'http://launchpad.test/joy-of-cooking/spam',
2898 ... [root, cookbook, recipe])
2899
2900 The hierarchy's list of breadcrumbs is empty since none of the objects
2901@@ -113,10 +113,10 @@
2902 >>> hierarchy = getMultiAdapter((recipe, request), name='+hierarchy')
2903 >>> hierarchy.items
2904 [<TextualBreadcrumb
2905- url='http://launchpad.dev/joy-of-cooking'
2906+ url='http://launchpad.test/joy-of-cooking'
2907 text='Joy of cooking'>,
2908 <TextualBreadcrumb
2909- url='http://launchpad.dev/joy-of-cooking/spam'
2910+ url='http://launchpad.test/joy-of-cooking/spam'
2911 text='Spam'>]
2912
2913 The ICooker object contains a path prefix, a segment of the path that
2914@@ -124,7 +124,7 @@
2915 domains. The `Hierarchy` model copes fine with objects like that.
2916
2917 >>> cooker_request = make_fake_request(
2918- ... 'http://launchpad.dev/+cooker/jamie',
2919+ ... 'http://launchpad.test/+cooker/jamie',
2920 ... [root, cooker])
2921
2922 >>> provideAdapter(TextualBreadcrumb, [ICooker], IBreadcrumb)
2923@@ -172,7 +172,7 @@
2924
2925 >>> ham_recipe = Recipe('ham', cookbook)
2926 >>> ham_request = make_fake_request(
2927- ... 'http://launchpad.dev/joy-of-cooking/ham',
2928+ ... 'http://launchpad.test/joy-of-cooking/ham',
2929 ... [root, cookbook, ham_recipe])
2930
2931 >>> ham_hierarchy = getMultiAdapter(
2932@@ -203,7 +203,7 @@
2933 >>> print breadcrumb.text
2934 None
2935 >>> print breadcrumb.url
2936- http://launchpad.dev/joy-of-cooking
2937+ http://launchpad.test/joy-of-cooking
2938
2939 As said above, the breadcrumb's attributes can be overridden with subclassing
2940 and Python properties.
2941@@ -216,7 +216,7 @@
2942 >>> breadcrumb = DynamicBreadcrumb(cookbook)
2943 >>> breadcrumb
2944 <DynamicBreadcrumb
2945- url='http://launchpad.dev/joy-of-cooking'
2946+ url='http://launchpad.test/joy-of-cooking'
2947 text='Joy of cooking'>
2948
2949
2950@@ -238,7 +238,7 @@
2951 >>> spammy_hierarchy = CustomHierarchy(root, request)
2952 >>> spammy_hierarchy.items
2953 [<TextualBreadcrumb
2954- url='http://launchpad.dev/joy-of-cooking/spam'
2955+ url='http://launchpad.test/joy-of-cooking/spam'
2956 text='Spam'>]
2957
2958
2959@@ -270,7 +270,7 @@
2960 >>> print markup
2961 <ol itemprop="breadcrumb" class="breadcrumbs">
2962 <li>
2963- <a href="http://launchpad.dev/joy-of-cooking">Joy of cooking</a>
2964+ <a href="http://launchpad.test/joy-of-cooking">Joy of cooking</a>
2965 </li>
2966 <li>
2967 Spam
2968@@ -281,7 +281,7 @@
2969 considered to be on the home page if there are no breadcrumbs.
2970
2971 # Simulate a visit to the site root
2972- >>> request = make_fake_request('http://launchpad.dev/', [root])
2973+ >>> request = make_fake_request('http://launchpad.test/', [root])
2974 >>> homepage_hierarchy = getMultiAdapter(
2975 ... (root, request), name='+hierarchy')
2976
2977
2978=== modified file 'lib/lp/app/doc/launchpadform.txt'
2979--- lib/lp/app/doc/launchpadform.txt 2018-07-15 16:23:15 +0000
2980+++ lib/lp/app/doc/launchpadform.txt 2019-05-28 13:57:20 +0000
2981@@ -356,7 +356,7 @@
2982 ...
2983 ... @action(u'Redirect', name='redirect')
2984 ... def redirect_action(self, action, data):
2985- ... self.next_url = 'http://launchpad.dev/'
2986+ ... self.next_url = 'http://launchpad.test/'
2987 ...
2988 ... def handleUpdateFailure(self, action, data, errors):
2989 ... return u'Some errors occured.'
2990
2991=== modified file 'lib/lp/app/doc/lazr-js-widgets.txt'
2992--- lib/lp/app/doc/lazr-js-widgets.txt 2017-12-24 15:45:26 +0000
2993+++ lib/lp/app/doc/lazr-js-widgets.txt 2019-05-28 13:57:20 +0000
2994@@ -55,7 +55,7 @@
2995 Widgets &gt; important
2996 </span>
2997 <a class="yui3-editable_text-trigger sprite edit action-icon"
2998- href="http://launchpad.dev/widget/+edit"
2999+ href="http://launchpad.test/widget/+edit"
3000 title="">Edit</a>
3001 </h1>
3002 <script>
3003@@ -89,20 +89,20 @@
3004 * provide an 'edit_title' to set the title attribute of the anchor
3005
3006 >>> print widget.edit_url
3007- http://launchpad.dev/widget/+edit
3008+ http://launchpad.test/widget/+edit
3009
3010 >>> diff_view = TextLineEditorWidget(
3011 ... product, title_field, title, 'h1', edit_view='+edit-people',
3012 ... edit_title='Change the product title')
3013 >>> print diff_view.edit_url
3014- http://launchpad.dev/widget/+edit-people
3015+ http://launchpad.test/widget/+edit-people
3016 >>> print diff_view.edit_title
3017 Change the product title
3018 >>> ignored = login_person(product.owner)
3019 >>> print diff_view()
3020 <h1...
3021 <a class="yui3-editable_text-trigger sprite edit action-icon"
3022- href="http://launchpad.dev/widget/+edit-people"
3023+ href="http://launchpad.test/widget/+edit-people"
3024 title="Change the product title">...
3025
3026 >>> diff_url = TextLineEditorWidget(
3027@@ -174,7 +174,7 @@
3028 <div class="clearfix">
3029 <div class="edit-controls">
3030 <a class="yui3-editable_text-trigger sprite edit action-icon"
3031- href="http://launchpad.dev/~eric/+archive/ubuntu/ppa/+edit"
3032+ href="http://launchpad.test/~eric/+archive/ubuntu/ppa/+edit"
3033 title="">Edit</a>
3034 </div>
3035 <h3>A title</h3>
3036@@ -272,7 +272,7 @@
3037 </span>
3038 <span>
3039 <a class="sprite edit action-icon lazr-btn yui3-activator-act"
3040- href="http://launchpad.dev/widget/+edit"
3041+ href="http://launchpad.test/widget/+edit"
3042 title="">Edit</a>
3043 <div class="yui3-activator-message-box yui3-activator-hidden"></div>
3044 </span> ...
3045@@ -340,7 +340,7 @@
3046 My email: <span class="value">Don't hide it</span>
3047 <span>
3048 <a class="editicon sprite edit action-icon"
3049- href="http://launchpad.dev/~eric/+edit" title="">Edit</a>
3050+ href="http://launchpad.test/~eric/+edit" title="">Edit</a>
3051 </span>
3052 </span>
3053 <script>
3054@@ -417,7 +417,7 @@
3055 <dt>
3056 Recipe distro series
3057 <a class="sprite edit action-icon lazr-btn yui3-activator-act"
3058- href="http://code.launchpad.dev/~eric/+recipe/cake_recipe/+edit"
3059+ href="http://code.launchpad.test/~eric/+recipe/cake_recipe/+edit"
3060 id="edit-distroseries-btn"
3061 title="">Edit</a>
3062 </dt>
3063
3064=== modified file 'lib/lp/app/doc/menus.txt'
3065--- lib/lp/app/doc/menus.txt 2017-12-24 15:45:26 +0000
3066+++ lib/lp/app/doc/menus.txt 2019-05-28 13:57:20 +0000
3067@@ -86,14 +86,14 @@
3068 >>> recipe = Recipe('fried-spam', cookbook)
3069
3070 >>> request = make_fake_request(
3071- ... 'http://launchpad.dev/joy-of-cooking/fried-spam',
3072+ ... 'http://launchpad.test/joy-of-cooking/fried-spam',
3073 ... traversed_objects=[cookbook, recipe])
3074
3075 >>> canonical_url(cookbook)
3076- u'http://launchpad.dev/joy-of-cooking'
3077+ u'http://launchpad.test/joy-of-cooking'
3078
3079 >>> canonical_url(recipe)
3080- u'http://launchpad.dev/joy-of-cooking/fried-spam'
3081+ u'http://launchpad.test/joy-of-cooking/fried-spam'
3082
3083 Content objects are not suitable for presentation by themselves; they
3084 require a view class to adapt them to the required format. An object may
3085@@ -302,22 +302,22 @@
3086
3087 >>> summarise_links(
3088 ... CookeryFacetMenu(cookbook),
3089- ... url='http://launchpad.dev/joy-of-cooking',
3090+ ... url='http://launchpad.test/joy-of-cooking',
3091 ... facet=None)
3092 link summary
3093- url: http://launchpad.dev/joy-of-cooking
3094+ url: http://launchpad.test/joy-of-cooking
3095 enabled: True
3096 menu: None
3097 selected: True
3098 linked: False
3099 link questions
3100- url: http://launchpad.dev/joy-of-cooking/+questions
3101+ url: http://launchpad.test/joy-of-cooking/+questions
3102 enabled: True
3103 menu: None
3104 selected: False
3105 linked: True
3106 link variations
3107- url: http://launchpad.dev/joy-of-cooking/+variations
3108+ url: http://launchpad.test/joy-of-cooking/+variations
3109 enabled: False
3110 menu: None
3111 selected: False
3112@@ -441,14 +441,14 @@
3113
3114 >>> summarise_links(
3115 ... RecipeMenu(recipe),
3116- ... url='http://launchpad.dev/joy-of-cooking/fried-spam')
3117+ ... url='http://launchpad.test/joy-of-cooking/fried-spam')
3118 link summary
3119- url: http://launchpad.dev/joy-of-cooking/fried-spam
3120+ url: http://launchpad.test/joy-of-cooking/fried-spam
3121 enabled: True
3122 menu: <...IRecipeEditMenuMarker...>
3123 linked: False
3124 link journal
3125- url: http://launchpad.dev/joy-of-cooking/fried-spam/+journal
3126+ url: http://launchpad.test/joy-of-cooking/fried-spam/+journal
3127 enabled: True
3128 menu: <...IRecipeJournalMenuMarker...>
3129 linked: True
3130@@ -481,22 +481,22 @@
3131
3132 >>> summarise_links(
3133 ... RecipeFacetMenu(recipe),
3134- ... url='http://launchpad.dev/joy-of-cooking/fried-spam',
3135+ ... url='http://launchpad.test/joy-of-cooking/fried-spam',
3136 ... facet=None)
3137 link summary
3138- url: http://launchpad.dev/joy-of-cooking/fried-spam
3139+ url: http://launchpad.test/joy-of-cooking/fried-spam
3140 enabled: True
3141 menu: None
3142 selected: True
3143 linked: False
3144 link questions
3145- url: http://launchpad.dev/joy-of-cooking/fried-spam/+questions
3146+ url: http://launchpad.test/joy-of-cooking/fried-spam/+questions
3147 enabled: True
3148 menu: None
3149 selected: False
3150 linked: True
3151 link variations
3152- url: http://launchpad.dev/joy-of-cooking/fried-spam/+variations
3153+ url: http://launchpad.test/joy-of-cooking/fried-spam/+variations
3154 enabled: True
3155 menu: None
3156 selected: False
3157@@ -545,7 +545,7 @@
3158
3159 >>> summarise_links(
3160 ... BogusFacetMenu(recipe),
3161- ... url='http://launchpad.dev/joy-of-cooking/fried-spam',
3162+ ... url='http://launchpad.test/joy-of-cooking/fried-spam',
3163 ... facet=None)
3164 Traceback (most recent call last):
3165 ...
3166@@ -577,7 +577,7 @@
3167 ... IFacetMenu, INavigationMenu)
3168
3169 >>> request = make_fake_request(
3170- ... 'http://launchpad.dev/joy-of-cooking/fried-spam',
3171+ ... 'http://launchpad.test/joy-of-cooking/fried-spam',
3172 ... traversed_objects=[cookbook, recipe])
3173 >>> recipe_view = getMultiAdapter((recipe, request), name='+index')
3174 >>> request._last_obj_traversed = recipe_view
3175@@ -637,16 +637,16 @@
3176 >>> recipe_navigationmenu = queryAdapter(
3177 ... recipe, INavigationMenu, name='cookery')
3178 >>> request.getURL()
3179- 'http://launchpad.dev/joy-of-cooking/fried-spam'
3180+ 'http://launchpad.test/joy-of-cooking/fried-spam'
3181
3182 >>> summarise_links(recipe_navigationmenu)
3183 link summary
3184- url: http://launchpad.dev/joy-of-cooking/fried-spam
3185+ url: http://launchpad.test/joy-of-cooking/fried-spam
3186 enabled: True
3187 menu: <...IRecipeEditMenuMarker...>
3188 linked: False
3189 link journal
3190- url: http://launchpad.dev/joy-of-cooking/fried-spam/+journal
3191+ url: http://launchpad.test/joy-of-cooking/fried-spam/+journal
3192 enabled: True
3193 menu: <...IRecipeJournalMenuMarker...>
3194 linked: True
3195@@ -656,14 +656,14 @@
3196
3197 >>> summarise_links(
3198 ... recipe_navigationmenu,
3199- ... url='http://launchpad.dev/joy-of-cooking/fried-spam/+journal')
3200+ ... url='http://launchpad.test/joy-of-cooking/fried-spam/+journal')
3201 link summary
3202- url: http://launchpad.dev/joy-of-cooking/fried-spam
3203+ url: http://launchpad.test/joy-of-cooking/fried-spam
3204 enabled: True
3205 menu: <...IRecipeEditMenuMarker...>
3206 linked: True
3207 link journal
3208- url: http://launchpad.dev/joy-of-cooking/fried-spam/+journal
3209+ url: http://launchpad.test/joy-of-cooking/fried-spam/+journal
3210 enabled: True
3211 menu: <...IRecipeJournalMenuMarker...>
3212 linked: False
3213@@ -672,13 +672,13 @@
3214
3215 >>> summarise_links(
3216 ... recipe_navigationmenu,
3217- ... url='http://launchpad.dev/joy-of-cooking/fried-spam?x=1')
3218+ ... url='http://launchpad.test/joy-of-cooking/fried-spam?x=1')
3219 link summary
3220- url: http://launchpad.dev/joy-of-cooking/fried-spam
3221+ url: http://launchpad.test/joy-of-cooking/fried-spam
3222 ...
3223 linked: False
3224 link journal
3225- url: http://launchpad.dev/joy-of-cooking/fried-spam/+journal
3226+ url: http://launchpad.test/joy-of-cooking/fried-spam/+journal
3227 ...
3228 linked: True
3229
3230@@ -687,7 +687,7 @@
3231
3232 >>> summarise_links(
3233 ... recipe_questions_navigationmenu,
3234- ... url=('http://launchpad.dev/joy-of-cooking/fried-spam/+questions'
3235+ ... url=('http://launchpad.test/joy-of-cooking/fried-spam/+questions'
3236 ... '?filter=all&sort=Descending'))
3237 link all_questions
3238 url: http://.../joy-of-cooking/fried-spam/+questions?filter=all
3239@@ -700,7 +700,7 @@
3240
3241 >>> summarise_links(
3242 ... recipe_questions_navigationmenu,
3243- ... url=('http://launchpad.dev/joy-of-cooking/fried-spam/+questions'
3244+ ... url=('http://launchpad.test/joy-of-cooking/fried-spam/+questions'
3245 ... '?filter=Obsolete'))
3246 link all_questions
3247 url: http://.../joy-of-cooking/fried-spam/+questions?filter=all
3248@@ -724,25 +724,25 @@
3249 linked, as can be seen when the url is not explicitly passed.
3250
3251 >>> request.getURL()
3252- 'http://launchpad.dev/joy-of-cooking/fried-spam'
3253+ 'http://launchpad.test/joy-of-cooking/fried-spam'
3254
3255 >>> summarise_links(
3256 ... CookeryFacetMenu(cookbook),
3257 ... facet='questions')
3258 link summary
3259- url: http://launchpad.dev/joy-of-cooking
3260+ url: http://launchpad.test/joy-of-cooking
3261 enabled: True
3262 menu: None
3263 selected: False
3264 linked: True
3265 link questions
3266- url: http://launchpad.dev/joy-of-cooking/+questions
3267+ url: http://launchpad.test/joy-of-cooking/+questions
3268 enabled: True
3269 menu: None
3270 selected: True
3271 linked: True
3272 link variations
3273- url: http://launchpad.dev/joy-of-cooking/+variations
3274+ url: http://launchpad.test/joy-of-cooking/+variations
3275 enabled: False
3276 menu: None
3277 selected: False
3278@@ -763,7 +763,7 @@
3279 identical to the one in the parent's menu.)
3280
3281 >>> request = make_fake_request(
3282- ... 'http://launchpad.dev'
3283+ ... 'http://launchpad.test'
3284 ... '/joy-of-cooking/fried-spam/+edit-ingredients',
3285 ... traversed_objects=[cookbook, recipe])
3286 >>> recipe_ingredients_view = getMultiAdapter(
3287@@ -774,12 +774,12 @@
3288 ... recipe, INavigationMenu, name='cookery')
3289 >>> summarise_links(recipe_summary_menu)
3290 link summary
3291- url: http://launchpad.dev/joy-of-cooking/fried-spam
3292+ url: http://launchpad.test/joy-of-cooking/fried-spam
3293 enabled: True
3294 menu: <...IRecipeEditMenuMarker...>
3295 linked: False
3296 link journal
3297- url: http://launchpad.dev/joy-of-cooking/fried-spam/+journal
3298+ url: http://launchpad.test/joy-of-cooking/fried-spam/+journal
3299 enabled: True
3300 menu: <...IRecipeJournalMenuMarker...>
3301 linked: True
3302@@ -788,12 +788,12 @@
3303 ... recipe_ingredients_view, INavigationMenu, name='cookery')
3304 >>> summarise_links(recipe_overview_menu)
3305 link edit_instructions
3306- url: http://launchpad.dev/joy-of-cooking/fried-spam/+edit-instructions
3307+ url: http://launchpad.test/joy-of-cooking/fried-spam/+edit-instructions
3308 enabled: True
3309 menu: None
3310 linked: True
3311 link edit_ingredients
3312- url: http://launchpad.dev/joy-of-cooking/fried-spam/+edit-ingredients
3313+ url: http://launchpad.test/joy-of-cooking/fried-spam/+edit-ingredients
3314 enabled: True
3315 menu: None
3316 linked: False
3317@@ -803,7 +803,7 @@
3318 menu of the RecipeMenu will change the state of both menus.
3319
3320 >>> request = make_fake_request(
3321- ... 'http://launchpad.dev/joy-of-cooking/fried-spam/+read-journal',
3322+ ... 'http://launchpad.test/joy-of-cooking/fried-spam/+read-journal',
3323 ... traversed_objects=[cookbook, recipe])
3324 >>> recipe_journal_view = getMultiAdapter(
3325 ... (recipe, request), name='+read-journal')
3326@@ -811,12 +811,12 @@
3327
3328 >>> summarise_links(recipe_summary_menu)
3329 link summary
3330- url: http://launchpad.dev/joy-of-cooking/fried-spam
3331+ url: http://launchpad.test/joy-of-cooking/fried-spam
3332 enabled: True
3333 menu: <...IRecipeEditMenuMarker...>
3334 linked: True
3335 link journal
3336- url: http://launchpad.dev/joy-of-cooking/fried-spam/+journal
3337+ url: http://launchpad.test/joy-of-cooking/fried-spam/+journal
3338 enabled: True
3339 menu: <...IRecipeJournalMenuMarker...>
3340 linked: False
3341@@ -825,12 +825,12 @@
3342 ... queryAdapter(
3343 ... recipe_journal_view, INavigationMenu, name='cookery'))
3344 link read_journal
3345- url: http://launchpad.dev/joy-of-cooking/fried-spam/+read-journal
3346+ url: http://launchpad.test/joy-of-cooking/fried-spam/+read-journal
3347 enabled: True
3348 menu: None
3349 linked: False
3350 link write_entry
3351- url: http://launchpad.dev/joy-of-cooking/fried-spam/+write-entry
3352+ url: http://launchpad.test/joy-of-cooking/fried-spam/+write-entry
3353 enabled: True
3354 menu: None
3355 linked: True
3356@@ -867,7 +867,7 @@
3357 ... return Link(target, text)
3358 ...
3359 ... def baz(self):
3360- ... target = 'http://launchpad.dev/joy-of-cooking/+baz'
3361+ ... target = 'http://launchpad.test/joy-of-cooking/+baz'
3362 ... text = 'Baz'
3363 ... return Link(target, text)
3364 ...
3365@@ -877,17 +877,17 @@
3366 ... return Link(target, text)
3367
3368 >>> print canonical_url(cookbook)
3369- http://launchpad.dev/joy-of-cooking
3370+ http://launchpad.test/joy-of-cooking
3371
3372- >>> request_url = URI('http://launchpad.dev/joy-of-cooking')
3373+ >>> request_url = URI('http://launchpad.test/joy-of-cooking')
3374
3375 >>> facets = AbsoluteUrlTargetTestFacets(cookbook)
3376 >>> for link in facets.iterlinks(request_url):
3377 ... print link.url, link.linked
3378- http://launchpad.dev/joy-of-cooking False
3379+ http://launchpad.test/joy-of-cooking False
3380 ftp://barlink.example.com/barbarbar True
3381- http://launchpad.dev/joy-of-cooking/+baz True
3382- http://launchpad.dev/joy-of-cooking/+spoo True
3383+ http://launchpad.test/joy-of-cooking/+baz True
3384+ http://launchpad.test/joy-of-cooking/+spoo True
3385
3386
3387 The current view's menu
3388@@ -908,12 +908,12 @@
3389
3390 >>> summarise_links(recipe_summary_menu)
3391 link summary
3392- url: http://launchpad.dev/joy-of-cooking/fried-spam
3393+ url: http://launchpad.test/joy-of-cooking/fried-spam
3394 enabled: True
3395 menu: <...IRecipeEditMenuMarker...>
3396 linked: True
3397 link journal
3398- url: http://launchpad.dev/joy-of-cooking/fried-spam/+journal
3399+ url: http://launchpad.test/joy-of-cooking/fried-spam/+journal
3400 enabled: True
3401 menu: <...IRecipeJournalMenuMarker...>
3402 linked: False
3403@@ -949,19 +949,19 @@
3404 ... 'context/menu:facet', context=recipe, request=request)
3405 >>> summarise_tal_links(links_list)
3406 link summary
3407- url: http://launchpad.dev/joy-of-cooking/fried-spam
3408+ url: http://launchpad.test/joy-of-cooking/fried-spam
3409 enabled: True
3410 menu: None
3411 selected: True
3412 linked: True
3413 link questions
3414- url: http://launchpad.dev/joy-of-cooking/fried-spam/+questions
3415+ url: http://launchpad.test/joy-of-cooking/fried-spam/+questions
3416 enabled: True
3417 menu: None
3418 selected: False
3419 linked: True
3420 link variations
3421- url: http://launchpad.dev/joy-of-cooking/fried-spam/+variations
3422+ url: http://launchpad.test/joy-of-cooking/fried-spam/+variations
3423 enabled: True
3424 menu: None
3425 selected: False
3426@@ -971,12 +971,12 @@
3427 ... 'context/menu:navigation', context=recipe, request=request)
3428 >>> summarise_tal_links(links_dict)
3429 link journal
3430- url: http://launchpad.dev/joy-of-cooking/fried-spam/+journal
3431+ url: http://launchpad.test/joy-of-cooking/fried-spam/+journal
3432 enabled: True
3433 menu: <...IRecipeJournalMenuMarker...>
3434 linked: False
3435 link summary
3436- url: http://launchpad.dev/joy-of-cooking/fried-spam
3437+ url: http://launchpad.test/joy-of-cooking/fried-spam
3438 enabled: True
3439 menu: <...IRecipeEditMenuMarker...>
3440 linked: True
3441@@ -987,12 +987,12 @@
3442 >>> summarise_tal_links(links_dict)
3443 attribute journal_entries: 42
3444 link read_journal
3445- url: http://launchpad.dev/joy-of-cooking/fried-spam/+read-journal
3446+ url: http://launchpad.test/joy-of-cooking/fried-spam/+read-journal
3447 enabled: True
3448 menu: None
3449 linked: False
3450 link write_entry
3451- url: http://launchpad.dev/joy-of-cooking/fried-spam/+write-entry
3452+ url: http://launchpad.test/joy-of-cooking/fried-spam/+write-entry
3453 enabled: True
3454 menu: None
3455 linked: True
3456@@ -1036,7 +1036,7 @@
3457
3458 >>> comment = Comment('a-comment', recipe)
3459 >>> print canonical_url(comment)
3460- http://launchpad.dev/joy-of-cooking/fried-spam/a-comment
3461+ http://launchpad.test/joy-of-cooking/fried-spam/a-comment
3462
3463 When we try to look up the menu for the comment, the navigation menu for
3464 the next highest object in the URL hierarchy, the Recipe, will be
3465@@ -1046,12 +1046,12 @@
3466 ... 'context/menu:navigation', context=comment)
3467 >>> summarise_tal_links(links_dict)
3468 link journal
3469- url: http://launchpad.dev/joy-of-cooking/fried-spam/+journal
3470+ url: http://launchpad.test/joy-of-cooking/fried-spam/+journal
3471 enabled: True
3472 menu: <...IRecipeJournalMenuMarker...>
3473 linked: False
3474 link summary
3475- url: http://launchpad.dev/joy-of-cooking/fried-spam
3476+ url: http://launchpad.test/joy-of-cooking/fried-spam
3477 enabled: True
3478 menu: <...IRecipeEditMenuMarker...>
3479 linked: True
3480@@ -1188,7 +1188,7 @@
3481 URL.
3482
3483 >>> request.getURL()
3484- 'http://launchpad.dev/joy-of-cooking/fried-spam/+read-journal'
3485+ 'http://launchpad.test/joy-of-cooking/fried-spam/+read-journal'
3486
3487 >>> recipe_view_menu_view = NavigationMenuView(
3488 ... recipe_journal_view, request)
3489
3490=== modified file 'lib/lp/app/doc/tales.txt'
3491--- lib/lp/app/doc/tales.txt 2017-12-24 15:45:26 +0000
3492+++ lib/lp/app/doc/tales.txt 2019-05-28 13:57:20 +0000
3493@@ -325,7 +325,7 @@
3494 The `fmt:url` is used when you want the canonical URL of a given object.
3495
3496 >>> print test_tales("bug/fmt:url", bug=bug)
3497- http://bugs.launchpad.dev/bugs/1
3498+ http://bugs.launchpad.test/bugs/1
3499
3500 You can also specify an extra argument (a view's name), if you want the
3501 URL of a given page under that object. For that to work, though, we need
3502@@ -334,7 +334,7 @@
3503 >>> from lp.services.webapp.servers import LaunchpadTestRequest
3504 >>> login(ANONYMOUS, LaunchpadTestRequest())
3505 >>> print test_tales("bug/fmt:url/+text", bug=bug)
3506- http://bugs.launchpad.dev/bugs/1/+text
3507+ http://bugs.launchpad.test/bugs/1/+text
3508
3509
3510 fmt:url accepts an rootsite extension to make URLs to a specific application.
3511@@ -343,16 +343,16 @@
3512 ... LaunchpadTestRequest(SERVER_URL='http://code.launchpad.net'))
3513
3514 >>> print test_tales("person/fmt:url:bugs", person=mark)
3515- http://bugs.launchpad.dev/~mark
3516+ http://bugs.launchpad.test/~mark
3517
3518 >>> print test_tales("person/fmt:url:feeds", person=mark)
3519- http://feeds.launchpad.dev/~mark
3520+ http://feeds.launchpad.test/~mark
3521
3522 >>> print test_tales("pillar/fmt:url:answers", pillar=ubuntu)
3523- http://answers.launchpad.dev/ubuntu
3524+ http://answers.launchpad.test/ubuntu
3525
3526 >>> print test_tales("bug/fmt:url:mainsite", bug=bug)
3527- http://launchpad.dev/bugs/1
3528+ http://launchpad.test/bugs/1
3529
3530 >>> login(ANONYMOUS)
3531
3532@@ -434,28 +434,28 @@
3533 ... LaunchpadTestRequest(SERVER_URL='http://code.launchpad.net'))
3534
3535 >>> print test_tales("pillar/fmt:link:translations", pillar=ubuntu)
3536- <a ...http://translations.launchpad.dev/ubuntu...
3537+ <a ...http://translations.launchpad.test/ubuntu...
3538
3539 >>> print test_tales("person/fmt:url:feeds", person=mark)
3540- http://feeds.launchpad.dev/~mark
3541+ http://feeds.launchpad.test/~mark
3542
3543 >>> print test_tales("bug/fmt:url:mainsite", bug=bug)
3544- http://launchpad.dev/bugs/1
3545+ http://launchpad.test/bugs/1
3546
3547 The default behaviour for pillars, persons, and teams is to link to
3548 the mainsite.
3549
3550 >>> print test_tales("pillar/fmt:link", pillar=ubuntu)
3551- <a ...http://launchpad.dev/ubuntu...
3552+ <a ...http://launchpad.test/ubuntu...
3553
3554 >>> print test_tales("person/fmt:link", person=mark)
3555- <a ...http://launchpad.dev/~mark...
3556+ <a ...http://launchpad.test/~mark...
3557
3558 >>> print test_tales("person/fmt:link-display-name-id", person=mark)
3559- <a ...http://launchpad.dev/~mark...>Mark Shuttleworth (mark)</a>
3560+ <a ...http://launchpad.test/~mark...>Mark Shuttleworth (mark)</a>
3561
3562 >>> print test_tales("team/fmt:link", team=ubuntu_team)
3563- <a ...http://launchpad.dev/~ubuntu-team...
3564+ <a ...http://launchpad.test/~ubuntu-team...
3565
3566 >>> login(ANONYMOUS)
3567
3568@@ -514,7 +514,7 @@
3569 The bzr-link formatter uses the bzr identity.
3570
3571 >>> print test_tales("branch/fmt:bzr-link", branch=branch)
3572- <a href="http://code.launchpad.dev/~eric/fooix/bar"
3573+ <a href="http://code.launchpad.test/~eric/fooix/bar"
3574 class="sprite branch">lp://dev/~eric/fooix/bar</a>
3575
3576 >>> ignored = login_person(fooix.owner, LaunchpadTestRequest())
3577@@ -694,7 +694,7 @@
3578 The url for the release file can be retrieved using fmt:url.
3579
3580 >>> print test_tales("release_file/fmt:url", release_file=release_file)
3581- http://launchpad.dev/.../+download/test.txt
3582+ http://launchpad.test/.../+download/test.txt
3583
3584 HTML in the file description is escaped in the fmt:link.
3585
3586@@ -703,7 +703,7 @@
3587 >>> print test_tales("release_file/fmt:link", release_file=release_file)
3588 <img ...
3589 <a title="&gt;&lt;script&gt;XSS failed&lt;/script&gt; (4 bytes)"
3590- href="http://launchpad.dev/.../+download/test.txt">test.txt</a> ...
3591+ href="http://launchpad.test/.../+download/test.txt">test.txt</a> ...
3592
3593
3594
3595@@ -788,10 +788,10 @@
3596 The "standard" 'url' name is supported:
3597
3598 >>> test_tales("bugtracker/fmt:url", bugtracker=bugtracker)
3599- u'http://bugs.launchpad.dev/bugs/bugtrackers/email'
3600+ u'http://bugs.launchpad.test/bugs/bugtrackers/email'
3601
3602 (The url is relative if possible, and our test request claims to be from
3603-launchpad.dev, so the url is relative.)
3604+launchpad.test, so the url is relative.)
3605
3606 As are 'link', 'external-link', 'external-title-link' and 'aliases',
3607 which help when hiding email addresses from users who are not logged in.
3608@@ -851,10 +851,10 @@
3609 The "standard" 'url' name is supported:
3610
3611 >>> test_tales("bugwatch/fmt:url", bugwatch=sf_bugwatch)
3612- u'http://bugs.launchpad.dev/bugs/12/+watch/...'
3613+ u'http://bugs.launchpad.test/bugs/12/+watch/...'
3614
3615 >>> test_tales("bugwatch/fmt:url", bugwatch=email_bugwatch)
3616- u'http://bugs.launchpad.dev/bugs/12/+watch/...'
3617+ u'http://bugs.launchpad.test/bugs/12/+watch/...'
3618
3619 As are 'external-link' and 'external-link-short', which help when hiding
3620 email addresses from users who are not logged in:
3621@@ -1200,22 +1200,22 @@
3622
3623 >>> test_tales('foo/fmt:linkify-email',
3624 ... foo='I am the mighty foo.bar@canonical.com hear me roar.')
3625- u'...<a href="http://launchpad.dev/~name16"
3626+ u'...<a href="http://launchpad.test/~name16"
3627 class="sprite person">foo.bar@canonical.com</a>...'
3628
3629 Multiple addresses may be linkified at once:
3630
3631 >>> test_tales('foo/fmt:linkify-email',
3632 ... foo='foo.bar@canonical.com and cprov@ubuntu.com')
3633- u'<a href="http://launchpad.dev/~name16"
3634+ u'<a href="http://launchpad.test/~name16"
3635 class="sprite person">foo.bar@canonical.com</a>
3636- and <a href="http://launchpad.dev/~cprov"
3637+ and <a href="http://launchpad.test/~cprov"
3638 class="sprite person">cprov@ubuntu.com</a>'
3639
3640 Team addresses are linkified with a team icon:
3641
3642 >>> test_tales('foo/fmt:linkify-email', foo='support@ubuntu.com')
3643- u'<a href="http://launchpad.dev/~ubuntu-team"
3644+ u'<a href="http://launchpad.test/~ubuntu-team"
3645 class="sprite team">support@ubuntu.com</a>'
3646
3647 Unknown email addresses are not altered in any way:
3648@@ -1495,14 +1495,14 @@
3649 >>> login(ANONYMOUS, request)
3650 >>> link = Link('+place', 'text', 'summary', icon='icon', enabled=True)
3651 >>> menu_link = MenuLink(link)
3652- >>> menu_link.url = "http://launchpad.dev/+place"
3653+ >>> menu_link.url = "http://launchpad.test/+place"
3654 >>> menu_link.name = 'test_link'
3655
3656 The link can be rendered as an anchored icon.
3657
3658 >>> print test_tales('menu_link/fmt:icon', menu_link=menu_link)
3659 <a class="menu-link-test_link sprite icon action-icon"
3660- href="http://launchpad.dev/+place"
3661+ href="http://launchpad.test/+place"
3662 title="summary">text</a>
3663
3664 The default rendering can be explicitly called too, text with an icon to
3665@@ -1510,7 +1510,7 @@
3666
3667 >>> print test_tales('menu_link/fmt:link', menu_link=menu_link)
3668 <a class="menu-link-test_link sprite icon"
3669- href="http://launchpad.dev/+place"
3670+ href="http://launchpad.test/+place"
3671 title="summary">text</a>
3672
3673 The 'edit', 'remove' and 'trash-icon' links are rendered icons followed
3674@@ -1519,19 +1519,19 @@
3675 >>> menu_link.icon = 'edit'
3676 >>> print test_tales('menu_link/fmt:link', menu_link=menu_link)
3677 <a class="menu-link-test_link sprite modify edit"
3678- href="http://launchpad.dev/+place"
3679+ href="http://launchpad.test/+place"
3680 title="summary">text</a>
3681
3682 >>> menu_link.icon = 'remove'
3683 >>> print test_tales('menu_link/fmt:link', menu_link=menu_link)
3684 <a class="menu-link-test_link sprite modify remove"
3685- href="http://launchpad.dev/+place"
3686+ href="http://launchpad.test/+place"
3687 title="summary">text</a>
3688
3689 >>> menu_link.icon = 'trash-icon'
3690 >>> print test_tales('menu_link/fmt:link', menu_link=menu_link)
3691 <a class="menu-link-test_link sprite modify trash-icon"
3692- href="http://launchpad.dev/+place"
3693+ href="http://launchpad.test/+place"
3694 title="summary">text</a>
3695
3696 fmt:icon-link and fmt:link-icon are deprecated. They are an alias for
3697@@ -1541,18 +1541,18 @@
3698 >>> menu_link.icon = 'icon'
3699 >>> print test_tales('menu_link/fmt:icon-link', menu_link=menu_link)
3700 <a class="menu-link-test_link sprite icon"
3701- href="http://launchpad.dev/+place"
3702+ href="http://launchpad.test/+place"
3703 title="summary">text</a>
3704
3705 >>> print test_tales('menu_link/fmt:link-icon', menu_link=menu_link)
3706 <a class="menu-link-test_link sprite icon"
3707- href="http://launchpad.dev/+place"
3708+ href="http://launchpad.test/+place"
3709 title="summary">text</a>
3710
3711 And the url format is also available.
3712
3713 >>> print test_tales('menu_link/fmt:url', menu_link=menu_link)
3714- http://launchpad.dev/+place
3715+ http://launchpad.test/+place
3716
3717 If the link is disabled, no markup is rendered.
3718
3719
3720=== modified file 'lib/lp/app/doc/textformatting.txt'
3721--- lib/lp/app/doc/textformatting.txt 2011-12-23 22:27:40 +0000
3722+++ lib/lp/app/doc/textformatting.txt 2019-05-28 13:57:20 +0000
3723@@ -258,7 +258,7 @@
3724 ... date='today',
3725 ... message_id='<aardvark>',
3726 ... # And this is the one we're really interested in.
3727- ... review_url=('http://launchpad.dev/~frankly-my-dear-i-'
3728+ ... review_url=('http://launchpad.test/~frankly-my-dear-i-'
3729 ... 'dont-give-a-damn/+review-moderation-messages'),
3730 ... )
3731
3732@@ -283,7 +283,7 @@
3733 <BLANKLINE>
3734 To review all messages pending approval, visit:
3735 <BLANKLINE>
3736- http://launchpad.dev/~frankly-my-dear-i-dont-give-a-damn/+review-
3737+ http://launchpad.test/~frankly-my-dear-i-dont-give-a-damn/+review-
3738 moderation-messages
3739 <BLANKLINE>
3740 Regards,
3741@@ -316,7 +316,7 @@
3742 <BLANKLINE>
3743 To review all messages pending approval, visit:
3744 <BLANKLINE>
3745- http://launchpad.dev/~frankly-my-dear-i-dont-give-a-damn/+review-moderation-messages
3746+ http://launchpad.test/~frankly-my-dear-i-dont-give-a-damn/+review-moderation-messages
3747 <BLANKLINE>
3748 Regards,
3749 The Launchpad team
3750
3751=== modified file 'lib/lp/app/javascript/subscribers/subscribers_list.js'
3752--- lib/lp/app/javascript/subscribers/subscribers_list.js 2017-09-22 19:41:16 +0000
3753+++ lib/lp/app/javascript/subscribers/subscribers_list.js 2019-05-28 13:57:20 +0000
3754@@ -244,7 +244,7 @@
3755 * "display_name": "Foo Bar",
3756 * "can_edit": true/false,
3757 * "is_team": true/false,
3758- * "web_link": "https://launchpad.dev/~foobar",
3759+ * "web_link": "https://launchpad.test/~foobar",
3760 * "display_subscribed_by": "Matt Zimmerman (mdz)"
3761 * },
3762 * "subscription_level": "Details"},
3763
3764=== modified file 'lib/lp/app/javascript/testing/tests/test_mockio.js'
3765--- lib/lp/app/javascript/testing/tests/test_mockio.js 2017-07-24 15:37:03 +0000
3766+++ lib/lp/app/javascript/testing/tests/test_mockio.js 2019-05-28 13:57:20 +0000
3767@@ -21,7 +21,7 @@
3768 tests.suite.add(new Y.Test.Case({
3769 name: 'mockio_tests',
3770
3771- test_url: "https://launchpad.dev/test/url",
3772+ test_url: "https://launchpad.test/test/url",
3773
3774 setUp: function() {
3775 // Initialize call_count on recorders.
3776
3777=== modified file 'lib/lp/app/javascript/tests/test_hide_comment.js'
3778--- lib/lp/app/javascript/tests/test_hide_comment.js 2014-05-28 20:38:48 +0000
3779+++ lib/lp/app/javascript/tests/test_hide_comment.js 2019-05-28 13:57:20 +0000
3780@@ -29,7 +29,7 @@
3781 config.on.success();
3782 };
3783 LP.cache.comment_context = {
3784- self_link: 'https://launchpad.dev/api/devel/some/comment/'
3785+ self_link: 'https://launchpad.test/api/devel/some/comment/'
3786 };
3787 this.comment_list = new Y.lp.app.comment.CommentList();
3788 this.comment_list.render();
3789@@ -47,7 +47,7 @@
3790 Y.Assert.areEqual('Unhide', link.get('text'),
3791 'Link text should be \'Unhide\'');
3792 Y.Assert.areEqual(
3793- 'https://launchpad.dev/api/devel/some/comment/',
3794+ 'https://launchpad.test/api/devel/some/comment/',
3795 LP.cache.call_data.called_url, 'Call with wrong url.');
3796 Y.Assert.areEqual(
3797 'setCommentVisibility', LP.cache.call_data.called_func,
3798@@ -67,7 +67,7 @@
3799 Y.Assert.areEqual('Hide', link.get('text'),
3800 'Link text should be \'Hide\'');
3801 Y.Assert.areEqual(
3802- 'https://launchpad.dev/api/devel/some/comment/',
3803+ 'https://launchpad.test/api/devel/some/comment/',
3804 LP.cache.call_data.called_url, 'Call with wrong url.');
3805 Y.Assert.areEqual(
3806 'setCommentVisibility', LP.cache.call_data.called_func,
3807
3808=== modified file 'lib/lp/app/javascript/tests/test_lp.js'
3809--- lib/lp/app/javascript/tests/test_lp.js 2012-10-26 10:00:20 +0000
3810+++ lib/lp/app/javascript/tests/test_lp.js 2019-05-28 13:57:20 +0000
3811@@ -8,17 +8,17 @@
3812
3813 test_get_url_path_with_pillar: function () {
3814 Y.Assert.areEqual(
3815- '/fnord', Y.lp.get_url_path('http://launchpad.dev/fnord'));
3816+ '/fnord', Y.lp.get_url_path('http://launchpad.test/fnord'));
3817 },
3818
3819 test_get_url_path_without_slash: function () {
3820 Y.Assert.areEqual(
3821- '/', Y.lp.get_url_path('http://launchpad.dev'));
3822+ '/', Y.lp.get_url_path('http://launchpad.test'));
3823 },
3824
3825 test_get_url_path_with_double_slash: function () {
3826 Y.Assert.areEqual(
3827- '/fnord', Y.lp.get_url_path('http://launchpad.dev//fnord'));
3828+ '/fnord', Y.lp.get_url_path('http://launchpad.test//fnord'));
3829 }
3830 }));
3831
3832
3833=== modified file 'lib/lp/app/stories/basics/copyright.txt'
3834--- lib/lp/app/stories/basics/copyright.txt 2019-01-05 09:54:44 +0000
3835+++ lib/lp/app/stories/basics/copyright.txt 2019-05-28 13:57:20 +0000
3836@@ -2,14 +2,14 @@
3837
3838 The tour pages.
3839
3840- >>> browser.open('http://launchpad.dev/')
3841+ >>> browser.open('http://launchpad.test/')
3842 >>> browser.getLink('Take the tour').click()
3843 >>> print extract_text(find_tag_by_id(browser.contents, 'footer-navigation'))
3844 Next...&copy; 2004-2019 Canonical Ltd...
3845
3846 The main template.
3847
3848- >>> browser.open('http://launchpad.dev')
3849+ >>> browser.open('http://launchpad.test')
3850 >>> print extract_text(find_tag_by_id(browser.contents, 'footer'))
3851 &copy; 2004-2019 Canonical Ltd.
3852 ...
3853
3854=== modified file 'lib/lp/app/stories/basics/demo-and-lpnet.txt'
3855--- lib/lp/app/stories/basics/demo-and-lpnet.txt 2011-12-29 05:29:36 +0000
3856+++ lib/lp/app/stories/basics/demo-and-lpnet.txt 2019-05-28 13:57:20 +0000
3857@@ -38,7 +38,7 @@
3858
3859 For a 3-0 page:
3860
3861- >>> browser.open('http://launchpad.dev/ubuntu')
3862+ >>> browser.open('http://launchpad.test/ubuntu')
3863 >>> print browser.contents
3864 <...
3865 <style...url(/@@/demo)...</style>
3866@@ -60,7 +60,7 @@
3867
3868 First for a 3-0 page:
3869
3870- >>> browser.open('http://launchpad.dev/ubuntu')
3871+ >>> browser.open('http://launchpad.test/ubuntu')
3872 >>> print extract_text(find_tag_by_id(browser.contents, 'lp-version'))
3873 &bull; r... devmode (Get the code!)
3874 >>> len(find_tags_by_class(browser.contents, 'sitemessage'))
3875
3876=== modified file 'lib/lp/app/stories/basics/marketing.txt'
3877--- lib/lp/app/stories/basics/marketing.txt 2011-05-27 18:27:59 +0000
3878+++ lib/lp/app/stories/basics/marketing.txt 2019-05-28 13:57:20 +0000
3879@@ -2,15 +2,15 @@
3880
3881 From Launchpad's front page, you can access the tour.
3882
3883- >>> browser.open('http://launchpad.dev/')
3884+ >>> browser.open('http://launchpad.test/')
3885 >>> tour_link = browser.getLink('Take the tour')
3886 >>> print tour_link.url
3887- http://launchpad.dev/+tour
3888+ http://launchpad.test/+tour
3889 >>> tour_link.click()
3890 >>> print browser.title
3891 Launchpad tour
3892 >>> print browser.url
3893- http://launchpad.dev/+tour/index
3894+ http://launchpad.test/+tour/index
3895
3896 The tour is circular. Clicking the Next button repeatedly will bring you
3897 back to the tour start.
3898@@ -18,32 +18,32 @@
3899 >>> def take_the_tour(steps_taken=0):
3900 ... browser.getLink(id='btnNext').click()
3901 ... print browser.url
3902- ... if browser.url != 'http://launchpad.dev/+tour/index':
3903+ ... if browser.url != 'http://launchpad.test/+tour/index':
3904 ... if steps_taken >= 20:
3905 ... raise RuntimeError('Never ending tour!')
3906 ... take_the_tour(steps_taken=steps_taken+1)
3907 >>> take_the_tour()
3908- http://launchpad.dev/+tour/bugs
3909- http://launchpad.dev/+tour/branch-hosting-tracking
3910- http://launchpad.dev/+tour/translation
3911- http://launchpad.dev/+tour/community
3912- http://launchpad.dev/+tour/ppa
3913- http://launchpad.dev/+tour/community-support
3914- http://launchpad.dev/+tour/api
3915- http://launchpad.dev/+tour/feature-tracking
3916- http://launchpad.dev/+tour/release-management
3917- http://launchpad.dev/+tour/join-launchpad
3918- http://launchpad.dev/+tour/index
3919+ http://launchpad.test/+tour/bugs
3920+ http://launchpad.test/+tour/branch-hosting-tracking
3921+ http://launchpad.test/+tour/translation
3922+ http://launchpad.test/+tour/community
3923+ http://launchpad.test/+tour/ppa
3924+ http://launchpad.test/+tour/community-support
3925+ http://launchpad.test/+tour/api
3926+ http://launchpad.test/+tour/feature-tracking
3927+ http://launchpad.test/+tour/release-management
3928+ http://launchpad.test/+tour/join-launchpad
3929+ http://launchpad.test/+tour/index
3930
3931 The images from the tour are retrieved relative to +tour.
3932
3933- >>> browser.open('http://launchpad.dev/+tour/images/home/main-image.jpg')
3934- >>> browser.open('http://launchpad.dev/+tour/images/btn-next.png')
3935+ >>> browser.open('http://launchpad.test/+tour/images/home/main-image.jpg')
3936+ >>> browser.open('http://launchpad.test/+tour/images/btn-next.png')
3937
3938 But the source directory isn't available:
3939
3940 >>> browser.open(
3941- ... 'http://launchpad.dev/+tour/source/code-hosting_SVG.svg')
3942+ ... 'http://launchpad.test/+tour/source/code-hosting_SVG.svg')
3943 Traceback (most recent call last):
3944 ...
3945 NotFound:...
3946@@ -54,29 +54,29 @@
3947 Each application used to have an introduction living at +about, this is
3948 now redirected to the relevant tour page.
3949
3950- >>> browser.open('http://launchpad.dev/+about')
3951- >>> print browser.url
3952- http://launchpad.dev/+tour/index
3953-
3954- >>> browser.open('http://code.launchpad.dev/+about')
3955- >>> print browser.url
3956- http://launchpad.dev/+tour/branch-hosting-tracking
3957-
3958- >>> browser.open('http://bugs.launchpad.dev/+about')
3959- >>> print browser.url
3960- http://launchpad.dev/+tour/bugs
3961-
3962- >>> browser.open('http://blueprints.launchpad.dev/+about')
3963- >>> print browser.url
3964- http://launchpad.dev/+tour/feature-tracking
3965-
3966- >>> browser.open('http://translations.launchpad.dev/+about')
3967- >>> print browser.url
3968- http://launchpad.dev/+tour/translation
3969-
3970- >>> browser.open('http://answers.launchpad.dev/+about')
3971- >>> print browser.url
3972- http://launchpad.dev/+tour/community-support
3973+ >>> browser.open('http://launchpad.test/+about')
3974+ >>> print browser.url
3975+ http://launchpad.test/+tour/index
3976+
3977+ >>> browser.open('http://code.launchpad.test/+about')
3978+ >>> print browser.url
3979+ http://launchpad.test/+tour/branch-hosting-tracking
3980+
3981+ >>> browser.open('http://bugs.launchpad.test/+about')
3982+ >>> print browser.url
3983+ http://launchpad.test/+tour/bugs
3984+
3985+ >>> browser.open('http://blueprints.launchpad.test/+about')
3986+ >>> print browser.url
3987+ http://launchpad.test/+tour/feature-tracking
3988+
3989+ >>> browser.open('http://translations.launchpad.test/+about')
3990+ >>> print browser.url
3991+ http://launchpad.test/+tour/translation
3992+
3993+ >>> browser.open('http://answers.launchpad.test/+about')
3994+ >>> print browser.url
3995+ http://launchpad.test/+tour/community-support
3996
3997
3998 == +tour compatibility ==
3999@@ -84,29 +84,29 @@
4000 Similarly, each application has their +tour redirecting to their proper
4001 tour page.
4002
4003- >>> browser.open('http://launchpad.dev/+tour')
4004- >>> print browser.url
4005- http://launchpad.dev/+tour/index
4006-
4007- >>> browser.open('http://code.launchpad.dev/+tour')
4008- >>> print browser.url
4009- http://launchpad.dev/+tour/branch-hosting-tracking
4010-
4011- >>> browser.open('http://bugs.launchpad.dev/+tour')
4012- >>> print browser.url
4013- http://launchpad.dev/+tour/bugs
4014-
4015- >>> browser.open('http://blueprints.launchpad.dev/+tour')
4016- >>> print browser.url
4017- http://launchpad.dev/+tour/feature-tracking
4018-
4019- >>> browser.open('http://translations.launchpad.dev/+tour')
4020- >>> print browser.url
4021- http://launchpad.dev/+tour/translation
4022-
4023- >>> browser.open('http://answers.launchpad.dev/+tour')
4024- >>> print browser.url
4025- http://launchpad.dev/+tour/community-support
4026+ >>> browser.open('http://launchpad.test/+tour')
4027+ >>> print browser.url
4028+ http://launchpad.test/+tour/index
4029+
4030+ >>> browser.open('http://code.launchpad.test/+tour')
4031+ >>> print browser.url
4032+ http://launchpad.test/+tour/branch-hosting-tracking
4033+
4034+ >>> browser.open('http://bugs.launchpad.test/+tour')
4035+ >>> print browser.url
4036+ http://launchpad.test/+tour/bugs
4037+
4038+ >>> browser.open('http://blueprints.launchpad.test/+tour')
4039+ >>> print browser.url
4040+ http://launchpad.test/+tour/feature-tracking
4041+
4042+ >>> browser.open('http://translations.launchpad.test/+tour')
4043+ >>> print browser.url
4044+ http://launchpad.test/+tour/translation
4045+
4046+ >>> browser.open('http://answers.launchpad.test/+tour')
4047+ >>> print browser.url
4048+ http://launchpad.test/+tour/community-support
4049
4050
4051 == +faq compatibility ==
4052@@ -114,25 +114,25 @@
4053 Each application also had a +faq link, that link is also redirected to
4054 the appropriate tour page.
4055
4056- >>> browser.open('http://code.launchpad.dev/+faq')
4057- >>> print browser.url
4058- http://launchpad.dev/+tour/branch-hosting-tracking
4059-
4060- >>> browser.open('http://bugs.launchpad.dev/+faq')
4061- >>> print browser.url
4062- http://launchpad.dev/+tour/bugs
4063-
4064- >>> browser.open('http://blueprints.launchpad.dev/+faq')
4065- >>> print browser.url
4066- http://launchpad.dev/+tour/feature-tracking
4067-
4068- >>> browser.open('http://translations.launchpad.dev/+faq')
4069- >>> print browser.url
4070- http://launchpad.dev/+tour/translation
4071-
4072- >>> browser.open('http://answers.launchpad.dev/+faq')
4073- >>> print browser.url
4074- http://launchpad.dev/+tour/community-support
4075+ >>> browser.open('http://code.launchpad.test/+faq')
4076+ >>> print browser.url
4077+ http://launchpad.test/+tour/branch-hosting-tracking
4078+
4079+ >>> browser.open('http://bugs.launchpad.test/+faq')
4080+ >>> print browser.url
4081+ http://launchpad.test/+tour/bugs
4082+
4083+ >>> browser.open('http://blueprints.launchpad.test/+faq')
4084+ >>> print browser.url
4085+ http://launchpad.test/+tour/feature-tracking
4086+
4087+ >>> browser.open('http://translations.launchpad.test/+faq')
4088+ >>> print browser.url
4089+ http://launchpad.test/+tour/translation
4090+
4091+ >>> browser.open('http://answers.launchpad.test/+faq')
4092+ >>> print browser.url
4093+ http://launchpad.test/+tour/community-support
4094
4095
4096 == Links to tour on application main page ==
4097@@ -143,44 +143,44 @@
4098
4099 === Code ===
4100
4101- >>> browser.open('http://code.launchpad.dev')
4102+ >>> browser.open('http://code.launchpad.test')
4103 >>> tour_link = browser.getLink('Take a tour')
4104 >>> print tour_link.url
4105- http://launchpad.dev/+tour/branch-hosting-tracking
4106+ http://launchpad.test/+tour/branch-hosting-tracking
4107 >>> tour_link.click()
4108
4109
4110 === Bugs ===
4111
4112- >>> browser.open('http://bugs.launchpad.dev')
4113+ >>> browser.open('http://bugs.launchpad.test')
4114 >>> tour_link = browser.getLink('take a tour')
4115 >>> print tour_link.url
4116- http://bugs.launchpad.dev/+tour
4117+ http://bugs.launchpad.test/+tour
4118 >>> tour_link.click()
4119
4120
4121 === Blueprints ===
4122
4123- >>> browser.open('http://blueprints.launchpad.dev')
4124+ >>> browser.open('http://blueprints.launchpad.test')
4125 >>> tour_link = browser.getLink('Take a tour')
4126 >>> print tour_link.url
4127- http://launchpad.dev/+tour/feature-tracking
4128+ http://launchpad.test/+tour/feature-tracking
4129 >>> tour_link.click()
4130
4131
4132 === Translations ===
4133
4134- >>> browser.open('http://translations.launchpad.dev')
4135+ >>> browser.open('http://translations.launchpad.test')
4136 >>> tour_link = browser.getLink('Take a tour')
4137 >>> print tour_link.url
4138- http://launchpad.dev/+tour/translation
4139+ http://launchpad.test/+tour/translation
4140 >>> tour_link.click()
4141
4142
4143 === Answers ===
4144
4145- >>> browser.open('http://answers.launchpad.dev')
4146+ >>> browser.open('http://answers.launchpad.test')
4147 >>> tour_link = browser.getLink('Take a tour')
4148 >>> print tour_link.url
4149- http://launchpad.dev/+tour/community-support
4150+ http://launchpad.test/+tour/community-support
4151 >>> tour_link.click()
4152
4153=== modified file 'lib/lp/app/stories/basics/max-batch-size.txt'
4154--- lib/lp/app/stories/basics/max-batch-size.txt 2011-05-27 18:27:59 +0000
4155+++ lib/lp/app/stories/basics/max-batch-size.txt 2019-05-28 13:57:20 +0000
4156@@ -7,7 +7,7 @@
4157
4158 >>> from zope.testbrowser.testing import Browser
4159 >>> anon_browser = Browser()
4160- >>> anon_browser.open('http://launchpad.dev/projects/+all?start=0&batch=1000')
4161+ >>> anon_browser.open('http://launchpad.test/projects/+all?start=0&batch=1000')
4162 Traceback (most recent call last):
4163 ...
4164 HTTPError: HTTP Error 400: Bad Request
4165
4166=== modified file 'lib/lp/app/stories/basics/notfound-error.txt'
4167--- lib/lp/app/stories/basics/notfound-error.txt 2011-09-26 06:30:07 +0000
4168+++ lib/lp/app/stories/basics/notfound-error.txt 2019-05-28 13:57:20 +0000
4169@@ -9,11 +9,11 @@
4170
4171 >>> page_with_referer = str(http(r"""
4172 ... GET /+fhqwhgads HTTP/1.1
4173- ... Referer: http://launchpad.dev/+about
4174+ ... Referer: http://launchpad.test/+about
4175 ... """))
4176 >>> print page_with_referer
4177 HTTP/1.1 404 Not Found
4178- ...href="http://launchpad.dev/+about"...
4179+ ...href="http://launchpad.test/+about"...
4180
4181 It also contains instructions specific to broken links.
4182
4183
4184=== modified file 'lib/lp/app/stories/basics/notfound-traversals.txt'
4185--- lib/lp/app/stories/basics/notfound-traversals.txt 2016-06-22 03:48:31 +0000
4186+++ lib/lp/app/stories/basics/notfound-traversals.txt 2019-05-28 13:57:20 +0000
4187@@ -4,14 +4,14 @@
4188 instead of a correct 404 page. So we test them to ensure the correct
4189 HTTP status is returned.
4190
4191- >>> def check_not_found(url, host='launchpad.dev'):
4192+ >>> def check_not_found(url, host='launchpad.test'):
4193 ... output = http("GET %s HTTP/1.1\nHost: %s" % (url, host))
4194 ... status = output.getStatus()
4195 ... if status != 404:
4196 ... return "%s returned status %s instead of 404\n\n%s" % (
4197 ... url, status, str(output))
4198
4199- >>> def check_redirect(url, auth=False, host='launchpad.dev', status=303):
4200+ >>> def check_redirect(url, auth=False, host='launchpad.test', status=303):
4201 ... get_cmd = """
4202 ... GET %s HTTP/1.1
4203 ... Host: %s
4204@@ -29,8 +29,8 @@
4205 >>> check_redirect("/feedback", status=301)
4206 >>> check_redirect("/support/", status=301)
4207
4208- >>> check_redirect("/", host='feeds.launchpad.dev', status=301)
4209- >>> check_redirect("/+index", host='feeds.launchpad.dev', status=301)
4210+ >>> check_redirect("/", host='feeds.launchpad.test', status=301)
4211+ >>> check_redirect("/+index", host='feeds.launchpad.test', status=301)
4212
4213 The +translate page in the main host is obsolete so it's now a redirect
4214 to the translations site. This way, we don't break existing links to it.
4215
4216=== modified file 'lib/lp/app/stories/basics/page-request-summaries.txt'
4217--- lib/lp/app/stories/basics/page-request-summaries.txt 2011-12-19 13:20:13 +0000
4218+++ lib/lp/app/stories/basics/page-request-summaries.txt 2019-05-28 13:57:20 +0000
4219@@ -4,7 +4,7 @@
4220 finish rendering -- the authoritative source is in OOPS reports or in the web
4221 app's stderr.
4222
4223- >>> browser.open('http://launchpad.dev/')
4224+ >>> browser.open('http://launchpad.test/')
4225 >>> print browser.contents
4226 <!DOCTYPE...
4227 ...<!--... At least ... actions issued in ... seconds ...-->...
4228@@ -12,7 +12,7 @@
4229 It's available for any page:
4230
4231
4232- >>> browser.open('http://launchpad.dev/~mark/')
4233+ >>> browser.open('http://launchpad.test/~mark/')
4234 >>> print browser.contents
4235 <!DOCTYPE...
4236 ...<!--... At least ... actions issued in ... seconds ...-->...
4237
4238=== modified file 'lib/lp/app/stories/basics/user-requested-oops.txt'
4239--- lib/lp/app/stories/basics/user-requested-oops.txt 2011-12-19 13:20:13 +0000
4240+++ lib/lp/app/stories/basics/user-requested-oops.txt 2019-05-28 13:57:20 +0000
4241@@ -8,7 +8,7 @@
4242 A user can request an oops for a page by using the ++oops++ namespace in any
4243 page traversal.
4244
4245- >>> browser.open("http://launchpad.dev/++oops++")
4246+ >>> browser.open("http://launchpad.test/++oops++")
4247
4248 The OOPS id is put into the comment at the end of the document.
4249
4250@@ -24,7 +24,7 @@
4251
4252 The ++oops++ can be anywhere in the traversal.
4253
4254- >>> browser.open("http://launchpad.dev/gnome-terminal/++oops++/trunk")
4255+ >>> browser.open("http://launchpad.test/gnome-terminal/++oops++/trunk")
4256 >>> (page, summary) = browser.contents.split('</body>')
4257 >>> print summary
4258 ...
4259
4260=== modified file 'lib/lp/app/stories/basics/xx-dbpolicy.txt'
4261--- lib/lp/app/stories/basics/xx-dbpolicy.txt 2013-06-20 05:50:00 +0000
4262+++ lib/lp/app/stories/basics/xx-dbpolicy.txt 2019-05-28 13:57:20 +0000
4263@@ -52,7 +52,7 @@
4264 Read only requests such as GET and HEAD will use the MAIN SLAVE
4265 Store by default.
4266
4267- >>> browser.open('http://launchpad.dev/+whichdb')
4268+ >>> browser.open('http://launchpad.test/+whichdb')
4269 >>> print whichdb(browser)
4270 SLAVE
4271
4272@@ -67,7 +67,7 @@
4273 special dispensation has been made. Without a session, subsequent requests
4274 will then immediately return to using the SLAVE.
4275
4276- >>> browser.open('http://launchpad.dev/+whichdb')
4277+ >>> browser.open('http://launchpad.test/+whichdb')
4278 >>> print whichdb(browser)
4279 SLAVE
4280
4281@@ -82,17 +82,17 @@
4282 >>> browser.getControl('Do Post').click() # POST request
4283 >>> print whichdb(browser)
4284 MASTER
4285- >>> browser.open('http://launchpad.dev/+whichdb') # GET request
4286+ >>> browser.open('http://launchpad.test/+whichdb') # GET request
4287 >>> print whichdb(browser)
4288 MASTER
4289
4290 GET and HEAD requests from other clients are unaffected though
4291 and use the MAIN SLAVE Store by default.
4292
4293- >>> anon_browser.open('http://launchpad.dev/+whichdb')
4294+ >>> anon_browser.open('http://launchpad.test/+whichdb')
4295 >>> print whichdb(anon_browser)
4296 SLAVE
4297- >>> admin_browser.open('http://launchpad.dev/+whichdb')
4298+ >>> admin_browser.open('http://launchpad.test/+whichdb')
4299 >>> print whichdb(admin_browser)
4300 SLAVE
4301
4302@@ -110,13 +110,13 @@
4303 ... return _original_now() + timedelta(minutes=10)
4304
4305
4306- >>> browser.open('http://launchpad.dev/+whichdb')
4307+ >>> browser.open('http://launchpad.test/+whichdb')
4308 >>> print whichdb(browser)
4309 MASTER
4310
4311 >>> dbpolicy._now = _future_now # Install the time machine.
4312
4313- >>> browser.open('http://launchpad.dev/+whichdb')
4314+ >>> browser.open('http://launchpad.test/+whichdb')
4315 >>> print whichdb(browser)
4316 SLAVE
4317
4318@@ -127,12 +127,12 @@
4319 replication oddities from becoming too bad, as well as lightening the load
4320 on the slaves allowing them to catch up.
4321
4322- >>> anon_browser.open('http://launchpad.dev/+whichdb')
4323+ >>> anon_browser.open('http://launchpad.test/+whichdb')
4324 >>> print whichdb(anon_browser)
4325 SLAVE
4326
4327 >>> dbpolicy._test_lag = timedelta(minutes=10)
4328- >>> anon_browser.open('http://launchpad.dev/+whichdb')
4329+ >>> anon_browser.open('http://launchpad.test/+whichdb')
4330 >>> print whichdb(anon_browser)
4331 MASTER
4332 >>> dbpolicy._test_lag = None
4333@@ -148,24 +148,24 @@
4334 >>> anon_browser.raiseHttpErrors = False
4335
4336 # Confirm requests are going to the SLAVE
4337- >>> anon_browser.open('http://launchpad.dev/+whichdb')
4338+ >>> anon_browser.open('http://launchpad.test/+whichdb')
4339 >>> print whichdb(anon_browser)
4340 SLAVE
4341
4342 # The slave database contains no data, but we don't get
4343 # a 404 page - the request is retried against the MASTER.
4344- >>> anon_browser.open('http://launchpad.dev/~stub')
4345+ >>> anon_browser.open('http://launchpad.test/~stub')
4346 >>> anon_browser.headers['Status']
4347 '200 Ok'
4348
4349 # 404s are still returned though if the data doesn't exist in the
4350 # MASTER database either.
4351- >>> anon_browser.open('http://launchpad.dev/~does-not-exist')
4352+ >>> anon_browser.open('http://launchpad.test/~does-not-exist')
4353 >>> anon_browser.headers['Status']
4354 '404 Not Found'
4355
4356 # This session is still using the SLAVE though by default.
4357- >>> anon_browser.open('http://launchpad.dev/+whichdb')
4358+ >>> anon_browser.open('http://launchpad.test/+whichdb')
4359 >>> print whichdb(anon_browser)
4360 SLAVE
4361
4362
4363=== modified file 'lib/lp/app/stories/basics/xx-launchpad-statistics.txt'
4364--- lib/lp/app/stories/basics/xx-launchpad-statistics.txt 2011-12-19 13:20:13 +0000
4365+++ lib/lp/app/stories/basics/xx-launchpad-statistics.txt 2019-05-28 13:57:20 +0000
4366@@ -2,7 +2,7 @@
4367 We also have the special Launchpad Statistics summary page. This is only
4368 acessible to launchpad Admins:
4369
4370- >>> user_browser.open('http://launchpad.dev/+statistics')
4371+ >>> user_browser.open('http://launchpad.test/+statistics')
4372 Traceback (most recent call last):
4373 ...
4374 Unauthorized:...
4375@@ -10,7 +10,7 @@
4376
4377 When we login as an admin, we can see all the stats listed:
4378
4379- >>> admin_browser.open('http://launchpad.dev/+statistics/')
4380+ >>> admin_browser.open('http://launchpad.test/+statistics/')
4381 >>> print admin_browser.title
4382 Launchpad statistics
4383 >>> 'answered_question_count' in admin_browser.contents
4384
4385=== modified file 'lib/lp/app/stories/basics/xx-lowercase-redirection.txt'
4386--- lib/lp/app/stories/basics/xx-lowercase-redirection.txt 2013-04-11 01:27:33 +0000
4387+++ lib/lp/app/stories/basics/xx-lowercase-redirection.txt 2019-05-28 13:57:20 +0000
4388@@ -3,34 +3,34 @@
4389 When someone visits a page such as http://launchpad.net/jOkOshEr
4390 launchpad does a permanent redirect to the lowercase path:
4391
4392- >>> anon_browser.open('http://launchpad.dev/jOkOshEr')
4393+ >>> anon_browser.open('http://launchpad.test/jOkOshEr')
4394 >>> print anon_browser.url
4395- http://launchpad.dev/jokosher
4396+ http://launchpad.test/jokosher
4397
4398 The redirection also works for URLs below the root, and with query
4399 parameters:
4400
4401- >>> anon_browser.open('http://launchpad.dev/UbUntU/+search?text=foo')
4402+ >>> anon_browser.open('http://launchpad.test/UbUntU/+search?text=foo')
4403 >>> print anon_browser.url
4404- http://launchpad.dev/ubuntu/+search?text=foo
4405+ http://launchpad.test/ubuntu/+search?text=foo
4406
4407 The redirection also works for other Launchpad subdomains:
4408
4409 >>> anon_browser.open(
4410- ... 'http://bugs.launchpad.dev/jOkOshEr/+bugs?orderby=-datecreated')
4411+ ... 'http://bugs.launchpad.test/jOkOshEr/+bugs?orderby=-datecreated')
4412 >>> print anon_browser.url
4413- http://bugs.launchpad.dev/jokosher/+bugs?orderby=-datecreated
4414+ http://bugs.launchpad.test/jokosher/+bugs?orderby=-datecreated
4415
4416- >>> anon_browser.open('http://answers.launchpad.dev/~nAmE12')
4417+ >>> anon_browser.open('http://answers.launchpad.test/~nAmE12')
4418 >>> print anon_browser.url
4419- http://answers.launchpad.dev/~name12
4420+ http://answers.launchpad.test/~name12
4421
4422 When doing a POST to an invalid URL, we get an error:
4423
4424 >>> print http(r"""
4425 ... POST /UbUntU/hoary/+source/evolution/+pots/evolution-2.2/es/+translate HTTP/1.1
4426- ... Host: translations.launchpad.dev
4427- ... Referer: https://launchpad.dev/
4428+ ... Host: translations.launchpad.test
4429+ ... Referer: https://launchpad.test/
4430 ... """)
4431 HTTP/1.1 500 Internal Server Error
4432 ...
4433
4434=== modified file 'lib/lp/app/stories/basics/xx-offsite-form-post.txt'
4435--- lib/lp/app/stories/basics/xx-offsite-form-post.txt 2013-04-11 01:27:33 +0000
4436+++ lib/lp/app/stories/basics/xx-offsite-form-post.txt 2019-05-28 13:57:20 +0000
4437@@ -21,7 +21,7 @@
4438 "evil.people.com", the post fails:
4439
4440 >>> browser = setupBrowserWithReferrer('http://evil.people.com/')
4441- >>> browser.open('http://launchpad.dev/people/+newteam')
4442+ >>> browser.open('http://launchpad.test/people/+newteam')
4443 >>> browser.getControl('Name', index=0).value = 'team1'
4444 >>> browser.getControl('Display Name').value = 'Team 1'
4445 >>> browser.getControl('Create').click()
4446@@ -33,7 +33,7 @@
4447 Similarly, posting with a garbage referer fails:
4448
4449 >>> browser = setupBrowserWithReferrer('not a url')
4450- >>> browser.open('http://launchpad.dev/people/+newteam')
4451+ >>> browser.open('http://launchpad.test/people/+newteam')
4452 >>> browser.getControl('Name', index=0).value = 'team2'
4453 >>> browser.getControl('Display Name').value = 'Team 2'
4454 >>> browser.getControl('Create').click()
4455@@ -45,7 +45,7 @@
4456 It also fails if there is no referrer.
4457
4458 >>> browser = setupBrowserWithReferrer(None)
4459- >>> browser.open('http://launchpad.dev/people/+newteam')
4460+ >>> browser.open('http://launchpad.test/people/+newteam')
4461 >>> browser.getControl('Name', index=0).value = 'team3'
4462 >>> browser.getControl('Display Name').value = 'Team 3'
4463 >>> browser.getControl('Create').click()
4464@@ -58,7 +58,7 @@
4465 present a hopefully helpful error message.
4466
4467 >>> browser.handleErrors = True
4468- >>> browser.open('http://launchpad.dev/people/+newteam')
4469+ >>> browser.open('http://launchpad.test/people/+newteam')
4470 >>> browser.getControl('Name', index=0).value = 'team3'
4471 >>> browser.getControl('Display Name').value = 'Team 3'
4472 >>> browser.getControl('Create').click()
4473@@ -79,12 +79,12 @@
4474
4475 To support apport, we allow it for +storeblob.
4476
4477- >>> browser.post('http://launchpad.dev/+storeblob', 'x=1')
4478+ >>> browser.post('http://launchpad.test/+storeblob', 'x=1')
4479
4480 Similary, we exempt the URL /+hwdb/+submit in order to allow checkbox
4481 to submit HWDB reports.
4482
4483- >>> browser.post('http://launchpad.dev/+hwdb/+submit', 'x=1')
4484+ >>> browser.post('http://launchpad.test/+hwdb/+submit', 'x=1')
4485
4486 To support old versions of launchpadlib, we also let POST requests
4487 without a REFERER header go through to +request-token and
4488@@ -92,13 +92,13 @@
4489
4490 >>> body = ('oauth_signature=%26&oauth_consumer_key=test'
4491 ... '&oauth_signature_method=PLAINTEXT')
4492- >>> browser.post('http://launchpad.dev/+request-token', body)
4493+ >>> browser.post('http://launchpad.test/+request-token', body)
4494
4495 This request results in a response code of 401, but if there was no
4496 exception for +access-token, it would result in an
4497 OffsiteFormPostError.
4498
4499- >>> browser.post('http://launchpad.dev/+access-token', 'x=1')
4500+ >>> browser.post('http://launchpad.test/+access-token', 'x=1')
4501 Traceback (most recent call last):
4502 ...
4503 HTTPError: HTTP Error 401: Unauthorized
4504@@ -112,12 +112,12 @@
4505 >>> allvhosts._hostnames.add('bzr.dev')
4506
4507 >>> browser = setupBrowserWithReferrer('http://bzr.dev')
4508- >>> browser.open('http://launchpad.dev/people/+newteam')
4509+ >>> browser.open('http://launchpad.test/people/+newteam')
4510 >>> browser.getControl('Name', index=0).value = 'team4'
4511 >>> browser.getControl('Display Name').value = 'Team 4'
4512 >>> browser.getControl('Create').click()
4513 >>> print browser.url
4514- http://launchpad.dev/~team4
4515+ http://launchpad.test/~team4
4516
4517 # Now restore our site's hostname.
4518 >>> allvhosts._hostnames.remove('bzr.dev')
4519@@ -133,13 +133,13 @@
4520 >>> browser = setupBrowserWithReferrer('http://evil.people.com/')
4521 >>> no_referrer_browser = setupBrowserWithReferrer(None)
4522
4523- >>> browser.post('http://launchpad.dev/api/devel/people', 'ws.op=foo&x=1')
4524+ >>> browser.post('http://launchpad.test/api/devel/people', 'ws.op=foo&x=1')
4525 Traceback (most recent call last):
4526 ...
4527 OffsiteFormPostError: http://evil.people.com/
4528
4529 >>> no_referrer_browser.post(
4530- ... 'http://launchpad.dev/api/devel/people', 'ws.op=foo&x=1')
4531+ ... 'http://launchpad.test/api/devel/people', 'ws.op=foo&x=1')
4532 Traceback (most recent call last):
4533 ...
4534 NoReferrerError: No value for REFERER header
4535@@ -148,13 +148,13 @@
4536 though it were signed with OAuth.
4537
4538 >>> browser.post(
4539- ... 'http://launchpad.dev/', 'oauth_consumer_key=foo&oauth_token=bar')
4540+ ... 'http://launchpad.test/', 'oauth_consumer_key=foo&oauth_token=bar')
4541 Traceback (most recent call last):
4542 ...
4543 OffsiteFormPostError: http://evil.people.com/
4544
4545 >>> no_referrer_browser.post(
4546- ... 'http://launchpad.dev/', 'oauth_consumer_key=foo&oauth_token=bar')
4547+ ... 'http://launchpad.test/', 'oauth_consumer_key=foo&oauth_token=bar')
4548 Traceback (most recent call last):
4549 ...
4550 NoReferrerError: No value for REFERER header
4551@@ -173,7 +173,7 @@
4552 But the browser-accessible API ignores OAuth credentials altogether.
4553
4554 >>> browser.post(
4555- ... 'http://launchpad.dev/api/devel/projects', sig)
4556+ ... 'http://launchpad.test/api/devel/projects', sig)
4557 Traceback (most recent call last):
4558 ...
4559 OffsiteFormPostError: http://evil.people.com/
4560@@ -181,7 +181,7 @@
4561 If you go through the 'api' vhost, the signed request will be
4562 processed despite the bogus referrer, but...
4563
4564- >>> browser.post('http://api.launchpad.dev/devel/projects', sig)
4565+ >>> browser.post('http://api.launchpad.test/devel/projects', sig)
4566 Traceback (most recent call last):
4567 ...
4568 NoneError: None isn't acceptable as a value for Product.owner
4569
4570=== modified file 'lib/lp/app/stories/basics/xx-opstats.txt'
4571--- lib/lp/app/stories/basics/xx-opstats.txt 2013-06-20 05:50:00 +0000
4572+++ lib/lp/app/stories/basics/xx-opstats.txt 2019-05-28 13:57:20 +0000
4573@@ -7,7 +7,7 @@
4574 >>> import xmlrpclib
4575 >>> from lp.testing.xmlrpc import XMLRPCTestTransport
4576 >>> lp_xmlrpc = xmlrpclib.ServerProxy(
4577- ... 'http://xmlrpc.launchpad.dev/+opstats',
4578+ ... 'http://xmlrpc.launchpad.test/+opstats',
4579 ... transport=XMLRPCTestTransport()
4580 ... )
4581
4582@@ -64,7 +64,7 @@
4583 Number of HTTP requests and success codes
4584 -----------------------------------------
4585
4586- >>> output = http("GET / HTTP/1.1\nHost: bugs.launchpad.dev\n")
4587+ >>> output = http("GET / HTTP/1.1\nHost: bugs.launchpad.test\n")
4588 >>> output.getStatus()
4589 200
4590 >>> report()
4591@@ -80,7 +80,7 @@
4592 information is not found in there, so a retry is attempted against the
4593 master DB in case the information is missing due to replication lag.
4594
4595- >>> output = http("GET http://launchpad.dev/non-existant HTTP/1.1\n")
4596+ >>> output = http("GET http://launchpad.test/non-existant HTTP/1.1\n")
4597 >>> output.getStatus()
4598 404
4599 >>> report()
4600@@ -105,7 +105,7 @@
4601 ... raise Exception('Oops')
4602 ...
4603 >>> ztapi.browserView(None, "error-test", ErrorView)
4604- >>> output = http("GET /error-test HTTP/1.1\nHost: launchpad.dev\n")
4605+ >>> output = http("GET /error-test HTTP/1.1\nHost: launchpad.test\n")
4606 >>> output.getStatus()
4607 500
4608 >>> report()
4609@@ -122,7 +122,7 @@
4610 >>> from textwrap import dedent
4611 >>> output = http(dedent("""\
4612 ... GET /error-test HTTP/1.1
4613- ... Host: launchpad.dev
4614+ ... Host: launchpad.test
4615 ... User-Agent: Mozilla/42.0
4616 ... """))
4617 >>> output.getStatus()
4618@@ -203,9 +203,9 @@
4619
4620 Stats can also be retrieved via HTTP in cricket-graph format:
4621
4622- >>> output = http("GET / HTTP/1.1\nHost: launchpad.dev\n")
4623- >>> output = http("GET / HTTP/1.1\nHost: launchpad.dev\n")
4624- >>> print http("GET /+opstats HTTP/1.1\nHost: launchpad.dev\n")
4625+ >>> output = http("GET / HTTP/1.1\nHost: launchpad.test\n")
4626+ >>> output = http("GET / HTTP/1.1\nHost: launchpad.test\n")
4627+ >>> print http("GET /+opstats HTTP/1.1\nHost: launchpad.test\n")
4628 HTTP/1.1 200 Ok
4629 ...
4630 Content-Type: text/plain; charset=US-ASCII
4631@@ -258,7 +258,7 @@
4632
4633 We can still access the opstats page.
4634
4635- >>> print http("GET /+opstats HTTP/1.1\nHost: launchpad.dev\n")
4636+ >>> print http("GET /+opstats HTTP/1.1\nHost: launchpad.test\n")
4637 HTTP/1.1 200 Ok
4638 ...
4639 Content-Type: text/plain; charset=US-ASCII
4640@@ -270,7 +270,7 @@
4641
4642 >>> print http(r"""
4643 ... GET /+opstats HTTP/1.1
4644- ... Host: launchpad.dev
4645+ ... Host: launchpad.test
4646 ... Authorization: Basic Zm9vLmJhckBjYW5vbmljYWwuY29tOnRlc3Q=
4647 ... """)
4648 HTTP/1.1 200 Ok
4649
4650=== modified file 'lib/lp/app/stories/basics/xx-pagetest-logging.txt'
4651--- lib/lp/app/stories/basics/xx-pagetest-logging.txt 2013-04-11 01:27:33 +0000
4652+++ lib/lp/app/stories/basics/xx-pagetest-logging.txt 2019-05-28 13:57:20 +0000
4653@@ -3,9 +3,9 @@
4654 When running our pagetests we log all HTTP requests into the
4655 pagetests-access.log file.
4656
4657- >>> browser.open('http://launchpad.dev/')
4658+ >>> browser.open('http://launchpad.test/')
4659
4660 >>> log = open('logs/pagetests-access.log').read()
4661 >>> print log.strip().split('\n')[-1]
4662- 127.0.0.88 - ... "launchpad.dev" [...] "GET / HTTP/1.1" 200 ...
4663+ 127.0.0.88 - ... "launchpad.test" [...] "GET / HTTP/1.1" 200 ...
4664 "Anonymous" "RootObject:index.html" "" "Python-urllib/..."
4665
4666=== modified file 'lib/lp/app/stories/basics/xx-preferred-charsets.txt'
4667--- lib/lp/app/stories/basics/xx-preferred-charsets.txt 2016-01-26 15:47:37 +0000
4668+++ lib/lp/app/stories/basics/xx-preferred-charsets.txt 2019-05-28 13:57:20 +0000
4669@@ -3,7 +3,7 @@
4670 that it doesn't accept it.
4671
4672 >>> anon_browser.addHeader('Accept-Charset', 'iso8859-1')
4673- >>> anon_browser.open('http://launchpad.dev/')
4674+ >>> anon_browser.open('http://launchpad.test/')
4675 >>> anon_browser.headers['Content-Type']
4676 'text/html;charset=utf-8'
4677
4678
4679=== modified file 'lib/lp/app/stories/form/xx-form-layout.txt'
4680--- lib/lp/app/stories/form/xx-form-layout.txt 2012-08-15 22:01:39 +0000
4681+++ lib/lp/app/stories/form/xx-form-layout.txt 2019-05-28 13:57:20 +0000
4682@@ -11,7 +11,7 @@
4683
4684 The new team form contains an example of a normal text widget.
4685
4686- >>> user_browser.open('http://launchpad.dev/people/+newteam')
4687+ >>> user_browser.open('http://launchpad.test/people/+newteam')
4688 >>> content = find_main_content(user_browser.contents)
4689 >>> print content
4690 <...
4691@@ -53,7 +53,7 @@
4692 Checkboxes have their label to the right. Let's look at one example.
4693
4694 >>> admin_browser.open(
4695- ... 'http://launchpad.dev/firefox/+review-license')
4696+ ... 'http://launchpad.test/firefox/+review-license')
4697 >>> print find_tag_by_id(admin_browser.contents, 'launchpad-form-widgets')
4698 <...
4699 <tr>
4700@@ -74,7 +74,7 @@
4701 just the form content to be rendered for any URL corresponding to an
4702 LPFormView:
4703
4704- >>> admin_browser.open('http://launchpad.dev/evolution/+edit/++form++')
4705+ >>> admin_browser.open('http://launchpad.test/evolution/+edit/++form++')
4706 >>> print admin_browser.contents
4707 <div...
4708 <table class="form" id="launchpad-form-widgets">
4709@@ -86,7 +86,7 @@
4710 >>> cprov_browser = setupBrowser(
4711 ... auth='Basic celso.providelo@canonical.com:test')
4712 >>> cprov_browser.open(
4713- ... 'http://launchpad.dev/~cprov/+archive/ppa/+edit/++form++')
4714+ ... 'http://launchpad.test/~cprov/+archive/ppa/+edit/++form++')
4715 >>> print cprov_browser.contents
4716 <div...
4717 <table class="form" id="launchpad-form-widgets">
4718@@ -97,7 +97,7 @@
4719 display forms.
4720
4721 >>> cprov_browser.open(
4722- ... 'http://launchpad.dev/~cprov/+editsshkeys/++form++')
4723+ ... 'http://launchpad.test/~cprov/+editsshkeys/++form++')
4724 Traceback (most recent call last):
4725 ...
4726 NotFound...
4727@@ -105,7 +105,7 @@
4728 Nor will it allow unauthorized access to data that it should not present.
4729
4730 >>> browser.open(
4731- ... 'http://launchpad.dev/~cprov/+archive/ppa/+edit/++form++')
4732+ ... 'http://launchpad.test/~cprov/+archive/ppa/+edit/++form++')
4733 Traceback (most recent call last):
4734 ...
4735 Unauthorized...
4736
4737=== modified file 'lib/lp/app/stories/launchpad-root/front-pages.txt'
4738--- lib/lp/app/stories/launchpad-root/front-pages.txt 2012-08-14 14:30:59 +0000
4739+++ lib/lp/app/stories/launchpad-root/front-pages.txt 2019-05-28 13:57:20 +0000
4740@@ -5,9 +5,9 @@
4741
4742 >>> from lp.services.features.testing import FeatureFixture
4743 >>> with FeatureFixture({"app.root_blog.enabled": True}):
4744- ... browser.open('http://launchpad.dev/')
4745+ ... browser.open('http://launchpad.test/')
4746 >>> browser.url
4747- 'http://launchpad.dev/'
4748+ 'http://launchpad.test/'
4749
4750 It contains a string which our IS uses to determine whether or not
4751 Launchpad is alive:
4752@@ -22,7 +22,7 @@
4753
4754 >>> code_link = browser.getLink(url='code')
4755 >>> code_link.url
4756- 'http://code.launchpad.dev/'
4757+ 'http://code.launchpad.test/'
4758
4759 It also includes a search form...
4760
4761@@ -60,40 +60,40 @@
4762 The homepage looks different when the user is logged in:
4763
4764 >>> user_browser = setupBrowser(auth="Basic test@canonical.com:test")
4765- >>> user_browser.open('http://launchpad.dev/')
4766+ >>> user_browser.open('http://launchpad.test/')
4767
4768 Now there are links to create projects and teams:
4769
4770 >>> project_link = user_browser.getLink(url='/projects')
4771 >>> project_link.url
4772- 'http://launchpad.dev/projects/+new'
4773+ 'http://launchpad.test/projects/+new'
4774
4775 >>> people_link = user_browser.getLink(url='/people')
4776 >>> people_link.url
4777- 'http://launchpad.dev/people/+newteam'
4778+ 'http://launchpad.test/people/+newteam'
4779
4780
4781 The front pages for the other applications, however, do have
4782 application tabs. On these pages, the tab normally named "Overview"
4783 is labelled "Launchpad Home" to make clear where it goes.
4784
4785- >>> anon_browser.open('http://code.launchpad.dev/')
4786+ >>> anon_browser.open('http://code.launchpad.test/')
4787 >>> print_location_apps(anon_browser.contents)
4788- * Launchpad Home - http://launchpad.dev/
4789- * Code (selected) - http://code.launchpad.dev/
4790- * Bugs - http://bugs.launchpad.dev/
4791- * Blueprints - http://blueprints.launchpad.dev/
4792- * Translations - http://translations.launchpad.dev/
4793- * Answers - http://answers.launchpad.dev/
4794+ * Launchpad Home - http://launchpad.test/
4795+ * Code (selected) - http://code.launchpad.test/
4796+ * Bugs - http://bugs.launchpad.test/
4797+ * Blueprints - http://blueprints.launchpad.test/
4798+ * Translations - http://translations.launchpad.test/
4799+ * Answers - http://answers.launchpad.test/
4800
4801- >>> user_browser.open('http://answers.launchpad.dev/')
4802+ >>> user_browser.open('http://answers.launchpad.test/')
4803 >>> print_location_apps(user_browser.contents)
4804- * Launchpad Home - http://launchpad.dev/
4805- * Code - http://code.launchpad.dev/
4806- * Bugs - http://bugs.launchpad.dev/
4807- * Blueprints - http://blueprints.launchpad.dev/
4808- * Translations - http://translations.launchpad.dev/
4809- * Answers (selected) - http://answers.launchpad.dev/
4810+ * Launchpad Home - http://launchpad.test/
4811+ * Code - http://code.launchpad.test/
4812+ * Bugs - http://bugs.launchpad.test/
4813+ * Blueprints - http://blueprints.launchpad.test/
4814+ * Translations - http://translations.launchpad.test/
4815+ * Answers (selected) - http://answers.launchpad.test/
4816
4817 The footer of those pages contains the link to the front page, tour
4818 and guide:
4819
4820=== modified file 'lib/lp/app/stories/launchpad-root/xx-featuredprojects.txt'
4821--- lib/lp/app/stories/launchpad-root/xx-featuredprojects.txt 2012-06-11 00:47:38 +0000
4822+++ lib/lp/app/stories/launchpad-root/xx-featuredprojects.txt 2019-05-28 13:57:20 +0000
4823@@ -23,7 +23,7 @@
4824 Anonymous users will see the list of featured projects with links to the
4825 projects' pages in Launchpad. The "project of the day" is listed separately.
4826
4827- >>> anon_browser.open('http://launchpad.dev/')
4828+ >>> anon_browser.open('http://launchpad.test/')
4829 >>> featured = find_tag_by_id(anon_browser.contents, 'homepage-featured')
4830 >>> print extract_text(featured.h2)
4831 Featured projects
4832@@ -55,7 +55,7 @@
4833
4834 A user without privileges cannot see the administration link, either:
4835
4836- >>> user_browser.open('http://launchpad.dev/')
4837+ >>> user_browser.open('http://launchpad.test/')
4838 >>> user_browser.getLink(MANAGE_LINK)
4839 Traceback (most recent call last):
4840 ...
4841@@ -63,14 +63,14 @@
4842
4843 But Foo Bar, who is an administrator, can see the management link:
4844
4845- >>> admin_browser.open('http://launchpad.dev/')
4846+ >>> admin_browser.open('http://launchpad.test/')
4847 >>> admin_browser.getLink(MANAGE_LINK).click()
4848 >>> admin_browser.url
4849- 'http://launchpad.dev/+featuredprojects'
4850+ 'http://launchpad.test/+featuredprojects'
4851
4852 No Privilege persons is denied access to this page:
4853
4854- >>> user_browser.open('http://launchpad.dev/+featuredprojects')
4855+ >>> user_browser.open('http://launchpad.test/+featuredprojects')
4856 Traceback (most recent call last):
4857 ...
4858 Unauthorized: ...
4859@@ -81,7 +81,7 @@
4860 >>> admin_browser.getControl('Add project').value = 'apache'
4861 >>> admin_browser.getControl('Update').click()
4862 >>> admin_browser.url
4863- 'http://launchpad.dev/'
4864+ 'http://launchpad.test/'
4865 >>> featured = find_tag_by_id(admin_browser.contents, 'homepage-featured')
4866 >>> 'Apache' in extract_text(featured)
4867 True
4868@@ -90,7 +90,7 @@
4869 that Apache has been added. Because the list has changed, a different project
4870 is now at index '4' and is therefore displayed as the top project:
4871
4872- >>> anon_browser.open('http://launchpad.dev/')
4873+ >>> anon_browser.open('http://launchpad.test/')
4874 >>> featured = find_tag_by_id(anon_browser.contents, 'homepage-featured')
4875 >>> top_project = featured.find('', 'featured-project-top')
4876 >>> print extract_text(top_project.h3)
4877@@ -115,7 +115,7 @@
4878 >>> admin_browser.getControl('Apache').click()
4879 >>> admin_browser.getControl('Update').click()
4880 >>> admin_browser.url
4881- 'http://launchpad.dev/'
4882+ 'http://launchpad.test/'
4883 >>> featured = find_tag_by_id(admin_browser.contents, 'homepage-featured')
4884 >>> 'Apache' in extract_text(featured)
4885 False
4886@@ -123,7 +123,7 @@
4887 Just to be certain, we will iterate the list as we did before and see
4888 that Apache has been removed:
4889
4890- >>> anon_browser.open('http://launchpad.dev/')
4891+ >>> anon_browser.open('http://launchpad.test/')
4892 >>> featured = find_tag_by_id(anon_browser.contents, 'homepage-featured')
4893 >>> for link in featured.findAll('a'):
4894 ... print extract_text(link)
4895
4896=== modified file 'lib/lp/app/stories/launchpad-search/site-search.txt'
4897--- lib/lp/app/stories/launchpad-search/site-search.txt 2018-04-13 20:47:03 +0000
4898+++ lib/lp/app/stories/launchpad-search/site-search.txt 2019-05-28 13:57:20 +0000
4899@@ -27,10 +27,10 @@
4900
4901 The search form is available on almost every Launchpad page.
4902
4903- >>> anon_browser.open('http://launchpad.dev/ubuntu')
4904+ >>> anon_browser.open('http://launchpad.test/ubuntu')
4905 >>> search_for('test1')
4906 >>> print anon_browser.url
4907- http://launchpad.dev/+search?field.text=test1
4908+ http://launchpad.test/+search?field.text=test1
4909
4910 But the search results page has its own search form, so the global one
4911 is omitted.
4912@@ -43,7 +43,7 @@
4913 If by chance someone ends up at /+search with no search parameters, they
4914 get an explanation of the search function.
4915
4916- >>> anon_browser.open('http://launchpad.dev/+search')
4917+ >>> anon_browser.open('http://launchpad.test/+search')
4918 >>> print anon_browser.title
4919 Search Launchpad
4920
4921@@ -258,7 +258,7 @@
4922 <p id="no-page-service">
4923 The page search service was not available when this search was
4924 performed.
4925- <a href="http://launchpad.dev/+search?field.text=gnomebaker">Search
4926+ <a href="http://launchpad.test/+search?field.text=gnomebaker">Search
4927 again</a> to see the matching pages.
4928 </p>
4929
4930@@ -302,19 +302,19 @@
4931 Most pages have the global search form in them. Any user can enter terms
4932 in the page they are viewing and submit the form to see the results.
4933
4934- >>> anon_browser.open('http://bugs.launchpad.dev/firefox')
4935+ >>> anon_browser.open('http://bugs.launchpad.test/firefox')
4936 >>> print anon_browser.title
4937 Bugs : Mozilla Firefox
4938
4939 >>> print anon_browser.url
4940- http://bugs.launchpad.dev/firefox
4941+ http://bugs.launchpad.test/firefox
4942
4943 >>> search_for('mozilla')
4944 >>> print anon_browser.title
4945 Pages matching "mozilla" in Launchpad
4946
4947 >>> print anon_browser.url
4948- http://launchpad.dev/+search?...
4949+ http://launchpad.test/+search?...
4950
4951 >>> print_search_results()
4952 Exact matches
4953@@ -341,7 +341,7 @@
4954 ... visibility=PersonVisibility.PRIVATE)
4955 >>> logout()
4956 >>> browser = setupBrowser(auth='Basic salgado@ubuntu.com:test')
4957- >>> browser.open('http://launchpad.dev/+search')
4958+ >>> browser.open('http://launchpad.test/+search')
4959 >>> search_for('Private Benjamin', browser=browser)
4960 >>> print_search_results(browser.contents)
4961 Exact matches
4962@@ -352,7 +352,7 @@
4963 A user who is not in the private team will not see the team listed in
4964 the results.
4965
4966- >>> user_browser.open('http://launchpad.dev/+search')
4967+ >>> user_browser.open('http://launchpad.test/+search')
4968 >>> search_for('Private Benjamin', browser=user_browser)
4969 >>> print_search_results(user_browser.contents)
4970
4971
4972=== modified file 'lib/lp/app/tests/test_services.py'
4973--- lib/lp/app/tests/test_services.py 2017-05-08 11:38:20 +0000
4974+++ lib/lp/app/tests/test_services.py 2019-05-28 13:57:20 +0000
4975@@ -44,7 +44,7 @@
4976 fake_service = FakeService()
4977 self.registerUtility(fake_service, IService, "fake")
4978 context, view, request = test_traverse(
4979- 'https://launchpad.dev/api/devel/+services/fake')
4980+ 'https://launchpad.test/api/devel/+services/fake')
4981 self.assertEqual(getUtility(IServiceFactory), context)
4982 self.assertEqual(fake_service, view)
4983
4984@@ -53,11 +53,11 @@
4985 self.useFixture(FakeLogger())
4986 self.assertRaises(
4987 NotFound, self.getUserBrowser,
4988- 'https://launchpad.dev/api/devel/+services')
4989+ 'https://launchpad.test/api/devel/+services')
4990
4991 def test_invalid_service(self):
4992 # Test that traversal an invalid service name fails.
4993 self.useFixture(FakeLogger())
4994 self.assertRaises(
4995 NotFound, self.getUserBrowser,
4996- 'https://launchpad.dev/api/devel/+services/invalid')
4997+ 'https://launchpad.test/api/devel/+services/invalid')
4998
4999=== modified file 'lib/lp/app/tests/test_tales.py'
5000--- lib/lp/app/tests/test_tales.py 2018-01-02 16:10:26 +0000
The diff has been truncated for viewing.