Repository: uccser/cs-unplugged

Issue:
Provide clearer entry points for new visitors on website

Landing page interface redesign
Current:
https://cs-unplugged-dev.appspot.com/en/

Proposed new design:
![a thing](https://user-images.githubusercontent.com/20089275/33110427-b2db51ec-cfac-11e7-845b-de9ad6a4c304.png)

**Redesign based on older current landing page.

The main changes are the jumbotron banner, nav bar and footer ( issue #695 )


Discussion:

Resolving patch:
diff --git a/csunplugged/general/urls.py b/csunplugged/general/urls.py
--- a/csunplugged/general/urls.py
+++ b/csunplugged/general/urls.py
@@ -15,11 +15,21 @@
         views.GeneralAboutView.as_view(),
         name="about"
     ),
+    url(
+        r"^what-is-computer-science/$",
+        views.WhatIsCSView.as_view(),
+        name="what_is_cs"
+    ),
     url(
         r"^computational-thinking/$",
         views.ComputationalThinkingView.as_view(),
         name="computational_thinking"
     ),
+    url(
+        r"^how-do-i-teach-cs-unplugged/$",
+        views.HowDoITeachCSUnpluggedView.as_view(),
+        name="how_do_i_teach_cs_unplugged"
+    ),
     url(
         r"^contact/$",
         views.GeneralContactView.as_view(),
diff --git a/csunplugged/general/views.py b/csunplugged/general/views.py
--- a/csunplugged/general/views.py
+++ b/csunplugged/general/views.py
@@ -34,12 +34,24 @@ class GeneralPrinciplesView(TemplateView):
     template_name = "general/principles.html"
 
 
+class WhatIsCSView(TemplateView):
+    """View for the 'What is Computer Science?' page that renders from a template."""
+
+    template_name = "general/what-is-computer-science.html"
+
+
 class ComputationalThinkingView(TemplateView):
     """View for the Computational Thinking page that renders from a template."""
 
     template_name = "general/computational-thinking.html"
 
 
+class HowDoITeachCSUnpluggedView(TemplateView):
+    """View for the 'How do I teach CS Unplugged?' page that renders from a template."""
+
+    template_name = "general/how-do-i-teach-cs-unplugged.html"
+
+
 def health_check(request):
     """Return heath check response for Google App Engine.
 


Test patch:
diff --git a/csunplugged/tests/general/urls/test_computational_thinking_url.py b/csunplugged/tests/general/urls/test_computational_thinking_url.py
new file mode 100644
--- /dev/null
+++ b/csunplugged/tests/general/urls/test_computational_thinking_url.py
@@ -0,0 +1,16 @@
+from tests.BaseTestWithDB import BaseTestWithDB
+from django.urls import reverse
+from http import HTTPStatus
+
+
+class ComputationalThinkingURLTest(BaseTestWithDB):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.language = "en"
+
+    def test_valid_computational_thinking_url(self):
+        url = reverse("general:computational_thinking")
+        self.assertEqual(url, "/en/computational-thinking/")
+        response = self.client.get(url)
+        self.assertEqual(HTTPStatus.OK, response.status_code)
diff --git a/csunplugged/tests/general/urls/test_how_do_i_teach_cs_unplugged_url.py b/csunplugged/tests/general/urls/test_how_do_i_teach_cs_unplugged_url.py
new file mode 100644
--- /dev/null
+++ b/csunplugged/tests/general/urls/test_how_do_i_teach_cs_unplugged_url.py
@@ -0,0 +1,16 @@
+from tests.BaseTestWithDB import BaseTestWithDB
+from django.urls import reverse
+from http import HTTPStatus
+
+
+class HowDoITeachCSUnpluggedURLTest(BaseTestWithDB):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.language = "en"
+
+    def test_valid_how_do_i_teach_cs_unplugged_url(self):
+        url = reverse("general:how_do_i_teach_cs_unplugged")
+        self.assertEqual(url, "/en/how-do-i-teach-cs-unplugged/")
+        response = self.client.get(url)
+        self.assertEqual(HTTPStatus.OK, response.status_code)
diff --git a/csunplugged/tests/general/urls/test_what_is_cs_url.py b/csunplugged/tests/general/urls/test_what_is_cs_url.py
new file mode 100644
--- /dev/null
+++ b/csunplugged/tests/general/urls/test_what_is_cs_url.py
@@ -0,0 +1,16 @@
+from tests.BaseTestWithDB import BaseTestWithDB
+from django.urls import reverse
+from http import HTTPStatus
+
+
+class WhatIsCSURLTest(BaseTestWithDB):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.language = "en"
+
+    def test_valid_what_is_cs_url(self):
+        url = reverse("general:what_is_cs")
+        self.assertEqual(url, "/en/what-is-computer-science/")
+        response = self.client.get(url)
+        self.assertEqual(HTTPStatus.OK, response.status_code)
diff --git a/csunplugged/tests/general/views/test_general_computational_thinking_view.py b/csunplugged/tests/general/views/test_general_computational_thinking_view.py
new file mode 100644
--- /dev/null
+++ b/csunplugged/tests/general/views/test_general_computational_thinking_view.py
@@ -0,0 +1,15 @@
+from tests.BaseTestWithDB import BaseTestWithDB
+from django.urls import reverse
+from http import HTTPStatus
+
+
+class ComputationalThinkingViewTest(BaseTestWithDB):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.language = "en"
+
+    def test_computational_thinking_view(self):
+        response = self.client.get(reverse("general:computational_thinking"))
+        self.assertEqual(HTTPStatus.OK, response.status_code)
+        self.assertContains(response, "Computational Thinking and CS Unplugged")
diff --git a/csunplugged/tests/general/views/test_general_how_do_i_teach_cs_unplugged_view.py b/csunplugged/tests/general/views/test_general_how_do_i_teach_cs_unplugged_view.py
new file mode 100644
--- /dev/null
+++ b/csunplugged/tests/general/views/test_general_how_do_i_teach_cs_unplugged_view.py
@@ -0,0 +1,15 @@
+from tests.BaseTestWithDB import BaseTestWithDB
+from django.urls import reverse
+from http import HTTPStatus
+
+
+class HowDoITeachCSUnpluggedViewTest(BaseTestWithDB):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.language = "en"
+
+    def test_how_do_i_teach_cs_unplugged_view(self):
+        response = self.client.get(reverse("general:how_do_i_teach_cs_unplugged"))
+        self.assertEqual(HTTPStatus.OK, response.status_code)
+        self.assertContains(response, "How do I teach CS Unplugged?")
diff --git a/csunplugged/tests/general/views/test_general_what_is_cs_view.py b/csunplugged/tests/general/views/test_general_what_is_cs_view.py
new file mode 100644
--- /dev/null
+++ b/csunplugged/tests/general/views/test_general_what_is_cs_view.py
@@ -0,0 +1,15 @@
+from tests.BaseTestWithDB import BaseTestWithDB
+from django.urls import reverse
+from http import HTTPStatus
+
+
+class WhatIsCSViewTest(BaseTestWithDB):
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.language = "en"
+
+    def test_what_is_cs_view(self):
+        response = self.client.get(reverse("general:what_is_cs"))
+        self.assertEqual(HTTPStatus.OK, response.status_code)
+        self.assertContains(response, "What is Computer Science?")