# 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