ece517-p3/expertiza

View on GitHub
spec/features/topic_suggestion_spec.rb

Summary

Maintainability
A
0 mins
Test Coverage
########################################

#   Case 1: One team is on the waitlist. They sent a suggestion for new topic and they want to choose their suggested topic. After their suggested topic is approved, they should leave the waitlist and hold their suggested topic;

########################################

describe "Assignment Topic Suggestion Test" do
  before(:each) do
    create(:assignment, name: 'Assignment_suggest_topic', allow_suggestions: true)
    create_list(:participant, 3)
    create(:assignment_node)
    create(:deadline_type, name: "submission")
    create(:deadline_type, name: "review")
    create(:deadline_type, name: "metareview")
    create(:deadline_type, name: "drop_topic")
    create(:deadline_type, name: "signup")
    create(:deadline_type, name: "team_formation")
    create(:deadline_right)
    create(:deadline_right, name: 'Late')
    create(:deadline_right, name: 'OK')
    create :assignment_due_date
    create(:assignment_due_date, deadline_type: DeadlineType.where(name: 'review').first, due_at: DateTime.now.in_time_zone + 2.days)
  end

  describe "topic_suggestion" do
    it "Instructor set an assignment which allow student suggest topic and register student2065" do
      # login as student2065, Note by Xing Pan: modify spec/factories/factories.rb to generate student11 and call "create student" at beginning
      user = User.find_by(name: 'student2064')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      expect(page).to have_content "Assignment_suggest_topic"

      # student2065 suggest topic
      click_link('Assignment_suggest_topic')
      expect(page).to have_content "Suggest a topic"
      click_link('Suggest a topic')
      fill_in 'suggestion_title', with: 'suggested_topic'
      fill_in 'suggestion_description', with: 'suggested_description'
      click_button 'Submit'
      expect(page).to have_content "Thank you for your suggestion"

      user = User.find_by(name: 'instructor6')
      stub_current_user(user, user.role.name, user.role)

      # instructor approve the suggestion topic
      # DUE date need to be added here
      visit '/suggestion/list?id=1&type=Assignment'
      expect(page).to have_content "Assignment_suggest_topic"
      click_link('View')
      expect(page).to have_content "suggested_description"
      click_button 'Approve suggestion'
      expect(page).to have_content "The suggestion was successfully approved."
    end

    it " student2064 hold suggest topic and suggest a new one and student2065 enroll on waitlist of suggested topic", js: true do
      # login_as "student2064"
      user = User.find_by(name: 'student2064')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      expect(page).to have_content "Assignment_suggest_topic"

      # student2064 suggest topic
      click_link('Assignment_suggest_topic')
      expect(page).to have_content "Suggest a topic"
      click_link('Suggest a topic')
      fill_in 'suggestion_title', with: 'suggested_topic'
      fill_in 'suggestion_description', with: 'suggested_description'
      click_button 'Submit'
      expect(page).to have_content "Thank you for your suggestion"

      user = User.find_by(name: 'instructor6')
      stub_current_user(user, user.role.name, user.role)

      # instructor approve the suggestion topic
      visit '/suggestion/list?id=1&type=Assignment'
      expect(page).to have_content "Suggested topics for Assignment_suggest_topic"
      expect(page).to have_content "suggested_topic"
      click_link('View')
      expect(page).to have_content "suggested_description"
      click_button 'Approve suggestion'
      expect(page).to have_content "The suggestion was successfully approved."

      # case 2 student already have topic switch to new topic
      # need two students one to be on the waitlist of previous suggested topic,
      # the other one (student2065) is holding it and suggest another topic and wish to switch to the new one
      user = User.find_by(name: 'student2065')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      click_link('Assignment_suggest_topic')
      click_link('Signup sheet')
      first("img[title='Signup']").click

      # log in student2064
      user = User.find_by(name: 'student2064')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      click_link('Assignment_suggest_topic')
      expect(page).to have_content "Suggest a topic"
      click_link('Suggest a topic')
      fill_in 'suggestion_title', with: 'suggested_topic2_will_switch'
      fill_in 'suggestion_description', with: 'suggested_description_2'
      click_button 'Submit'
      expect(page).to have_content "Thank you for your suggestion"

      # login_as instructor6 to approve the 2nd suggested topic
      user = User.find_by(name: 'instructor6')
      stub_current_user(user, user.role.name, user.role)

      # instructor approve the suggestion topic
      visit '/tree_display/list'
      visit '/suggestion/list?id=1&type=Assignment'
      expect(page).to have_content "Suggested topics for Assignment_suggest_topic"
      expect(page).to have_content "suggested_topic2_will_switch"
      # find link for new suggested view
      visit '/suggestion/2'
      # click_link('View')
      expect(page).to have_content "suggested_description"
      click_button 'Approve suggestion'
      expect(page).to have_content "The suggestion was successfully approved."

      # login as student 2064 to switch to new approved topic
      user = User.find_by(name: 'student2064')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      click_link('Assignment_suggest_topic')
      click_link('Signup sheet')
      expect(page).to have_content "Your approved suggested topic"
      expect(page).to have_content "suggested_topic"
      expect(page).to have_content "suggested_topic2_will_switch"
      first("img[title='Switch Topic']").click

      # login as student 2065 to see if it's holding the topic rather than on the wait list
      user = User.find_by(name: 'student2065')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      expect(page).to have_content "suggested_topic"

      # login as studnet 2064 to see if it's already shifted to the new suggested topic
      user = User.find_by(name: 'student2064')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      expect(page).to have_content "suggested_topic2_will_switch"
    end

    ########################################
    # Case 3:
    # One team is holding a topic. They sent a suggestion for new topic, and keep themselves in old topic
    ########################################
    it "student2065 hold suggest topic and suggest a new one, but wish to stay in the old topic", js: true do
      # login_as "student2065"
      user = User.find_by(name: 'student2065')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      expect(page).to have_content "Assignment_suggest_topic"

      # student2065 suggest topic
      click_link('Assignment_suggest_topic')
      expect(page).to have_content "Suggest a topic"
      click_link('Suggest a topic')
      fill_in 'suggestion_title', with: 'suggested_topic'
      fill_in 'suggestion_description', with: 'suggested_description'
      click_button 'Submit'
      expect(page).to have_content "Thank you for your suggestion"

      # login_as "instructor6"
      user = User.find_by(name: 'instructor6')
      stub_current_user(user, user.role.name, user.role)

      # instructor approve the suggestion topic
      # DUE date need to be added here
      visit '/suggestion/list?id=1&type=Assignment'
      click_link('View')
      expect(page).to have_content "suggested_description"
      click_button 'Approve suggestion'
      expect(page).to have_content "The suggestion was successfully approved."

      ######################################
      # One team is holding a topic. They sent a suggestion for new topic
      ######################################
      # login_as "student2065"
      user = User.find_by(name: 'student2065')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      expect(page).to have_content "Assignment_suggest_topic"

      # student2065 suggest topic
      click_link('Assignment_suggest_topic')
      expect(page).to have_content "Suggest a topic"
      click_link('Suggest a topic')
      fill_in 'suggestion_title', with: 'suggested_topic2_without_switch'
      fill_in 'suggestion_description', with: 'suggested_description2_without_switch'
      find('#suggestion_signup_preference').find(:xpath, 'option[2]').select_option
      click_button 'Submit'
      expect(page).to have_content "Thank you for your suggestion"

      # login_as "instructor6"
      user = User.find_by(name: 'instructor6')
      stub_current_user(user, user.role.name, user.role)

      # instructor approve the suggestion topic
      visit '/tree_display/list'
      visit '/suggestion/list?id=1&type=Assignment'
      expect(page).to have_content "Suggested topics for Assignment_suggest_topic"
      expect(page).to have_content "suggested_topic2_without_switch"
      find(:xpath, "//tr[contains(.,'suggested_topic2_without_switch')]/td/a", text: 'View').click
      # click_link('View')

      expect(page).to have_content "suggested_description2_without_switch"
      click_button 'Approve suggestion'
      expect(page).to have_content "The suggestion was successfully approved."

      # login_as "student2065"
      user = User.find_by(name: 'student2065')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      expect(page).to have_content "Assignment_suggest_topic"
      click_link('Assignment_suggest_topic')
      expect(page).to have_content "Signup sheet"
      click_link('Signup sheet')
      expect(page).to have_content "suggested_topic2_without_switch"
      # click_link('publish_approved_suggested_topic')
      visit '/sign_up_sheet/publish_approved_suggested_topic/2?assignment_id=1'
      # find(:xpath, "//tr[contains(.,'suggested_topic2_without_switch')]/td/a", :figure=>"Publish Topic").click
      visit '/student_task/list'
      expect(page).to have_content "suggested_topic"

      # login_as "student2064"
      user = User.find_by(name: 'student2064')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      expect(page).to have_content "Assignment_suggest_topic"
      click_link('Assignment_suggest_topic')
      expect(page).to have_content "Signup sheet"
      click_link('Signup sheet')
      expect(page).to have_content " suggested_topic2_without_switch"
      find(:xpath, "(//img[@title='Signup'])[2]").click
      visit '/student_task/list'
      expect(page).to have_content " suggested_topic2_without_switch"
    end

    it "professor could approve anonymous suggestion topic" do
      # login_as "student2064"
      user = User.find_by(name: 'student2064')
      stub_current_user(user, user.role.name, user.role)
      visit '/student_task/list'
      expect(page).to have_content "Assignment_suggest_topic"

      # student2064 suggest topic
      click_link('Assignment_suggest_topic')
      expect(page).to have_content "Suggest a topic"
      click_link('Suggest a topic')
      fill_in 'suggestion_title', with: 'suggested_topic'
      fill_in 'suggestion_description', with: 'suggested_description'
      find(:xpath, "//input[@name='suggestion_anonymous']").click
      click_button 'Submit'
      expect(page).to have_content "You have submitted an anonymous suggestion."

      user = User.find_by(name: 'instructor6')
      stub_current_user(user, user.role.name, user.role)

      # instructor approve the suggestion topic
      visit '/suggestion/list?id=1&type=Assignment'
      expect(page).to have_content "Suggested topics for Assignment_suggest_topic"
      expect(page).to have_content "suggested_topic"
      click_link('View')
      expect(page).to have_content "suggested_description"
      click_button 'Approve suggestion'
      expect(page).to have_content "The suggestion was successfully approved."
    end
  end
end