discourse/spec/requests/api/categories_spec.rb

130 lines
4.1 KiB
Ruby

# frozen_string_literal: true
require "swagger_helper"
RSpec.describe "categories" do
let(:admin) { Fabricate(:admin) }
let!(:category) { Fabricate(:category, user: admin) }
before do
Jobs.run_immediately!
sign_in(admin)
end
path "/categories.json" do
post "Creates a category" do
tags "Categories"
operationId "createCategory"
consumes "application/json"
expected_request_schema = load_spec_schema("category_create_request")
parameter name: :params, in: :body, schema: expected_request_schema
produces "application/json"
response "200", "success response" do
expected_response_schema = load_spec_schema("category_create_response")
schema expected_response_schema
let(:params) { { "name" => "todo" } }
it_behaves_like "a JSON endpoint", 200 do
let(:expected_response_schema) { expected_response_schema }
let(:expected_request_schema) { expected_request_schema }
end
end
end
get "Retrieves a list of categories" do
tags "Categories"
operationId "listCategories"
consumes "application/json"
expected_request_schema = nil
parameter name: :include_subcategories, in: :query, schema: { type: :boolean, enum: [true] }
produces "application/json"
response "200", "success response" do
expected_response_schema = load_spec_schema("category_list_response")
schema expected_response_schema
let(:include_subcategories) { true }
it_behaves_like "a JSON endpoint", 200 do
let(:expected_response_schema) { expected_response_schema }
let(:expected_request_schema) { expected_request_schema }
end
end
end
end
path "/categories/{id}.json" do
put "Updates a category" do
tags "Categories"
operationId "updateCategory"
consumes "application/json"
expected_request_schema = load_spec_schema("category_create_request")
parameter name: :id, in: :path, schema: { type: :integer }
parameter name: :params, in: :body, schema: expected_request_schema
produces "application/json"
response "200", "success response" do
expected_response_schema = load_spec_schema("category_update_response")
schema expected_response_schema
let(:id) { category.id }
let(:params) { { "name" => "todo" } }
it_behaves_like "a JSON endpoint", 200 do
let(:expected_response_schema) { expected_response_schema }
let(:expected_request_schema) { expected_request_schema }
end
end
end
end
path "/c/{slug}/{id}.json" do
get "List topics" do
tags "Categories"
operationId "listCategoryTopics"
produces "application/json"
parameter name: :slug, in: :path, schema: { type: :string }
parameter name: :id, in: :path, schema: { type: :integer }
expected_request_schema = nil
produces "application/json"
response "200", "success response" do
expected_response_schema = load_spec_schema("category_topics_response")
schema expected_response_schema
let(:id) { category.id }
let(:slug) { category.slug_path.join("/") }
it_behaves_like "a JSON endpoint", 200 do
let(:expected_response_schema) { expected_response_schema }
let(:expected_request_schema) { expected_request_schema }
end
end
end
end
path "/c/{id}/show.json" do
get "Show category" do
tags "Categories"
operationId "getCategory"
consumes "application/json"
parameter name: :id, in: :path, schema: { type: :integer }
expected_request_schema = nil
produces "application/json"
response "200", "response" do
expected_response_schema = load_spec_schema("category_create_response")
schema expected_response_schema
let(:id) { category.id }
it_behaves_like "a JSON endpoint", 200 do
let(:expected_response_schema) { expected_response_schema }
let(:expected_request_schema) { expected_request_schema }
end
end
end
end
end