mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
This commit allows us to set the channel slug when creating new chat channels. As well as this, it introduces a new `SlugsController` which can generate a slug using `Slug.for` and a name string for input. We call this after the user finishes typing the channel name (debounced) and fill in the autogenerated slug in the background, and update the slug input placeholder. This autogenerated slug is used by default, but if the user writes anything else in the input it will be used instead.
62 lines
1.7 KiB
Ruby
62 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe SlugsController do
|
|
fab!(:current_user) { Fabricate(:user, trust_level: TrustLevel[4]) }
|
|
|
|
describe "#generate" do
|
|
let(:name) { "Arts & Media" }
|
|
|
|
context "when user not logged in" do
|
|
it "returns a 403 error" do
|
|
get "/slugs/generate.json?name=#{name}"
|
|
expect(response.status).to eq(403)
|
|
end
|
|
end
|
|
|
|
context "when user is logged in" do
|
|
before { sign_in(current_user) }
|
|
|
|
it "generates a slug from the name" do
|
|
get "/slugs/generate.json", params: { name: name }
|
|
expect(response.status).to eq(200)
|
|
expect(response.parsed_body["slug"]).to eq(Slug.for(name, ""))
|
|
end
|
|
|
|
it "rate limits" do
|
|
RateLimiter.enable
|
|
|
|
stub_const(SlugsController, "MAX_SLUG_GENERATIONS_PER_MINUTE", 1) do
|
|
get "/slugs/generate.json?name=#{name}"
|
|
get "/slugs/generate.json?name=#{name}"
|
|
end
|
|
|
|
expect(response.status).to eq(429)
|
|
end
|
|
|
|
it "requires name" do
|
|
get "/slugs/generate.json"
|
|
expect(response.status).to eq(400)
|
|
end
|
|
|
|
context "when user is not TL4 or higher" do
|
|
before { current_user.change_trust_level!(1) }
|
|
|
|
it "returns a 403 error" do
|
|
get "/slugs/generate.json?name=#{name}"
|
|
expect(response.status).to eq(403)
|
|
end
|
|
end
|
|
|
|
context "when user is admin" do
|
|
fab!(:current_user) { Fabricate(:admin) }
|
|
|
|
it "generates a slug from the name" do
|
|
get "/slugs/generate.json", params: { name: name }
|
|
expect(response.status).to eq(200)
|
|
expect(response.parsed_body["slug"]).to eq(Slug.for(name, ""))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|