From ef0179102ea5320b19bfc05d0d27b1ccca8b2b04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Luis=20Cano=20Rodr=C3=ADguez?= Date: Thu, 16 Sep 2021 14:14:14 +0200 Subject: [PATCH 1/5] Use tutorial for onboarding --- readthedocs/templates/projects/onboard_import.html | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/readthedocs/templates/projects/onboard_import.html b/readthedocs/templates/projects/onboard_import.html index 9d622810749..af2c74d5ca4 100644 --- a/readthedocs/templates/projects/onboard_import.html +++ b/readthedocs/templates/projects/onboard_import.html @@ -4,20 +4,21 @@

{% trans "Ready to share your documentation" %}{% if request.user.first_name %}, {{ request.user.first_name }}{% endif %}?

- {% with getting_started_url="https://docs.readthedocs.io/page/intro/getting-started-with-sphinx.html" %} + {% with tutorial_url="https://docs.readthedocs.io/page/tutorial/" template_project_url="https://github.com/readthedocs/tutorial-template/" %}

{% blocktrans trimmed %} You don't have any projects yet, but you can start building documentation by importing one. Not sure how to start documenting your project? - Check out the Getting Started Guide to learn how. + Check out the Tutorial to learn how. {% endblocktrans %}

- {% url "projects_import_demo" as import_demo_url %} + {% url "projects_import" as projects_import_url %} {% blocktrans trimmed %} - Want to try a demo? Import our own demo project. + In a hurry? Fork our template project on Github, + and import it. {% endblocktrans %}

From 1a0c66efa5c84fa2163c8019b3bd74cbdc86f604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Luis=20Cano=20Rodr=C3=ADguez?= Date: Thu, 16 Sep 2021 14:16:53 +0200 Subject: [PATCH 2/5] Remove demo code --- readthedocs/projects/backends/views.py | 6 --- readthedocs/projects/urls/private.py | 6 +-- readthedocs/projects/views/private.py | 66 -------------------------- 3 files changed, 1 insertion(+), 77 deletions(-) diff --git a/readthedocs/projects/backends/views.py b/readthedocs/projects/backends/views.py index ebae2d8b173..e95abc4f1a9 100644 --- a/readthedocs/projects/backends/views.py +++ b/readthedocs/projects/backends/views.py @@ -15,9 +15,3 @@ class ImportWizardView(SettingsOverrideObject): _default_class = private.ImportWizardView _override_setting = 'PROJECT_IMPORT_VIEW' - - -# Project demo import -class ImportDemoView(SettingsOverrideObject): - _default_class = private.ImportDemoView - _override_setting = 'PROJECT_IMPORT_DEMO_VIEW' diff --git a/readthedocs/projects/urls/private.py b/readthedocs/projects/urls/private.py index deee3e399e4..e584e7d30e8 100644 --- a/readthedocs/projects/urls/private.py +++ b/readthedocs/projects/urls/private.py @@ -6,7 +6,7 @@ from django.views.generic.base import RedirectView from readthedocs.constants import pattern_opts -from readthedocs.projects.backends.views import ImportDemoView, ImportWizardView +from readthedocs.projects.backends.views import ImportWizardView from readthedocs.projects.views import private from readthedocs.projects.views.private import ( AutomationRuleDelete, @@ -58,10 +58,6 @@ r'^import/manual/$', ImportWizardView.as_view(), name='projects_import_manual', ), - url( - r'^import/manual/demo/$', ImportDemoView.as_view(), - name='projects_import_demo', - ), url( r'^(?P[-\w]+)/$', login_required( diff --git a/readthedocs/projects/views/private.py b/readthedocs/projects/views/private.py index 437352534d3..352631b5953 100644 --- a/readthedocs/projects/views/private.py +++ b/readthedocs/projects/views/private.py @@ -343,72 +343,6 @@ def is_advanced(self): return data.get('advanced', True) -class ImportDemoView(PrivateViewMixin, ProjectImportMixin, View): - - """View to pass request on to import form to import demo project.""" - - form_class = ProjectBasicsForm - request = None - args = None - kwargs = None - - def get(self, request, *args, **kwargs): - """Process link request as a form post to the project import form.""" - self.request = request - self.args = args - self.kwargs = kwargs - - data = self.get_form_data() - project = Project.objects.for_admin_user( - request.user, - ).filter(repo=data['repo']).first() - if project is not None: - messages.success( - request, - _('The demo project is already imported!'), - ) - else: - kwargs = self.get_form_kwargs() - form = self.form_class(data=data, **kwargs) - if form.is_valid(): - project = form.save() - project.save() - self.trigger_initial_build(project, request.user) - messages.success( - request, - _('Your demo project is currently being imported'), - ) - else: - messages.error( - request, - _('There was a problem adding the demo project'), - ) - return HttpResponseRedirect(reverse('projects_dashboard')) - return HttpResponseRedirect( - reverse('projects_detail', args=[project.slug]), - ) - - def get_form_data(self): - """Get form data to post to import form.""" - return { - 'name': '{}-demo'.format(self.request.user.username), - 'repo_type': 'git', - 'repo': 'https://github.com/readthedocs/template.git', - } - - def get_form_kwargs(self): - """Form kwargs passed in during instantiation.""" - return {'user': self.request.user} - - def trigger_initial_build(self, project, user): - """ - Trigger initial build. - - Allow to override the behavior from outside. - """ - return trigger_build(project) - - class ImportView(PrivateViewMixin, TemplateView): """ From 1114aea05130bc3673fe6f0f08b037e002ff5483 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Luis=20Cano=20Rodr=C3=ADguez?= Date: Thu, 16 Sep 2021 16:38:01 +0200 Subject: [PATCH 3/5] Remove demo tests --- .../rtd_tests/tests/test_project_views.py | 114 ------------------ readthedocs/rtd_tests/tests/test_views.py | 4 - 2 files changed, 118 deletions(-) diff --git a/readthedocs/rtd_tests/tests/test_project_views.py b/readthedocs/rtd_tests/tests/test_project_views.py index dd77238a53c..3c20e200705 100644 --- a/readthedocs/rtd_tests/tests/test_project_views.py +++ b/readthedocs/rtd_tests/tests/test_project_views.py @@ -346,120 +346,6 @@ def test_form_spam_ban_user(self, mocked_validator): self.assertTrue(self.user.profile.banned) -@mock.patch('readthedocs.projects.views.private.trigger_build', mock.MagicMock()) -class TestImportDemoView(TestCase): - """Test project import demo view.""" - - fixtures = ['test_data', 'eric'] - - def setUp(self): - self.client.login(username='eric', password='test') - - def test_import_demo_pass(self): - resp = self.client.get('/dashboard/import/manual/demo/') - self.assertEqual(resp.status_code, 302) - self.assertEqual(resp['Location'], '/projects/eric-demo/') - resp_redir = self.client.get(resp['Location']) - self.assertEqual(resp_redir.status_code, 200) - messages = list(resp_redir.context['messages']) - self.assertEqual(messages[0].level, message_const.SUCCESS) - - def test_import_demo_already_imported(self): - """Import demo project multiple times, expect failure 2nd post.""" - self.test_import_demo_pass() - project = Project.objects.get(slug='eric-demo') - - resp = self.client.get('/dashboard/import/manual/demo/') - self.assertEqual(resp.status_code, 302) - self.assertEqual(resp['Location'], '/projects/eric-demo/') - - resp_redir = self.client.get(resp['Location']) - self.assertEqual(resp_redir.status_code, 200) - messages = list(resp_redir.context['messages']) - self.assertEqual(messages[0].level, message_const.SUCCESS) - - self.assertEqual( - project, - Project.objects.get(slug='eric-demo'), - ) - - def test_import_demo_another_user_imported(self): - """Import demo project after another user, expect success.""" - self.test_import_demo_pass() - project = Project.objects.get(slug='eric-demo') - - self.client.logout() - self.client.login(username='test', password='test') - resp = self.client.get('/dashboard/import/manual/demo/') - self.assertEqual(resp.status_code, 302) - self.assertEqual(resp['Location'], '/projects/test-demo/') - - resp_redir = self.client.get(resp['Location']) - self.assertEqual(resp_redir.status_code, 200) - messages = list(resp_redir.context['messages']) - self.assertEqual(messages[0].level, message_const.SUCCESS) - - def test_import_demo_imported_renamed(self): - """If the demo project is renamed, don't import another.""" - self.test_import_demo_pass() - project = Project.objects.get(slug='eric-demo') - project.name = 'eric-demo-foobar' - project.save() - - resp = self.client.get('/dashboard/import/manual/demo/') - self.assertEqual(resp.status_code, 302) - self.assertEqual(resp['Location'], '/projects/eric-demo/') - - resp_redir = self.client.get(resp['Location']) - self.assertEqual(resp_redir.status_code, 200) - messages = list(resp_redir.context['messages']) - self.assertEqual(messages[0].level, message_const.SUCCESS) - self.assertRegex( - messages[0].message, - r'already imported', - ) - - self.assertEqual( - project, - Project.objects.get(slug='eric-demo'), - ) - - def test_import_demo_imported_duplicate(self): - """ - If a project exists with same name, expect a failure importing demo. - - This should be edge case, user would have to import a project (not the - demo project), named user-demo, and then manually enter the demo import - URL, as the onboarding isn't shown when projects > 0 - """ - self.test_import_demo_pass() - project = Project.objects.get(slug='eric-demo') - project.repo = 'file:///foobar' - project.save() - - # Setting the primary and verified email of the test user. - user = User.objects.get(username='eric') - user_email = get(EmailAddress, user=user, primary=True, verified=True) - - resp = self.client.get('/dashboard/import/manual/demo/') - self.assertEqual(resp.status_code, 302) - self.assertEqual(resp['Location'], '/dashboard/') - - resp_redir = self.client.get(resp['Location']) - self.assertEqual(resp_redir.status_code, 200) - messages = list(resp_redir.context['messages']) - self.assertEqual(messages[0].level, message_const.ERROR) - self.assertRegex( - messages[0].message, - r'There was a problem', - ) - - self.assertEqual( - project, - Project.objects.get(slug='eric-demo'), - ) - - @mock.patch('readthedocs.core.utils.trigger_build', mock.MagicMock()) class TestPublicViews(TestCase): def setUp(self): diff --git a/readthedocs/rtd_tests/tests/test_views.py b/readthedocs/rtd_tests/tests/test_views.py index 078fb79ad47..0a3d1aca232 100644 --- a/readthedocs/rtd_tests/tests/test_views.py +++ b/readthedocs/rtd_tests/tests/test_views.py @@ -83,10 +83,6 @@ def test_import_wizard_manual(self): response = self.client.get('/dashboard/import/manual/') self.assertRedirectToLogin(response) - def test_import_wizard_demo(self): - response = self.client.get('/dashboard/import/manual/demo/') - self.assertRedirectToLogin(response) - def test_edit(self): response = self.client.get('/dashboard/pip/edit/') self.assertRedirectToLogin(response) From 30126b3fbb90a94a67e70285c7449892a928f0dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Luis=20Cano=20Rodr=C3=ADguez?= Date: Thu, 16 Sep 2021 16:41:59 +0200 Subject: [PATCH 4/5] Update tutorial URL --- docs/tutorial/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/index.rst b/docs/tutorial/index.rst index 97ccee7f7ff..3fc57adce4e 100644 --- a/docs/tutorial/index.rst +++ b/docs/tutorial/index.rst @@ -24,7 +24,7 @@ Preparing your project on GitHub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To start, `sign in to GitHub `_ -and navigate to `the tutorial GitHub template `_, +and navigate to `the tutorial GitHub template `_, where you will see a green :guilabel:`Use this template` button. Click it to open a new page that will ask you for some details: From 57e08123243ca5e7a11a9c9e216a2183a24cf73b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Luis=20Cano=20Rodr=C3=ADguez?= Date: Mon, 20 Sep 2021 15:36:26 +0200 Subject: [PATCH 5/5] Update other links to the tutorial --- readthedocs/templates/base.html | 2 +- readthedocs/templates/homepage.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/readthedocs/templates/base.html b/readthedocs/templates/base.html index 673f55c6a9f..b68abf284e2 100644 --- a/readthedocs/templates/base.html +++ b/readthedocs/templates/base.html @@ -168,7 +168,7 @@

{% trans 'Resources' %}