# frozen_string_literal: true

require "rails_helper"


RSpec.describe MrCommon::Reminders::RemindersController, type: :controller do
  before(:all) do
    @user = create(:user)
  end

  describe "as admin" do
    before(:each) do
      sign_in @user
    end

    it "#index" do
      get :index
      expect(response.status).to eq 200
    end

    it "#show" do
      reminder = create(:reminder)
      get :show, params: { id: reminder }
      expect(response.status).to eq 200
    end

    it "#edit" do
      reminder = create(:reminder)
      get :edit, params: { id: reminder }
      expect(response.status).to eq 200
    end

    it "#create" do
      reminder = attributes_for(:reminder)
      post :create, params: { reminder: reminder }
      expect(response).to redirect_to reminder_path(MrCommon::Reminder.last)
    end

    it "#update" do
      reminder = create(:reminder)
      reminder_params = attributes_for(:reminder, summary: "new summary")
      post :update, params: { id: reminder, reminder: reminder_params }
      expect(response).to redirect_to reminder_path(reminder)
    end

    it "#destroy" do
      reminder = create(:reminder)
      get :destroy, params: { id: reminder }
      expect(response).to redirect_to reminders_path
    end
  end

  describe "as anonymous" do
    it "#index" do
      get :index
      expect(response.status).to eq 302
    end

    it "#show" do
      reminder = create(:reminder)
      get :show, params: { id: reminder }
      expect(response.status).to eq 302
    end

    it "#edit" do
      reminder = create(:reminder)
      get :edit, params: { id: reminder }
      expect(response.status).to eq 302
    end

    it "#update" do
      reminder = create(:reminder)
      reminder_params = attributes_for(:reminder, first_name: "new summary")
      post :update, params: { id: reminder, reminder: reminder_params }
      expect(response).to redirect_to main_app.new_user_session_path
    end

    it "#create" do
      reminder = attributes_for(:reminder)
      post :create, params: { reminder: reminder }
      expect(response).to redirect_to main_app.new_user_session_path
    end

    it "#destroy" do
      reminder = create(:reminder)
      get :destroy, params: { id: reminder }
      expect(response.status).to redirect_to main_app.new_user_session_path
    end
  end
end