require "rails_helper"

RSpec.describe "ApiSecretsCreate", type: :request do
  let(:user) { create(:user) }

  before { sign_in user }

  describe "POST /users/api_secrets" do
    context "when create succeeds" do
      let(:valid_params) { { description: "My Test 3rd Party App" } }

      it "creates an ApiSecret for the user" do
        expect { post "/users/api_secrets", params: { api_secret: valid_params } }.
          to change { user.api_secrets.count }.by 1
      end

      it "sets the description" do
        post "/users/api_secrets", params: { api_secret: valid_params }
        expect(user.api_secrets.last.description).to eq valid_params[:description]
      end

      it "flashes a message containing the token" do
        post "/users/api_secrets", params: { api_secret: valid_params }
        expect(flash[:notice]).to include(ApiSecret.last.secret)
        expect(flash[:error]).to be_nil
      end
    end

    context "when create fails" do
      let(:invalid_params) { { description: nil } } # Force model validation error

      it "does not create the ApiSecret" do
        expect { post "/users/api_secrets", params: { api_secret: invalid_params } }.
          not_to(change { user.api_secrets.count })
      end

      it "flashes an error message" do
        post "/users/api_secrets", params: { api_secret: invalid_params }
        expect(flash[:error]).to be_truthy
        expect(flash[:notice]).to be_nil
      end
    end
  end
end
