Skip to content

Commit

Permalink
Merge pull request hashrocket#156 from hashrocket/implement-page-objects
Browse files Browse the repository at this point in the history
Implement page objects
  • Loading branch information
hashrocketeer committed Aug 25, 2017
2 parents 2dc28ae + 69687ac commit e9ffd5b
Show file tree
Hide file tree
Showing 9 changed files with 96 additions and 93 deletions.
31 changes: 10 additions & 21 deletions test/features/admin_edits_post_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
14 changes: 7 additions & 7 deletions test/features/developer_creates_post_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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()
Expand All @@ -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()
Expand All @@ -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),
Expand All @@ -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",
Expand All @@ -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",
Expand All @@ -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",
Expand Down
55 changes: 19 additions & 36 deletions test/features/developer_edits_post_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
19 changes: 0 additions & 19 deletions test/features/developer_views_developer_test.exs

This file was deleted.

28 changes: 20 additions & 8 deletions test/features/visitor_views_post_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion test/support/pages/create_post_page.ex
Original file line number Diff line number Diff line change
@@ -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

Expand Down
2 changes: 1 addition & 1 deletion test/support/pages/index_page.ex
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
defmodule Tilex.Integration.Pages.IndexPage do
use Wallaby.DSL

def visit(session) do
def navigate(session) do
visit(session, "/")
end

Expand Down
30 changes: 30 additions & 0 deletions test/support/pages/post_form.ex
Original file line number Diff line number Diff line change
@@ -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)
Expand Down Expand Up @@ -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
8 changes: 8 additions & 0 deletions test/support/pages/post_show_page.ex
Original file line number Diff line number Diff line change
@@ -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"))
Expand Down Expand Up @@ -38,4 +42,8 @@ defmodule Tilex.Integration.Pages.PostShowPage do

session
end

def click_edit(session) do
click(session, Query.link("edit"))
end
end

0 comments on commit e9ffd5b

Please sign in to comment.