require "rails_helper"

RSpec.describe "logs/edit.html.erb" do
  before do
    Timecop.freeze(Time.zone.local(2024, 3, 1))
    Singleton.__init__(FormHandler)
    assign(:log, log)
    sign_in create(:user, :support)
  end

  after do
    Timecop.return
    Singleton.__init__(FormHandler)
  end

  context "when log is in progress" do
    let(:log) { create(:lettings_log, :in_progress) }

    it "there is no link back to log type root" do
      render

      fragment = Capybara::Node::Simple.new(rendered)

      expect(fragment).not_to have_link(text: "Back to lettings logs", href: "/lettings-logs")
    end

    it "has link 'Delete log'" do
      render

      fragment = Capybara::Node::Simple.new(rendered)

      expect(fragment).to have_link(text: "Delete log", href: "/lettings-logs/#{log.id}/delete-confirmation")
    end
  end

  context "when log is completed" do
    context "when showing a lettings log" do
      let(:log) { create(:lettings_log, :completed) }

      it "has link 'Back to lettings logs'" do
        render

        fragment = Capybara::Node::Simple.new(rendered)

        expect(fragment).to have_link(text: "Back to lettings logs", href: "/lettings-logs")
      end

      it "has link 'Delete log'" do
        render

        fragment = Capybara::Node::Simple.new(rendered)

        expect(fragment).to have_link(text: "Delete log", href: "/lettings-logs/#{log.id}/delete-confirmation")
      end
    end

    context "when showing a sales log" do
      let(:log) { create(:sales_log, :completed) }

      it "has link 'Back to sales logs'" do
        render

        fragment = Capybara::Node::Simple.new(rendered)

        expect(fragment).to have_link(text: "Back to sales logs", href: "/sales-logs")
      end

      it "has link 'Delete log'" do
        render

        fragment = Capybara::Node::Simple.new(rendered)

        expect(fragment).to have_link(text: "Delete log", href: "/sales-logs/#{log.id}/delete-confirmation")
      end
    end

    context "when lettings log is bulk uploaded" do
      let(:bulk_upload) { create(:bulk_upload, :lettings) }
      let(:log) { create(:lettings_log, :completed, bulk_upload:, creation_method: "bulk upload") }

      it "has link 'Back to uploaded logs'" do
        render

        fragment = Capybara::Node::Simple.new(rendered)

        expect(fragment).to have_link(text: "Back to uploaded logs", href: "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/resume")
      end

      it "has link 'Delete log'" do
        render

        fragment = Capybara::Node::Simple.new(rendered)

        expect(fragment).to have_link(text: "Delete log", href: "/lettings-logs/#{log.id}/delete-confirmation")
      end
    end

    context "when lettings log is bulk uploaded without a bulk upload id" do
      let(:log) { create(:lettings_log, :completed, bulk_upload: nil, creation_method: "bulk upload") }

      it "does not have link 'Back to uploaded logs'" do
        render

        fragment = Capybara::Node::Simple.new(rendered)

        expect(fragment).not_to have_link(text: "Back to uploaded logs")
      end
    end

    context "when sales log is bulk uploaded" do
      let(:bulk_upload) { create(:bulk_upload, :sales) }
      let(:log) { create(:sales_log, :completed, bulk_upload:, creation_method: "bulk upload") }

      it "has link 'Back to uploaded logs'" do
        render

        fragment = Capybara::Node::Simple.new(rendered)

        expect(fragment).to have_link(text: "Back to uploaded logs", href: "/sales-logs/bulk-upload-results/#{bulk_upload.id}/resume")
      end

      it "has link 'Delete log'" do
        render

        fragment = Capybara::Node::Simple.new(rendered)

        expect(fragment).to have_link(text: "Delete log", href: "/sales-logs/#{log.id}/delete-confirmation")
      end
    end
  end
end