# frozen_string_literal: true require "spec_helper" describe DiscourseApi::API::Categories do subject { DiscourseApi::Client.new("#{host}", "test_d7fd0429940", "test_user") } describe "#categories" do before do stub_get("#{host}/categories.json").to_return( body: fixture("categories.json"), headers: { content_type: "application/json", }, ) end it "requests the correct resource" do subject.categories expect(a_get("#{host}/categories.json")).to have_been_made end it "returns the requested categories" do categories = subject.categories expect(categories).to be_an Array expect(categories.first).to be_a Hash end it "returns the requested categories with hash arg" do categories = subject.categories({}) expect(categories).to be_an Array expect(categories.first).to be_a Hash end end describe "#categories_full" do before do stub_get("#{host}/categories.json").to_return( body: fixture("categories.json"), headers: { content_type: "application/json", }, ) end it "requests the correct resource" do subject.categories expect(a_get("#{host}/categories.json")).to have_been_made end it "returns the entire categories response" do categories = subject.categories_full expect(categories).to be_a Hash expect(categories).to have_key "category_list" expect(categories).to have_key "featured_users" end end describe "#category_latest_topics" do before do stub_get("#{host}/c/category-slug/l/latest.json").to_return( body: fixture("category_latest_topics.json"), headers: { content_type: "application/json", }, ) end it "returns the latest topics in a category" do latest_topics = subject.category_latest_topics(category_slug: "category-slug") expect(latest_topics).to be_an Array end end describe "#category_latest_topics_full" do before do stub_get("#{host}/c/category-slug/l/latest.json").to_return( body: fixture("category_latest_topics.json"), headers: { content_type: "application/json", }, ) end it "returns the entire latest topics in a category response" do latest_topics = subject.category_latest_topics_full(category_slug: "category-slug") expect(latest_topics).to be_a Hash expect(latest_topics).to have_key "topic_list" expect(latest_topics).to have_key "users" end end describe "#category_top_topics" do before do stub_get("#{host}/c/category-slug/l/top.json").to_return( body: fixture("category_topics.json"), headers: { content_type: "application/json", }, ) end it "returns the top topics in a category" do topics = subject.category_top_topics("category-slug") expect(topics).to be_an Array end end describe "#category_top_topics_full" do before do stub_get("#{host}/c/category-slug/l/top.json").to_return( body: fixture("category_topics.json"), headers: { content_type: "application/json", }, ) end it "returns the entire top topics in a category response" do topics = subject.category_top_topics_full("category-slug") expect(topics).to be_a Hash expect(topics).to have_key "topic_list" expect(topics).to have_key "users" end end describe "#category_new_topics" do before do stub_get("#{host}/c/category-slug/l/new.json").to_return( body: fixture("category_topics.json"), headers: { content_type: "application/json", }, ) end it "returns the new topics in a category" do topics = subject.category_new_topics("category-slug") expect(topics).to be_an Array end end describe "#category_new_topics_full" do before do stub_get("#{host}/c/category-slug/l/new.json").to_return( body: fixture("category_topics.json"), headers: { content_type: "application/json", }, ) end it "returns the new topics in a category" do topics = subject.category_new_topics_full("category-slug") expect(topics).to be_a Hash expect(topics).to have_key "topic_list" expect(topics).to have_key "users" end end describe "#category_new_category" do before do stub_post("#{host}/categories") subject.create_category( name: "test_category", color: "283890", text_color: "FFFFFF", description: "This is a description", permissions: { "group_1" => 1, "admins" => 1, }, ) end it "makes a create category request" do expect( a_post("#{host}/categories").with( body: "color=283890&description=This+is+a+description&name=test_category&parent_category_id&permissions%5Badmins%5D=1&permissions%5Bgroup_1%5D=1&text_color=FFFFFF", ), ).to have_been_made end end describe "#category_set_user_notification" do before do stub_post("#{host}/category/1/notifications").to_return( body: fixture("notification_success.json"), headers: { content_type: "application/json", }, ) end it "makes the post request" do response = subject.category_set_user_notification(id: 1, notification_level: 3) expect(a_post("#{host}/category/1/notifications")).to have_been_made expect(response["success"]).to eq("OK") end end describe "#category_set_user_notification_level" do before do stub_post("#{host}/category/1/notifications").to_return( body: fixture("notification_success.json"), headers: { content_type: "application/json", }, ) end it "makes the post request" do response = subject.category_set_user_notification_level(1, notification_level: 3) expect( a_post("#{host}/category/1/notifications").with(body: "notification_level=3"), ).to have_been_made expect(response["success"]).to eq("OK") end end end