blob: c406ef48ab21583e1ca4ef9006617e4d41c77fa5 [file] [log] [blame]
#
# component tests for client side forms
#
require_relative 'spec_helper'
require_relative 'vue_server'
describe "forms", type: :feature, server: :vue do
#
# Comment form
#
describe "comment form" do
it "has an add-comment form with a disabled Save button" do
on_vue_server do
class TestCommentForm < Vue
def render
_AddComment(item: {}, server: {pending: {}, initials: 'sr'})
end
end
Vue.renderResponse(TestCommentForm, response)
end
expect(page).to have_selector '.modal#comment-form'
expect(page).to have_selector '.modal .modal-dialog .modal-header h4',
text: 'Enter a comment'
expect(page).to have_selector '.modal-body input[value="sr"]'
expect(page).not_to have_selector '.modal-footer .btn-warning',
text: 'Delete'
expect(page).to have_selector '.modal-footer .btn-primary[disabled]',
text: 'Save'
end
it "should enable Save button after input" do
on_vue_server do
item = {}
server = {pending: {}, initials: 'sr'}
class TestCommentForm < Vue
def render
_AddComment(item: item, server: server)
end
end
app = Vue.renderApp(TestCommentForm)
node = app.querySelector('#comment-text')
node.value = 'Good job!'
node.dispatchEvent(Event.new('input'))
Vue.nextTick { response.end app.outerHTML }
end
expect(page).to have_selector '.modal-footer .btn-warning', text: 'Delete'
expect(page).to have_selector \
'.modal-footer .btn-primary:not([disabled])', text: 'Save'
end
end
#
# Post form
#
describe "post form" do
it "should indicate when a reflow is needed" do
parsed = Agenda.parse 'board_agenda_2015_02_18.txt', :quick
@item = parsed.find {|item| item['title'] == 'Executive Vice President'}
on_vue_server do
item = Agenda.new(@item)
class TestPostForm < Vue
def render
_Post(item: item, button: 'edit report')
end
end
Vue.renderResponse(TestPostForm, response)
end
expect(find('#post-report-text').value).to match(/to answer\nquestions/)
expect(page).to have_selector '.modal-footer .btn-danger',
text: 'Reflow'
end
it "should perform a reflow" do
parsed = Agenda.parse 'board_agenda_2015_02_18.txt', :quick
@item = parsed.find {|item| item['title'] == 'Executive Vice President'}
on_vue_server do
item = Agenda.new(@item)
class TestPost < Vue
def render
_Post(item: item, button: 'edit report')
end
end
app = Vue.renderApp(TestPost)
button = app.querySelector('.btn-danger')
button.dispatchEvent(Event.new('click'))
Vue.nextTick { response.end app.outerHTML }
end
expect(find('#post-report-text').value).to match(/to\nanswer questions/)
expect(page).to have_selector '.modal-footer .btn-default',
text: 'Reflow'
end
end
#
# Commit form
#
describe "commit form" do
it "should generate a default commit message" do
@parsed = Agenda.parse 'board_agenda_2015_02_18.txt', :quick
on_vue_server do
Agenda.load(@parsed)
server = {pending: {approved: ['7'], comments: {I: 'Nice report!'}}}
class TestCommit < Vue
def render
_Commit(item: {}, server: server)
end
end
Vue.renderResponse TestCommit, response
end
expect(page).to have_selector '#commit-text',
text: "Approve W3C Relations\nComment on BookKeeper".gsub(/\s+/, ' ')
end
end
end