From 349c7a6bf1e59ec716afa1992b7ced619d60d242 Mon Sep 17 00:00:00 2001 From: Ivan Subbotin Date: Thu, 29 Mar 2018 19:17:03 +0300 Subject: [PATCH 1/6] Add test to open New Post page --- spec/features/posts_spec.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/spec/features/posts_spec.rb b/spec/features/posts_spec.rb index b12bf50..9db7a7e 100644 --- a/spec/features/posts_spec.rb +++ b/spec/features/posts_spec.rb @@ -4,8 +4,14 @@ let(:posts_page) { PostPage.new } let(:post) { create :post } - it 'Reset password for enabled user' do + it 'Open posts list' do posts_page.load expect(posts_page).to have_header end + + it 'Open new post page' do + posts_page.load + click_link 'New Post' + expect(find('h1')).to have_content('New Post') + end end From 2822555c5ac1294a1c7541899de916c712c725f2 Mon Sep 17 00:00:00 2001 From: Ivan Subbotin Date: Sun, 1 Apr 2018 20:15:00 +0300 Subject: [PATCH 2/6] Added test --- spec/features/posts_spec.rb | 34 +++++++++++++++++++++- spec/support/page_objects/new_post_page.rb | 7 +++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 spec/support/page_objects/new_post_page.rb diff --git a/spec/features/posts_spec.rb b/spec/features/posts_spec.rb index 9db7a7e..4597a38 100644 --- a/spec/features/posts_spec.rb +++ b/spec/features/posts_spec.rb @@ -2,7 +2,8 @@ describe 'Posts spec' do let(:posts_page) { PostPage.new } - let(:post) { create :post } + let(:new_post_page) { NewPostPage.new } +# let(:post) { create :post } it 'Open posts list' do posts_page.load @@ -14,4 +15,35 @@ click_link 'New Post' expect(find('h1')).to have_content('New Post') end + + it 'Create new post and check notice' do + posts_page.load + visit('/posts/new') + fill_in('post_title', with: 'Title One') + fill_in('post_body', with: 'Body One') + click_button('Create Post') + expect(find('#notice')).to have_content('Post was successfully created.') + end + + it 'Create new post and check entered data' do + new_post_page.load + new_post_page.title_field.set 'Title1' + new_post_page.body_field.set 'Body1' + click_button('Create Post') + expect(find(:xpath, ".//p[2]")).to have_content('Title1') + expect(find(:xpath, ".//p[3]")).to have_content('Body1') + end + + it 'Should not create post without Title' do + new_post_page.load + fill_in('post_body', with: 'Body1') + click_button('Create Post') + expect(find('#notice')).to have_no_content('Post was successfully created.') + end + + xit 'should check Show link' do + post = create :post, title: 'test_title' + visit("/posts/#{post.id}") + sleep 5 + end end diff --git a/spec/support/page_objects/new_post_page.rb b/spec/support/page_objects/new_post_page.rb new file mode 100644 index 0000000..8a9fda5 --- /dev/null +++ b/spec/support/page_objects/new_post_page.rb @@ -0,0 +1,7 @@ +class NewPostPage < BasePage + set_url routes.new_post_path + + element :title_field, '#post_title' + element :body_field, '#post_body' + element :create_post_button, 'Create Post' +end From 57b54480cc215399a88360929018d8ebd991b3ce Mon Sep 17 00:00:00 2001 From: Ivan Subbotin Date: Wed, 4 Apr 2018 20:16:26 +0300 Subject: [PATCH 3/6] added tests for deleting fuctions --- spec/features/posts_spec.rb | 72 +++++++++++++++++---- spec/support/page_objects/edit_post_page.rb | 7 ++ spec/support/page_objects/new_post_page.rb | 2 +- spec/support/page_objects/post_page.rb | 1 + spec/support/page_objects/posts_page.rb | 1 + 5 files changed, 68 insertions(+), 15 deletions(-) create mode 100644 spec/support/page_objects/edit_post_page.rb diff --git a/spec/features/posts_spec.rb b/spec/features/posts_spec.rb index 4597a38..bc073d3 100644 --- a/spec/features/posts_spec.rb +++ b/spec/features/posts_spec.rb @@ -1,8 +1,9 @@ require 'rails_helper' describe 'Posts spec' do - let(:posts_page) { PostPage.new } + let(:posts_page) { PostsPage.new } let(:new_post_page) { NewPostPage.new } + let(:post_page) { PostPage.new } # let(:post) { create :post } it 'Open posts list' do @@ -10,40 +11,83 @@ expect(posts_page).to have_header end + # Тест проверяет переход на страницу создания поста по уникальному заголовку it 'Open new post page' do posts_page.load click_link 'New Post' expect(find('h1')).to have_content('New Post') end + # Тест проверяет наличие сообщения после успешного создания поста it 'Create new post and check notice' do - posts_page.load - visit('/posts/new') - fill_in('post_title', with: 'Title One') - fill_in('post_body', with: 'Body One') - click_button('Create Post') - expect(find('#notice')).to have_content('Post was successfully created.') + new_post_page.load + new_post_page.title_field.set 'Post title' + new_post_page.body_field.set 'Post body' + new_post_page.create_post_button.click + expect(post_page.notice).to have_content('Post was successfully created.') end + # Тест проверяет что верно сохраняются данные введенные при создании поста it 'Create new post and check entered data' do new_post_page.load new_post_page.title_field.set 'Title1' new_post_page.body_field.set 'Body1' - click_button('Create Post') + new_post_page.create_post_button.click expect(find(:xpath, ".//p[2]")).to have_content('Title1') expect(find(:xpath, ".//p[3]")).to have_content('Body1') end + # Негативный тест. Проверяет что пост без заголовка не создается. Ожидаемо падает it 'Should not create post without Title' do new_post_page.load - fill_in('post_body', with: 'Body1') - click_button('Create Post') - expect(find('#notice')).to have_no_content('Post was successfully created.') + new_post_page.title_field.set '' + new_post_page.body_field.set 'Post body' + new_post_page.create_post_button.click + expect(posts_page.notice).to have_no_content('Post was successfully created.') + end + + # Тест проверяет что по клику на  Show  выполняется переход на страничку верного поста + it 'should check Show link redirect to correct address' do + post = create :post, title: 'test_title' + posts_page.load + click_link 'Show' + expect(page.current_path).to eq("/posts/#{post.id}") + end + + # Проверяет что выводятся все созданные посты + it 'should check count of elements on posts page' do + 10.times { create :post } + posts_page.load + expect(page).to have_xpath(".//tbody/tr", :count =>10) end - xit 'should check Show link' do + # Тест проверяет что после удаления пост не выводится в списке. + # Тест падает, так как посты не удаляются и окно с алертом не появляется + it 'should delete post' do post = create :post, title: 'test_title' - visit("/posts/#{post.id}") - sleep 5 + posts_page.load + click_link 'Destroy' + page.driver.browser.switch_to.alert.accept + expect(page).to have_xpath(".//tbody/tr", :count =>0) + end + + # Тест проверяет что после удаления появляется сообщение. + # Тест падает, так как посты не удаляются и окно с алертом не появляется + it 'should delete post' do + post = create :post, title: 'test_title' + posts_page.load + click_link 'Destroy' + page.driver.browser.switch_to.alert.accept + expect(posts_page.notice).to have_content('Post was successfully destroyed.') + end + + # Тест проверяет что отмене удаления пост не удаляется и выводится в списке. + # Тест падает, так как окно с алертом не появляется + it 'should cancel deleting post' do + post = create :post, title: 'test_title' + posts_page.load + click_link 'Destroy' + page.driver.browser.switch_to.alert.dismiss + expect(page).to have_xpath(".//tbody/tr", :count =>1) end end diff --git a/spec/support/page_objects/edit_post_page.rb b/spec/support/page_objects/edit_post_page.rb new file mode 100644 index 0000000..63275d7 --- /dev/null +++ b/spec/support/page_objects/edit_post_page.rb @@ -0,0 +1,7 @@ +class EditPostPage < BasePage + set_url routes.edit_post_path + + element :title_field, '#post_title' + element :body_field, '#post_body' + element :create_post_button, 'input[type=submit]' +end diff --git a/spec/support/page_objects/new_post_page.rb b/spec/support/page_objects/new_post_page.rb index 8a9fda5..3954596 100644 --- a/spec/support/page_objects/new_post_page.rb +++ b/spec/support/page_objects/new_post_page.rb @@ -3,5 +3,5 @@ class NewPostPage < BasePage element :title_field, '#post_title' element :body_field, '#post_body' - element :create_post_button, 'Create Post' + element :create_post_button, 'input[type=submit]' end diff --git a/spec/support/page_objects/post_page.rb b/spec/support/page_objects/post_page.rb index c84b40d..7231ce2 100644 --- a/spec/support/page_objects/post_page.rb +++ b/spec/support/page_objects/post_page.rb @@ -2,4 +2,5 @@ class PostPage < BasePage set_url routes.post_path element :header, '.header' + element :notice, '#notice' end diff --git a/spec/support/page_objects/posts_page.rb b/spec/support/page_objects/posts_page.rb index 5a3edf2..c3b7982 100644 --- a/spec/support/page_objects/posts_page.rb +++ b/spec/support/page_objects/posts_page.rb @@ -2,4 +2,5 @@ class PostsPage < BasePage set_url routes.posts_path element :header, '.header' + element :notice, '#notice' end From 98ca42b272b4f10f5c88e3166630c85ccdfba1ff Mon Sep 17 00:00:00 2001 From: Ivan Subbotin Date: Wed, 4 Apr 2018 21:22:18 +0300 Subject: [PATCH 4/6] Added tests for editing posts --- spec/features/posts_spec.rb | 27 +++++++++++++++++++++ spec/support/page_objects/edit_post_page.rb | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/spec/features/posts_spec.rb b/spec/features/posts_spec.rb index bc073d3..dbb8713 100644 --- a/spec/features/posts_spec.rb +++ b/spec/features/posts_spec.rb @@ -4,6 +4,7 @@ let(:posts_page) { PostsPage.new } let(:new_post_page) { NewPostPage.new } let(:post_page) { PostPage.new } + let(:edit_post_page) { EditPostPage.new } # let(:post) { create :post } it 'Open posts list' do @@ -90,4 +91,30 @@ page.driver.browser.switch_to.alert.dismiss expect(page).to have_xpath(".//tbody/tr", :count =>1) end + + # Проверяет сообщение после успешного редактирования + it 'should check message after editing' do + post = create :post, title: 'test title' + visit("/posts/#{post.id}/edit") + edit_post_page.update_post_button.click + expect(post_page.notice).to have_content('Post was successfully updated.') + end + + # Проверяет что заголовок изменился после редактирования + it 'should check saving title after editing' do + post = create :post, title: 'test title' + visit("/posts/#{post.id}/edit") + edit_post_page.title_field.set 'Updated Title' + edit_post_page.update_post_button.click + expect(find(:xpath, ".//p[2]")).to have_content('Updated Title') + end + + # Проверяет что заголовок изменился после редактирования + it 'should check saving body after editing' do + post = create :post, title: 'test title', body: 'qwerty' + visit("/posts/#{post.id}/edit") + edit_post_page.body_field.set 'Asdfg' + edit_post_page.update_post_button.click + expect(find(:xpath, ".//p[3]")).to have_content('Asdfg') + end end diff --git a/spec/support/page_objects/edit_post_page.rb b/spec/support/page_objects/edit_post_page.rb index 63275d7..0c52b86 100644 --- a/spec/support/page_objects/edit_post_page.rb +++ b/spec/support/page_objects/edit_post_page.rb @@ -3,5 +3,5 @@ class EditPostPage < BasePage element :title_field, '#post_title' element :body_field, '#post_body' - element :create_post_button, 'input[type=submit]' + element :update_post_button, 'input[type=submit]' end From 51267c256a0b824dfaa775834ab1d331b6586b28 Mon Sep 17 00:00:00 2001 From: Ivan Subbotin Date: Wed, 4 Apr 2018 21:25:13 +0300 Subject: [PATCH 5/6] fix comments --- spec/features/posts_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/features/posts_spec.rb b/spec/features/posts_spec.rb index dbb8713..dc03f7c 100644 --- a/spec/features/posts_spec.rb +++ b/spec/features/posts_spec.rb @@ -109,7 +109,7 @@ expect(find(:xpath, ".//p[2]")).to have_content('Updated Title') end - # Проверяет что заголовок изменился после редактирования + # Проверяет что тело изменилось после редактирования it 'should check saving body after editing' do post = create :post, title: 'test title', body: 'qwerty' visit("/posts/#{post.id}/edit") From 950064e3c2563afc11d9f4ce973a6df210ba252e Mon Sep 17 00:00:00 2001 From: Ivan Subbotin Date: Wed, 4 Apr 2018 22:20:03 +0300 Subject: [PATCH 6/6] add comment spec with two tests. And create comment page object model --- spec/features/comments_spec.rb | 24 +++++++++++++++++++ spec/support/page_objects/comment_page.rb | 6 +++++ spec/support/page_objects/comments_page.rb | 6 +++++ spec/support/page_objects/new_comment_page.rb | 7 ++++++ 4 files changed, 43 insertions(+) create mode 100644 spec/features/comments_spec.rb create mode 100644 spec/support/page_objects/comment_page.rb create mode 100644 spec/support/page_objects/comments_page.rb create mode 100644 spec/support/page_objects/new_comment_page.rb diff --git a/spec/features/comments_spec.rb b/spec/features/comments_spec.rb new file mode 100644 index 0000000..2259089 --- /dev/null +++ b/spec/features/comments_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +describe 'Posts spec' do + let(:comments_page) { CommentsPage.new } + let(:new_comment_page) { NewCommentPage.new } + let(:comment_page) {CommentPage.new} + + # Тест проверяет переход на страницу создания комментария по уникальному заголовку + it 'should move to new comment page' do + comments_page.load + click_link 'New Comment' + expect(find('h1')).to have_content('New Comment') + end + + # Тест проверяет сообщение после успешного создания комментария + it 'should create new comment and check the message' do + post = create :post + new_comment_page.load + new_comment_page.post_id_field.set post.id + new_comment_page.body_field.set 'Post body' + new_comment_page.create_comment_button.click + expect(comment_page.notice).to have_content('Comment was successfully created.') + end +end diff --git a/spec/support/page_objects/comment_page.rb b/spec/support/page_objects/comment_page.rb new file mode 100644 index 0000000..135a155 --- /dev/null +++ b/spec/support/page_objects/comment_page.rb @@ -0,0 +1,6 @@ +class CommentPage < BasePage + set_url routes.comment_path + + element :header, '.header' + element :notice, '#notice' +end diff --git a/spec/support/page_objects/comments_page.rb b/spec/support/page_objects/comments_page.rb new file mode 100644 index 0000000..4c984b5 --- /dev/null +++ b/spec/support/page_objects/comments_page.rb @@ -0,0 +1,6 @@ +class CommentsPage < BasePage + set_url routes.comments_path + + element :header, '.header' + element :notice, '#notice' +end diff --git a/spec/support/page_objects/new_comment_page.rb b/spec/support/page_objects/new_comment_page.rb new file mode 100644 index 0000000..297fb3a --- /dev/null +++ b/spec/support/page_objects/new_comment_page.rb @@ -0,0 +1,7 @@ +class NewCommentPage < BasePage + set_url routes.new_comment_path + + element :post_id_field, '#comment_post_id' + element :body_field, '#comment_body' + element :create_comment_button, 'input[type=submit]' +end