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/features/posts_spec.rb b/spec/features/posts_spec.rb index b12bf50..dc03f7c 100644 --- a/spec/features/posts_spec.rb +++ b/spec/features/posts_spec.rb @@ -1,11 +1,120 @@ require 'rails_helper' describe 'Posts spec' do - let(:posts_page) { PostPage.new } - let(:post) { create :post } + 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 '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 + + # Тест проверяет наличие сообщения после успешного создания поста + it 'Create new post and check notice' do + 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' + 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 + 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 + + # Тест проверяет что после удаления пост не выводится в списке. + # Тест падает, так как посты не удаляются и окно с алертом не появляется + 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(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 + + # Проверяет сообщение после успешного редактирования + 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/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/edit_post_page.rb b/spec/support/page_objects/edit_post_page.rb new file mode 100644 index 0000000..0c52b86 --- /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 :update_post_button, 'input[type=submit]' +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 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..3954596 --- /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, '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