Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prune Comment System Tests for Faster CI #9752

Merged
merged 5 commits into from
Aug 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,53 @@ jobs:
name: system-test-screenshots
path: tmp/screenshots/*

comment-system-tests:
runs-on: ubuntu-latest
services:
redis:
image: redis
# Set health checks to wait until redis has started
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
# Maps port 6379 on service container to the host
- 6379:6379
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: 2.6.6 # Not needed with a .ruby-version file
bundler-cache: true # runs 'bundle install' and caches installed gems automatically (not working?)
- uses: nanasess/setup-chromedriver@v1.0.1
- uses: ./.github/actions/setup-test-environment
- name: Install JavaScript dependencies with Yarn
run: yarn check || yarn install --frozen-lockfile;
- name: Run webpacker setup
env:
RAILS_ENV: test
DB_PASSWORD: root
DB_PORT: ${{ job.services.mysql.ports[3306] }}
run: bundle exec rails g webpacker:install && bundle exec rails g webpacker:install:react && bundle exec rails g react:install
- name: "Comment System Tests"
env:
RAILS_ENV: test
DB_PASSWORD: root
DB_PORT: ${{ job.services.mysql.ports[3306] }}
REDIS_HOST: localhost
REDIS_PORT: 6379
run: |
export DISPLAY=:99
chromedriver --url-base=/wd/hub &
bundle exec rails test test/comment_system_tests
- name: Archive system test screenshots
uses: actions/upload-artifact@v2
with:
name: system-test-screenshots
path: tmp/screenshots/*

remove-labels:
runs-on: ubuntu-latest
needs: [add-label, unit-tests, functional-tests, integration-tests, system-tests]
Expand Down
4 changes: 2 additions & 2 deletions codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
comment:
layout: "reach, diff, flags, files"
behavior: default
after_n_builds: 4
after_n_builds: 5
require_changes: true # if true: only post the comment if coverage changes
require_base: yes # [yes :: must have a base report to post]
require_head: yes # [yes :: must have a head report to post]
Expand All @@ -27,4 +27,4 @@ codecov:
# https://docs.codecov.io/v4.3.6/docs/comparing-commits
allow_coverage_offsets: true
notify:
after_n_builds: 4
after_n_builds: 5
222 changes: 111 additions & 111 deletions test/system/comment_test.rb → test/comment_system_tests/comment_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -475,54 +475,73 @@ def get_path(page_type, path)
# checks for the list of recently active users
assert_selector('#atwho-ground-text-input-main .atwho-view .atwho-view-ul li')
end
end

# PART 3: TESTS for ALL PAGE TYPES!
#
# the page_types are: Wikis, Research Notes, and Questions
# defined in test/test_helper.rb
page_types.each do |page_type, node_name|
page_type_string = page_type.to_s
test "#{page_type_string}: IMMEDIATE image SELECT upload into REPLY comment form" do
nodes(node_name).add_comment({
uid: 5,
body: comment_text
})
nodes(node_name).add_comment({
uid: 2,
body: comment_text
})
visit get_path(page_type, nodes(node_name).path)
reply_toggles = page.all('p', text: 'Reply to this comment...')
reply_toggles[2].click
reply_dropzone_id = page.find('[id^=dropzone-small-reply-]')[:id] # ID begins with...
comment_id_num = /dropzone-small-reply-(\d+)/.match(reply_dropzone_id)[1]
# upload images
# the <inputs> that take image uploads are hidden, so reveal them:
Capybara.ignore_hidden_elements = false
# upload an image in the reply comment form
page.find('#fileinput-button-reply-' + comment_id_num).set("#{Rails.root.to_s}/public/images/pl.png")
wait_for_ajax
Capybara.ignore_hidden_elements = true
page.all('a', text: 'Preview')[0].click
assert_selector('#comment-' + comment_id_num + '-reply-section img', count: 1)
end

test "post #{page_type_string}, then comment on FRESH #{page_type_string}" do
title_text, body_text = String.new, String.new
case page_type_string
when 'note'
visit '/post'
title_text = 'Ahh, a nice fresh note'
body_text = "Can\'t wait to write in it!"
fill_in('title-input', with: title_text)
find('.wk-wysiwyg').set(body_text)
find('.ple-publish').click()
when 'question'
visit '/questions/new?&tags=question%3Ageneral'
title_text = "Let's talk condiments"
body_text = 'Ketchup or mayo?'
find("input[aria-label='Enter question']", match: :first)
.click()
.fill_in with: title_text
find('.wk-wysiwyg').set(body_text)
find('.ple-publish').click()
when 'wiki'
visit '/wiki/new'
title_text = 'pokemon'
body_text = 'Gotta catch em all!'
fill_in('title', with: title_text)
fill_in('text-input-main', with: body_text)
find('#publish').click()
visit "/wiki/#{title_text}/comments"
end
assert_selector('h1', text: title_text)
page.find("textarea#text-input-main")
.click
.fill_in with: comment_text
# preview comment
find("#toggle-preview-button-main").click
find("p", text: comment_text)
# publish comment
click_on "Publish"
find(".noty_body", text: "Comment Added!")
find("p", text: comment_text)
test "#{page_type_string}: IMMEDIATE image DRAG & DROP into REPLY comment form" do
Capybara.ignore_hidden_elements = false
visit get_path(page_type, nodes(node_name).path)
find("p", text: "Reply to this comment...").click()
# Upload the image
drop_in_dropzone("#{Rails.root.to_s}/public/images/pl.png", ".dropzone-large")
# Wait for image upload to finish
wait_for_ajax
Capybara.ignore_hidden_elements = true
# Toggle preview
reply_preview_button = page.all('.preview-btn')[0]
reply_preview_button.click()
# Make sure that image has been uploaded
page.assert_selector('.comment-preview img', count: 1)
end

test "#{page_type_string}: IMMEDIATE image CHOOSE ONE upload into REPLY comment form" do
Capybara.ignore_hidden_elements = false
visit get_path(page_type, nodes(node_name).path)
# Open reply comment form
find("p", text: "Reply to this comment...").click()
first("a", text: "choose one").click()
reply_preview_button = page.first('a', text: 'Preview')
Capybara.ignore_hidden_elements = false
# Upload the image
fileinput_element = page.first("[id^=fileinput-button-reply]")
fileinput_element.set("#{Rails.root.to_s}/public/images/pl.png")
Capybara.ignore_hidden_elements = true
wait_for_ajax
# Toggle preview
reply_preview_button.click()
# Make sure that image has been uploaded
page.assert_selector('.comment-preview img', count: 1)
end

test "#{page_type_string}: IMMEDIATE rich-text input works in MAIN form" do
visit get_path(page_type, nodes(node_name).path)
main_comment_form = page.find('h4', text: /Post comment|Post Comment/).find(:xpath, '..') # title text on wikis is 'Post comment'
main_comment_form.find("[data-original-title='Bold']").click
text_input_value = main_comment_form.find('#text-input-main').value
assert_equal(text_input_value, '****')
end

# navigate to page, immediately upload into EDIT form by SELECTing image
Expand Down Expand Up @@ -637,65 +656,54 @@ def get_path(page_type, path)
visit get_path(page_type, nodes(node_name).path)
assert_selector("#c#{comment.id}", count: 0)
end
end

test "#{page_type_string}: IMMEDIATE image SELECT upload into REPLY comment form" do
nodes(node_name).add_comment({
uid: 5,
body: comment_text
})
nodes(node_name).add_comment({
uid: 2,
body: comment_text
})
visit get_path(page_type, nodes(node_name).path)
reply_toggles = page.all('p', text: 'Reply to this comment...')
reply_toggles[2].click
reply_dropzone_id = page.find('[id^=dropzone-small-reply-]')[:id] # ID begins with...
comment_id_num = /dropzone-small-reply-(\d+)/.match(reply_dropzone_id)[1]
# upload images
# the <inputs> that take image uploads are hidden, so reveal them:
Capybara.ignore_hidden_elements = false
# upload an image in the reply comment form
page.find('#fileinput-button-reply-' + comment_id_num).set("#{Rails.root.to_s}/public/images/pl.png")
wait_for_ajax
Capybara.ignore_hidden_elements = true
page.all('a', text: 'Preview')[0].click
assert_selector('#comment-' + comment_id_num + '-reply-section img', count: 1)
end

test "#{page_type_string}: IMMEDIATE image DRAG & DROP into REPLY comment form" do
Capybara.ignore_hidden_elements = false
visit get_path(page_type, nodes(node_name).path)
find("p", text: "Reply to this comment...").click()
# Upload the image
drop_in_dropzone("#{Rails.root.to_s}/public/images/pl.png", ".dropzone-large")
# Wait for image upload to finish
wait_for_ajax
Capybara.ignore_hidden_elements = true
# Toggle preview
reply_preview_button = page.all('.preview-btn')[0]
reply_preview_button.click()
# Make sure that image has been uploaded
page.assert_selector('.comment-preview img', count: 1)
end
# PART 3: TESTS for ALL PAGE TYPES!
#
# the page_types are: Wikis, Research Notes, and Questions
# defined in test/test_helper.rb
page_types.each do |page_type, node_name|
page_type_string = page_type.to_s

test "#{page_type_string}: IMMEDIATE image CHOOSE ONE upload into REPLY comment form" do
Capybara.ignore_hidden_elements = false
visit get_path(page_type, nodes(node_name).path)
# Open reply comment form
find("p", text: "Reply to this comment...").click()
first("a", text: "choose one").click()
reply_preview_button = page.first('a', text: 'Preview')
Capybara.ignore_hidden_elements = false
# Upload the image
fileinput_element = page.first("[id^=fileinput-button-reply]")
fileinput_element.set("#{Rails.root.to_s}/public/images/pl.png")
Capybara.ignore_hidden_elements = true
wait_for_ajax
# Toggle preview
reply_preview_button.click()
# Make sure that image has been uploaded
page.assert_selector('.comment-preview img', count: 1)
test "post #{page_type_string}, then comment on FRESH #{page_type_string}" do
title_text, body_text = String.new, String.new
case page_type_string
when 'note'
visit '/post'
title_text = 'Ahh, a nice fresh note'
body_text = "Can\'t wait to write in it!"
fill_in('title-input', with: title_text)
find('.wk-wysiwyg').set(body_text)
find('.ple-publish').click()
when 'question'
visit '/questions/new?&tags=question%3Ageneral'
title_text = "Let's talk condiments"
body_text = 'Ketchup or mayo?'
find("input[aria-label='Enter question']", match: :first)
.click()
.fill_in with: title_text
find('.wk-wysiwyg').set(body_text)
find('.ple-publish').click()
when 'wiki'
visit '/wiki/new'
title_text = 'pokemon'
body_text = 'Gotta catch em all!'
fill_in('title', with: title_text)
fill_in('text-input-main', with: body_text)
find('#publish').click()
visit "/wiki/#{title_text}/comments"
end
assert_selector('h1', text: title_text)
page.find("textarea#text-input-main")
.click
.fill_in with: comment_text
# preview comment
find("#toggle-preview-button-main").click
find("p", text: comment_text)
# publish comment
click_on "Publish"
find(".noty_body", text: "Comment Added!")
find("p", text: comment_text)
end

# Cross-Wiring Bugs
Expand Down Expand Up @@ -823,14 +831,6 @@ def get_path(page_type, path)
assert_selector('#comment-preview-reply-' + reply_id_num, count: 1)
end

test "#{page_type_string}: IMMEDIATE rich-text input works in MAIN form" do
visit get_path(page_type, nodes(node_name).path)
main_comment_form = page.find('h4', text: /Post comment|Post Comment/).find(:xpath, '..') # title text on wikis is 'Post comment'
main_comment_form.find("[data-original-title='Bold']").click
text_input_value = main_comment_form.find('#text-input-main').value
assert_equal(text_input_value, '****')
end

test "#{page_type_string}: rich-text input into REPLY form isn't CROSS-WIRED with EDIT form" do
nodes(node_name).add_comment({
uid: 5,
Expand Down