diff --git a/test/features/admin_edits_post_test.exs b/test/features/admin_edits_post_test.exs index 503a154ee..69df9a29a 100644 --- a/test/features/admin_edits_post_test.exs +++ b/test/features/admin_edits_post_test.exs @@ -2,11 +2,10 @@ defmodule AdminEditsPostTest do use Tilex.IntegrationCase, async: Application.get_env(:tilex, :async_feature_test) alias Tilex.Integration.Pages.{ - PostForm + PostForm, + PostShowPage } - alias TilexWeb.Endpoint - test "fills out form and updates post from post show", %{session: session} do Factory.insert!(:channel, name: "phoenix") developer = Factory.insert!(:developer) @@ -19,28 +18,18 @@ defmodule AdminEditsPostTest do body: "This is how to be *awesome*!" ) - sign_in(session, admin) - - visit(session, post_path(Endpoint, :show, post)) - - click(session, Query.link("edit")) - - h1_heading = Element.text(find(session, Query.css("main header h1"))) - assert h1_heading == "Edit Post" + session + |> sign_in(admin) + |> PostShowPage.navigate(post) + |> PostShowPage.click_edit() session + |> PostForm.ensure_page_loaded() |> PostForm.expect_title_preview("Awesome Post!") + |> PostForm.fill_in_title("Even Awesomer Post!") + |> PostForm.click_submit() session - |> fill_in(Query.text_field("Title"), with: "Even Awesomer Post!") - |> click(Query.button("Submit")) - - element_text = fn (session, selector) -> - Element.text(find(session, Query.css(selector))) - end - - post_title = element_text.(session, ".post h1") - - assert post_title =~ ~r/Even Awesomer Post!/ + |> PostShowPage.ensure_page_loaded("Even Awesomer Post!") end end diff --git a/test/features/developer_creates_post_test.exs b/test/features/developer_creates_post_test.exs index f760a026a..6c0f0c06a 100644 --- a/test/features/developer_creates_post_test.exs +++ b/test/features/developer_creates_post_test.exs @@ -15,7 +15,7 @@ defmodule DeveloperCreatesPostTest do session |> sign_in(developer) - |> IndexPage.visit() + |> IndexPage.navigate() |> IndexPage.ensure_page_loaded() |> Navigation.click_create_post() |> CreatePostPage.ensure_page_loaded() @@ -51,7 +51,7 @@ defmodule DeveloperCreatesPostTest do session |> sign_in(developer) - |> CreatePostPage.visit() + |> CreatePostPage.navigate() |> CreatePostPage.ensure_page_loaded() |> CreatePostPage.click_cancel() |> IndexPage.ensure_page_loaded() @@ -62,7 +62,7 @@ defmodule DeveloperCreatesPostTest do session |> sign_in(developer) - |> CreatePostPage.visit() + |> CreatePostPage.navigate() |> CreatePostPage.ensure_page_loaded() |> CreatePostPage.submit_form() |> CreatePostPage.ensure_page_loaded() @@ -77,7 +77,7 @@ defmodule DeveloperCreatesPostTest do session |> sign_in(developer) - |> CreatePostPage.visit() + |> CreatePostPage.navigate() |> CreatePostPage.ensure_page_loaded() |> CreatePostPage.fill_in_form(%{ title: String.duplicate("I can codez ", 10), @@ -95,7 +95,7 @@ defmodule DeveloperCreatesPostTest do session |> sign_in(developer) - |> CreatePostPage.visit() + |> CreatePostPage.navigate() |> CreatePostPage.ensure_page_loaded() |> CreatePostPage.fill_in_form(%{ title: "Example Title", @@ -113,7 +113,7 @@ defmodule DeveloperCreatesPostTest do session |> sign_in(developer) - |> CreatePostPage.visit() + |> CreatePostPage.navigate() |> CreatePostPage.ensure_page_loaded() |> CreatePostPage.fill_in_form(%{ title: "Example Title", @@ -130,7 +130,7 @@ defmodule DeveloperCreatesPostTest do session |> sign_in(developer) - |> CreatePostPage.visit() + |> CreatePostPage.navigate() |> CreatePostPage.ensure_page_loaded() |> CreatePostPage.fill_in_form(%{ title: "Example Title", diff --git a/test/features/developer_edits_post_test.exs b/test/features/developer_edits_post_test.exs index 791e78f98..db13ee0e9 100644 --- a/test/features/developer_edits_post_test.exs +++ b/test/features/developer_edits_post_test.exs @@ -2,11 +2,10 @@ defmodule DeveloperEditsPostTest do use Tilex.IntegrationCase, async: Application.get_env(:tilex, :async_feature_test) alias Tilex.Integration.Pages.{ - PostForm + PostForm, + PostShowPage } - alias TilexWeb.Endpoint - test "fills out form and updates post from post show", %{session: session} do Factory.insert!(:channel, name: "phoenix") developer = Factory.insert!(:developer) @@ -17,47 +16,31 @@ defmodule DeveloperEditsPostTest do body: "This is how to be *awesome*!" ) - sign_in(session, developer) - - visit(session, post_path(Endpoint, :show, post)) - - click(session, Query.link("edit")) - - h1_heading = Element.text(find(session, Query.css("main header h1"))) - assert h1_heading == "Edit Post" + session + |> sign_in(developer) + |> PostShowPage.navigate(post) + |> PostShowPage.click_edit() session + |> PostForm.ensure_page_loaded() |> PostForm.expect_preview_content("em", "awesome") |> PostForm.expect_word_count(6) |> PostForm.expect_words_left("194 words available") |> PostForm.expect_title_characters_left("37 characters available") |> PostForm.expect_title_preview("Awesome Post!") + |> PostForm.fill_in_title("Even Awesomer Post!") + |> PostForm.fill_in_body("This is how to be super awesome!") + |> PostForm.select_channel("phoenix") + |> PostForm.click_submit() session - |> fill_in(Query.text_field("Title"), with: "Even Awesomer Post!") - |> fill_in(Query.text_field("Body"), with: "This is how to be super awesome!") - |> (fn(session) -> - find(session, Query.select("Channel"), fn (element) -> - click(element, Query.option("phoenix")) - end) - session - end).() - |> click(Query.button("Submit")) - - element_text = fn (session, selector) -> - Element.text(find(session, Query.css(selector))) - end - - info_flash = element_text.(session, ".alert-info") - post_title = element_text.(session, ".post h1") - post_body = element_text.(session, ".post .copy") - post_footer = element_text.(session, ".post aside") - likes_count = element_text.(session, ".js-like-action") - - assert info_flash == "Post Updated" - assert post_title =~ ~r/Even Awesomer Post!/ - assert post_body =~ ~r/This is how to be super awesome!/ - assert post_footer =~ ~r/#phoenix/i - assert likes_count =~ ~r/1/ + |> PostShowPage.ensure_page_loaded("Even Awesomer Post!") + |> PostShowPage.ensure_info_flash("Post Updated") + |> PostShowPage.expect_post_attributes(%{ + title: "Even Awesomer Post!", + body: "This is how to be super awesome!", + channel: "#phoenix", + likes_count: 1 + }) end end diff --git a/test/features/developer_views_developer_test.exs b/test/features/developer_views_developer_test.exs deleted file mode 100644 index e2ac288bd..000000000 --- a/test/features/developer_views_developer_test.exs +++ /dev/null @@ -1,19 +0,0 @@ -defmodule DeveloperViewsDeveloper do - use Tilex.IntegrationCase, async: Application.get_env(:tilex, :async_feature_test) - - alias Tilex.Integration.Pages.IndexPage - - test "via nav bar", %{session: session} do - developer = Factory.insert!(:developer, username: "greatgrasshopper") - sign_in(session, developer) - - session - |> IndexPage.visit() - |> IndexPage.ensure_page_loaded() - |> click(Query.link("greatgrasshopper")) - - page_header = Element.text(find(session, Query.css(".page_head"))) - - assert page_header =~ ~r/0 posts by greatgrasshopper/ - end -end diff --git a/test/features/visitor_views_post_test.exs b/test/features/visitor_views_post_test.exs index 8ad87c440..c9cd70a75 100644 --- a/test/features/visitor_views_post_test.exs +++ b/test/features/visitor_views_post_test.exs @@ -3,17 +3,29 @@ defmodule VisitorViewsPostTest do alias TilexWeb.Endpoint - test "the page shows a post", %{session: session} do + alias Tilex.Integration.Pages.{ + PostShowPage + } + test "the page shows a post", %{session: session} do developer = Factory.insert!(:developer, username: "makinpancakes") - post = Factory.insert!(:post, title: "A special post", developer: developer) - - body = visit(session, post_path(Endpoint, :show, post)) - |> find(Query.css("body")) - |> Element.text + channel = Factory.insert!(:channel, name: "awesomeness") + post = Factory.insert!(:post, + title: "A special post", + body: "This is how to be super awesome!", + developer: developer, + channel: channel + ) + + session + |> PostShowPage.navigate(post) + |> PostShowPage.expect_post_attributes(%{ + title: "A special post", + body: "This is how to be super awesome!", + channel: "#awesomeness", + likes_count: 1 + }) - assert body =~ ~r/A special post/ - assert body =~ ~r/makinpancakes/ assert page_title(session) == "A special post - Today I Learned" end diff --git a/test/support/pages/create_post_page.ex b/test/support/pages/create_post_page.ex index d4afedffc..1813247e9 100644 --- a/test/support/pages/create_post_page.ex +++ b/test/support/pages/create_post_page.ex @@ -1,7 +1,7 @@ defmodule Tilex.Integration.Pages.CreatePostPage do use Wallaby.DSL - def visit(session) do + def navigate(session) do visit(session, "/posts/new") end diff --git a/test/support/pages/index_page.ex b/test/support/pages/index_page.ex index f314a0a1a..2fd9bfe7b 100644 --- a/test/support/pages/index_page.ex +++ b/test/support/pages/index_page.ex @@ -1,7 +1,7 @@ defmodule Tilex.Integration.Pages.IndexPage do use Wallaby.DSL - def visit(session) do + def navigate(session) do visit(session, "/") end diff --git a/test/support/pages/post_form.ex b/test/support/pages/post_form.ex index 690599ac6..8c1947514 100644 --- a/test/support/pages/post_form.ex +++ b/test/support/pages/post_form.ex @@ -1,6 +1,11 @@ defmodule Tilex.Integration.Pages.PostForm do use Wallaby.DSL + def ensure_page_loaded(session) do + Browser.find(session, Query.css("main header h1", text: "Edit Post")) + session + end + def expect_preview_content(session, tag, text) do session |> element_with_text?(".content_preview #{tag}", text) @@ -32,4 +37,29 @@ defmodule Tilex.Integration.Pages.PostForm do session end + + def fill_in_title(session, title) do + session + |> fill_in(Query.text_field("Title"), with: title) + end + + def fill_in_body(session, body) do + session + |> fill_in(Query.text_field("Body"), with: body) + end + + def select_channel(session, name) do + session + |> (fn(session) -> + find(session, Query.select("Channel"), fn (element) -> + click(element, Query.option(name)) + end) + session + end).() + end + + def click_submit(session) do + session + |> click(Query.button("Submit")) + end end diff --git a/test/support/pages/post_show_page.ex b/test/support/pages/post_show_page.ex index 1bc26d7cf..c47f6ba03 100644 --- a/test/support/pages/post_show_page.ex +++ b/test/support/pages/post_show_page.ex @@ -1,6 +1,10 @@ defmodule Tilex.Integration.Pages.PostShowPage do use Wallaby.DSL + def navigate(session, post) do + visit(session, "/posts/#{post.slug}") + end + def ensure_page_loaded(session, title) do session |> Browser.find(Query.css("article.post")) @@ -38,4 +42,8 @@ defmodule Tilex.Integration.Pages.PostShowPage do session end + + def click_edit(session) do + click(session, Query.link("edit")) + end end