mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			169 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
const assert = require("node:assert/strict");
 | 
						|
 | 
						|
const {noop} = require("./test.cjs");
 | 
						|
const $ = require("./zjquery.cjs");
 | 
						|
 | 
						|
class FakeComposeBox {
 | 
						|
    constructor() {
 | 
						|
        this.$send_message_form = $("#send_message_form");
 | 
						|
        this.$content_textarea = $("textarea#compose-textarea");
 | 
						|
        this.$preview_message_area = $("#compose .preview_message_area");
 | 
						|
 | 
						|
        // Simulate DOM relationships
 | 
						|
        this.$send_message_form.set_find_results(".message-textarea", this.$content_textarea);
 | 
						|
 | 
						|
        this.$send_message_form.set_find_results(
 | 
						|
            ".message-limit-indicator",
 | 
						|
            $(".message-limit-indicator"),
 | 
						|
        );
 | 
						|
 | 
						|
        const $message_row_stub = $.create("message_row_stub");
 | 
						|
        this.$content_textarea.closest = (selector) => {
 | 
						|
            assert.equal(selector, ".message_row");
 | 
						|
            $message_row_stub.length = 0;
 | 
						|
            return $message_row_stub;
 | 
						|
        };
 | 
						|
 | 
						|
        this.reset();
 | 
						|
    }
 | 
						|
 | 
						|
    reset() {
 | 
						|
        $(".message-limit-indicator").html("");
 | 
						|
        $(".message-limit-indicator").text("");
 | 
						|
 | 
						|
        $("#compose_banners .user_not_subscribed").length = 0;
 | 
						|
 | 
						|
        this.$content_textarea.toggleClass = noop;
 | 
						|
        this.$content_textarea.set_height(50);
 | 
						|
        this.$content_textarea.val("default message");
 | 
						|
        this.$content_textarea.trigger("blur");
 | 
						|
 | 
						|
        this.$preview_message_area.css = noop;
 | 
						|
        $(".compose-submit-button .loader").show();
 | 
						|
    }
 | 
						|
 | 
						|
    show_message_preview() {
 | 
						|
        this.$preview_message_area.show();
 | 
						|
        $("#compose .undo_markdown_preview").show();
 | 
						|
        $("#compose .markdown_preview").hide();
 | 
						|
        $("#compose").addClass("preview_mode");
 | 
						|
    }
 | 
						|
 | 
						|
    hide_message_preview() {
 | 
						|
        this.$preview_message_area.hide();
 | 
						|
        $("#compose .markdown_preview").show();
 | 
						|
        $("#compose .undo_markdown_preview").hide();
 | 
						|
        $("#compose").removeClass("preview_mode");
 | 
						|
    }
 | 
						|
 | 
						|
    textarea_val() {
 | 
						|
        return this.$content_textarea.val();
 | 
						|
    }
 | 
						|
 | 
						|
    preview_content_html() {
 | 
						|
        return $("#compose .preview_content").html();
 | 
						|
    }
 | 
						|
 | 
						|
    compose_spinner_selector() {
 | 
						|
        return ".compose-submit-button .loader";
 | 
						|
    }
 | 
						|
 | 
						|
    markdown_spinner_selector() {
 | 
						|
        return "#compose .markdown_preview_spinner";
 | 
						|
    }
 | 
						|
 | 
						|
    set_topic_val(topic_name) {
 | 
						|
        $("input#stream_message_recipient_topic").val(topic_name);
 | 
						|
    }
 | 
						|
 | 
						|
    set_textarea_val(val) {
 | 
						|
        this.$content_textarea.val(val);
 | 
						|
    }
 | 
						|
 | 
						|
    blur_textarea() {
 | 
						|
        this.$content_textarea.trigger("blur");
 | 
						|
    }
 | 
						|
 | 
						|
    show_submit_button_spinner() {
 | 
						|
        $(".compose-submit-button .loader").show();
 | 
						|
    }
 | 
						|
 | 
						|
    set_textarea_toggle_class_function(f) {
 | 
						|
        this.$content_textarea.toggleClass = f;
 | 
						|
    }
 | 
						|
 | 
						|
    is_recipient_not_subscribed_banner_visible() {
 | 
						|
        return $("#compose_banners .recipient_not_subscribed").visible();
 | 
						|
    }
 | 
						|
 | 
						|
    is_textarea_focused() {
 | 
						|
        return this.$content_textarea.is_focused();
 | 
						|
    }
 | 
						|
 | 
						|
    is_submit_button_spinner_visible() {
 | 
						|
        return $(this.compose_spinner_selector()).visible();
 | 
						|
    }
 | 
						|
 | 
						|
    trigger_submit_handler_on_compose_form(event) {
 | 
						|
        $("#compose form").get_on_handler("submit")(event);
 | 
						|
    }
 | 
						|
 | 
						|
    click_on_markdown_preview_icon(event) {
 | 
						|
        $("#compose").get_on_handler("click", ".markdown_preview")(event);
 | 
						|
    }
 | 
						|
 | 
						|
    click_on_undo_markdown_preview_icon(event) {
 | 
						|
        $("#compose").get_on_handler("click", ".undo_markdown_preview")(event);
 | 
						|
    }
 | 
						|
 | 
						|
    click_on_upload_attachment_icon(event) {
 | 
						|
        $("#compose").get_on_handler("click", ".compose_upload_file")(event);
 | 
						|
    }
 | 
						|
 | 
						|
    set_click_handler_for_upload_file_input_element(f) {
 | 
						|
        $("#compose .file_input").on("click", f);
 | 
						|
    }
 | 
						|
 | 
						|
    assert_preview_mode_is_off() {
 | 
						|
        assert.ok(!this.$preview_message_area.visible());
 | 
						|
        assert.ok(!$("#compose .undo_markdown_preview").visible());
 | 
						|
        assert.ok($("#compose .markdown_preview").visible());
 | 
						|
        assert.ok(!$("#compose").hasClass("preview_mode"));
 | 
						|
    }
 | 
						|
 | 
						|
    assert_preview_mode_is_on() {
 | 
						|
        assert.ok(this.$preview_message_area.visible());
 | 
						|
        assert.ok(!$("#compose .markdown_preview").visible());
 | 
						|
        assert.ok($("#compose .undo_markdown_preview").visible());
 | 
						|
        assert.ok($("#compose").hasClass("preview_mode"));
 | 
						|
    }
 | 
						|
 | 
						|
    assert_message_size_is_over_the_limit(desired_html) {
 | 
						|
        // Indicator should show red colored text
 | 
						|
        assert.equal($(".message-limit-indicator").html(), desired_html);
 | 
						|
 | 
						|
        assert.ok(this.$content_textarea.hasClass("textarea-over-limit"));
 | 
						|
        assert.ok($(".message-limit-indicator").hasClass("textarea-over-limit"));
 | 
						|
        assert.ok(!$("#compose-send-button").hasClass("disabled-message-send-controls"));
 | 
						|
    }
 | 
						|
 | 
						|
    assert_message_size_is_under_the_limit(desired_html) {
 | 
						|
        // Work around the quirk that our validation code
 | 
						|
        // arbitrarily switches between html() and text(),
 | 
						|
        // and zjquery doesn't unify text and html.
 | 
						|
        if (desired_html) {
 | 
						|
            assert.equal($(".message-limit-indicator").html(), desired_html);
 | 
						|
        } else {
 | 
						|
            assert.equal($(".message-limit-indicator").text(), "");
 | 
						|
        }
 | 
						|
 | 
						|
        assert.ok(!this.$content_textarea.hasClass("textarea-over-limit"));
 | 
						|
        assert.ok(!$(".message-limit-indicator").hasClass("textarea-over-limit"));
 | 
						|
        assert.ok(!$("#compose-send-button").hasClass("disabled-message-send-controls"));
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
module.exports = {FakeComposeBox};
 |