spec/features/questionnaire_spec.rb
include InstructorInterfaceHelperSpec
question_type = %w[Criterion Scale Dropdown Checkbox TextArea TextField UploadFile SectionHeader TableHeader ColumnHeader]
describe "Questionnaire tests for instructor interface" do
before(:each) do
assignment_setup
end
describe "Instructor login" do
it "with valid username and password" do
login_as("instructor6")
visit '/tree_display/list'
expect(page).to have_content("Manage content")
end
it "with invalid username and password" do
visit root_path
fill_in 'login_name', with: 'instructor6'
fill_in 'login_password', with: 'something'
click_button 'Sign in'
expect(page).to have_text('Your username or password is incorrect.')
end
end
def make_questionnaire private
login_as("instructor6")
visit '/questionnaires/new?model=ReviewQuestionnaire&private=' + (private ? '1' : '0')
fill_in('questionnaire_name', with: 'Review 1')
fill_in('questionnaire_min_question_score', with: '0')
fill_in('questionnaire_max_question_score', with: '5')
select(private ? 'yes' : 'no', from: 'questionnaire_private')
click_button "Create"
end
describe "Create a public review questionnaire" do
it "is able to create a public review questionnaire" do
make_questionnaire false
expect(Questionnaire.where(name: "Review 1")).to exist
end
end
describe "Create a private review questionnaire" do
it "is able to create a private review questionnaire" do
make_questionnaire true
expect(Questionnaire.where(name: "Review 1")).to exist
end
end
def load_questionnaire
login_as("instructor6")
visit '/questionnaires/new?model=ReviewQuestionnaire&private=0'
fill_in('questionnaire_name', with: 'Review n')
fill_in('questionnaire_min_question_score', with: '0')
fill_in('questionnaire_max_question_score', with: '5')
select('no', from: 'questionnaire_private')
click_button "Create"
end
def load_question question_type
load_questionnaire
fill_in('question_total_num', with: '1')
select(question_type, from: 'question_type')
click_button "Add"
end
describe "Create a review question" do
question_type.each do |q_type|
it "is able to create " + q_type + " question" do
load_question q_type
expect(page).to have_content('Remove')
click_button "Save review questionnaire"
expect(page).to have_content('All questions has been successfully saved!')
end
end
end
def edit_created_question
first("textarea[placeholder='Edit question content here']").set "Question edit"
click_button "Save review questionnaire"
expect(page).to have_content('All questions has been successfully saved!')
expect(page).to have_content('Question edit')
end
def check_deleted_question
click_on('Remove')
expect(page).to have_content('You have successfully deleted the question!')
end
def choose_check_type command_type
if command_type == 'edit'
edit_created_question
else
check_deleted_question
end
end
describe "Edit and delete a question" do
question_type.each do |q_type|
%w[edit delete].each do |q_command|
it "is able to " + q_command + " " + q_type + " question" do
load_question q_type
choose_check_type q_command
end
end
end
end
describe "Edit a review advice" do
it "is able to edit a public review advice" do
# create review advice
load_question 'Criterion'
click_button "Edit/View advice"
expect(page).to have_content('Edit an existing questionnaire')
first(:css, "textarea[id^='horizontal_'][id$='advice']").set("Advice 1")
click_button "Save and redisplay advice"
expect(page).to have_content('advice was successfully saved')
expect(page).to have_content('Advice 1')
# edit review advice
first(:css, "textarea[id^='horizontal_'][id$='advice']").set("Advice edit")
click_button "Save and redisplay advice"
expect(page).to have_content('advice was successfully saved')
expect(page).to have_content('Advice edit')
end
end
end