import {
  acceptance,
  exists,
  updateCurrentUser,
} from "discourse/tests/helpers/qunit-helpers";
import { test } from "qunit";
import { visit } from "@ember/test-helpers";
import { directMessageChannels } from "discourse/plugins/chat/chat-fixtures";
import { cloneJSON } from "discourse-common/lib/object";

acceptance(
  "Discourse Chat - Chat Channels list - no joinable public channels",
  function (needs) {
    needs.user({ has_chat_enabled: true, has_joinable_public_channels: false });

    needs.settings({
      chat_enabled: true,
      navigation_menu: "legacy",
    });

    needs.pretender((server, helper) => {
      server.get("/chat/chat_channels.json", () => {
        return helper.response({
          public_channels: [],
          direct_message_channels: cloneJSON(directMessageChannels).mapBy(
            "chat_channel"
          ),
          message_bus_last_ids: {
            channel_metadata: 0,
            channel_edits: 0,
            channel_status: 0,
            new_channel: 0,
            user_tracking_state: 0,
          },
        });
      });

      server.get("/chat/:id/messages.json", () => {
        return helper.response({
          chat_messages: [],
          meta: { can_chat: true },
        });
      });
    });

    test("Public chat channels section visibility", async function (assert) {
      await visit("/chat");

      assert.ok(
        exists(".public-channels-section"),
        "it shows the section for staff"
      );

      updateCurrentUser({ admin: false, moderator: false });

      assert.notOk(
        exists(".public-channels-section"),
        "it doesn’t show the section for regular user"
      );
    });
  }
);