# frozen_string_literal: true

require 'rails_helper'

describe "signout" do
  let(:member) { create(:member) }

  it "redirect to previous page after signout" do
    visit crops_path # some random page
    click_link 'Sign in'
    fill_in 'Login', with: member.login_name
    fill_in 'Password', with: member.password
    click_button 'Sign in'
    click_link member.login_name
    click_link 'Sign out'
    expect(page).to have_current_path crops_path, ignore_query: true
  end

  shared_examples "sign-in redirects" do |path|
    it "after signout, redirect to signin page if page needs authentication" do
      visit path
      expect(page).to have_current_path new_member_session_path, ignore_query: true
      # expect(page).to have_http_status(200)
      fill_in 'Login', with: member.login_name
      fill_in 'Password', with: member.password
      click_button 'Sign in'
      # expect(page).to have_http_status(200)
      expect(page).to have_current_path path, ignore_query: true
      click_link member.login_name
      click_link 'Sign out'
      # expect(page).to have_http_status(200)
      expect(page).to have_current_path new_member_session_path, ignore_query: true
    end
  end

  describe 'after signout, redirect to signin page if page needs authentication' do
    include_examples "sign-in redirects", "/plantings/new"
    include_examples "sign-in redirects", "/harvests/new"
    include_examples "sign-in redirects", "/posts/new"
    include_examples "sign-in redirects", "/gardens/new"
    include_examples "sign-in redirects", "/seeds/new"
  end

  it 'photos' do
    garden = create(:garden, owner: member)
    visit "/photos/new?id=#{garden.id}&type=garden"
    expect(page).to have_current_path new_member_session_path, ignore_query: true
    # expect(page).to have_http_status(200)
    # photos/new needs id&type params,
    # but these are stripped after signing in
  end
end
