mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	Moves the get_demo_organization_deadline_days_remaining helper from "web/src/navbar_alerts.ts" to "web/src/demo_organizations_ui.ts". Prep commit for updating the navbar alert for demo organization to have a button that opens the modal for converting the organization to a permanent organization.
		
			
				
	
	
		
			155 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
const assert = require("node:assert/strict");
 | 
						|
 | 
						|
const {addDays} = require("date-fns");
 | 
						|
 | 
						|
const {mock_esm, zrequire} = require("./lib/namespace.cjs");
 | 
						|
const {run_test} = require("./lib/test.cjs");
 | 
						|
const {page_params} = require("./lib/zpage_params.cjs");
 | 
						|
 | 
						|
const desktop_notifications = mock_esm("../src/desktop_notifications");
 | 
						|
const unread = mock_esm("../src/unread");
 | 
						|
const util = mock_esm("../src/util");
 | 
						|
 | 
						|
const {localstorage} = zrequire("localstorage");
 | 
						|
const navbar_alerts = zrequire("navbar_alerts");
 | 
						|
const {set_current_user, set_realm} = zrequire("state_data");
 | 
						|
 | 
						|
const current_user = {};
 | 
						|
set_current_user(current_user);
 | 
						|
const realm = {};
 | 
						|
set_realm(realm);
 | 
						|
 | 
						|
function test(label, f) {
 | 
						|
    run_test(label, (helpers) => {
 | 
						|
        window.localStorage.clear();
 | 
						|
        f(helpers);
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
test("should_show_desktop_notifications_banner", ({override}) => {
 | 
						|
    const ls = localstorage();
 | 
						|
 | 
						|
    // Show desktop notifications banner when following conditions are suitable:
 | 
						|
    // - Notification permission is not already granted.
 | 
						|
    // - The user is not a spectator.
 | 
						|
    // - The device is not mobile.
 | 
						|
    // - Notification permission is not denied.
 | 
						|
    // - The user has not said to never show banner on this device again.
 | 
						|
    ls.set("dontAskForNotifications", undefined);
 | 
						|
    page_params.is_spectator = false;
 | 
						|
    override(util, "is_mobile", () => false);
 | 
						|
    override(desktop_notifications, "granted_desktop_notifications_permission", () => false);
 | 
						|
    override(desktop_notifications, "permission_state", () => "default");
 | 
						|
    assert.equal(navbar_alerts.should_show_desktop_notifications_banner(ls), true);
 | 
						|
 | 
						|
    // Don't ask for permission if user has said to never show banner on this device again.
 | 
						|
    ls.set("dontAskForNotifications", true);
 | 
						|
    assert.equal(navbar_alerts.should_show_desktop_notifications_banner(ls), false);
 | 
						|
    ls.set("dontAskForNotifications", undefined);
 | 
						|
 | 
						|
    // Don't ask for permission if device is mobile.
 | 
						|
    override(util, "is_mobile", () => true);
 | 
						|
    assert.equal(navbar_alerts.should_show_desktop_notifications_banner(ls), false);
 | 
						|
    override(util, "is_mobile", () => false);
 | 
						|
 | 
						|
    // Don't ask for permission if notification is denied by user.
 | 
						|
    override(desktop_notifications, "permission_state", () => "denied");
 | 
						|
    assert.equal(navbar_alerts.should_show_desktop_notifications_banner(ls), false);
 | 
						|
 | 
						|
    // Don't ask for permission if notification is already granted by user.
 | 
						|
    override(desktop_notifications, "granted_desktop_notifications_permission", () => true);
 | 
						|
    assert.equal(navbar_alerts.should_show_desktop_notifications_banner(ls), false);
 | 
						|
 | 
						|
    // Don't ask for permission if user is a spectator.
 | 
						|
    page_params.is_spectator = true;
 | 
						|
    assert.equal(navbar_alerts.should_show_desktop_notifications_banner(ls), false);
 | 
						|
});
 | 
						|
 | 
						|
test("should_show_bankruptcy_banner", ({override}) => {
 | 
						|
    // Show bankruptcy banner when following conditions are suitable:
 | 
						|
    // - The user has read at least one message, i.e., furthest_read_time is defined.
 | 
						|
    // - The user has more than 500 unread messages.
 | 
						|
    // - The user has not read any message in the last 2 days.
 | 
						|
    const start_time = new Date("2024-01-01T10:00:00.000Z"); // Wednesday 1/1/2024 10:00:00 AM (UTC+0)
 | 
						|
    override(page_params, "furthest_read_time", start_time.getTime() / 1000);
 | 
						|
    override(Date, "now", () => addDays(start_time, 3).getTime()); // Saturday 1/4/2024 10:00:00 AM (UTC+0)
 | 
						|
    override(unread, "get_unread_message_count", () => 501);
 | 
						|
    assert.equal(navbar_alerts.should_show_bankruptcy_banner(), true);
 | 
						|
 | 
						|
    // Don't show bankruptcy banner if user has not read any message.
 | 
						|
    override(page_params, "furthest_read_time", undefined);
 | 
						|
    assert.equal(navbar_alerts.should_show_bankruptcy_banner(), false);
 | 
						|
    override(page_params, "furthest_read_time", start_time.getTime() / 1000);
 | 
						|
 | 
						|
    // Don't show bankruptcy banner if user has read any message in the last 2 days.
 | 
						|
    override(Date, "now", () => addDays(start_time, 1).getTime()); // Thursday 1/2/2024 10:00:00 AM (UTC+0)
 | 
						|
    assert.equal(navbar_alerts.should_show_bankruptcy_banner(), false);
 | 
						|
 | 
						|
    // Don't show bankruptcy banner if user has less <= 500 unread messages.
 | 
						|
    override(unread, "get_unread_message_count", () => 500);
 | 
						|
    assert.equal(navbar_alerts.should_show_bankruptcy_banner(), false);
 | 
						|
});
 | 
						|
 | 
						|
test("should_show_organization_profile_incomplete_banner", ({override}) => {
 | 
						|
    // Show organization profile incomplete banner when following conditions are suitable:
 | 
						|
    // - The user is an admin.
 | 
						|
    // - The organization is created >= 15 days ago.
 | 
						|
    override(current_user, "is_admin", true);
 | 
						|
    const start_time = new Date("2024-01-01T10:00:00.000Z"); // Wednesday 1/1/2024 10:00:00 AM (UTC+0)
 | 
						|
    override(realm, "realm_date_created", start_time.getTime() / 1000);
 | 
						|
    override(Date, "now", () => addDays(start_time, 15).getTime());
 | 
						|
    assert.equal(
 | 
						|
        navbar_alerts.should_show_organization_profile_incomplete_banner(realm.realm_date_created),
 | 
						|
        true,
 | 
						|
    );
 | 
						|
 | 
						|
    // Don't show banner if user is not an admin.
 | 
						|
    override(current_user, "is_admin", false);
 | 
						|
    assert.equal(
 | 
						|
        navbar_alerts.should_show_organization_profile_incomplete_banner(realm.realm_date_created),
 | 
						|
        false,
 | 
						|
    );
 | 
						|
    override(current_user, "is_admin", true);
 | 
						|
 | 
						|
    // Don't show banner if organization is created < 15 days ago.
 | 
						|
    override(Date, "now", () => addDays(start_time, 14).getTime());
 | 
						|
    assert.equal(
 | 
						|
        navbar_alerts.should_show_organization_profile_incomplete_banner(realm.realm_date_created),
 | 
						|
        false,
 | 
						|
    );
 | 
						|
});
 | 
						|
 | 
						|
test("is_organization_profile_incomplete", ({override}) => {
 | 
						|
    // The organization profile is incomplete when the realm description is
 | 
						|
    // empty or not updated after importing the organization from other product.
 | 
						|
    override(realm, "realm_description", "Organization imported from Slack!");
 | 
						|
    assert.equal(navbar_alerts.is_organization_profile_incomplete(), true);
 | 
						|
    override(realm, "realm_description", "");
 | 
						|
    assert.equal(navbar_alerts.is_organization_profile_incomplete(), true);
 | 
						|
 | 
						|
    // The organization profile is complete if the realm description is updated.
 | 
						|
    override(realm, "realm_description", "Organization description already set!");
 | 
						|
    assert.equal(navbar_alerts.is_organization_profile_incomplete(), false);
 | 
						|
});
 | 
						|
 | 
						|
test("should_show_server_upgrade_banner", ({override}) => {
 | 
						|
    const ls = localstorage();
 | 
						|
 | 
						|
    // Set the initial date, which will be set as the last upgrade nag dismissal time.
 | 
						|
    const start_time = new Date("2024-01-01T10:00:00.000Z"); // Wednesday 1/1/2024 10:00:00 AM (UTC+0)
 | 
						|
    override(Date, "now", () => start_time.getTime());
 | 
						|
    ls.set("lastUpgradeNagDismissalTime", undefined);
 | 
						|
    assert.equal(navbar_alerts.should_show_server_upgrade_banner(ls), true);
 | 
						|
    navbar_alerts.set_last_upgrade_nag_dismissal_time(ls);
 | 
						|
 | 
						|
    // Set the date to <= 7 days from the last upgrade nag dismissal time.
 | 
						|
    override(Date, "now", () => addDays(start_time, 7).getTime()); // Wednesday 1/8/2024 10:00:00 AM (UTC+0)
 | 
						|
    assert.equal(navbar_alerts.should_show_server_upgrade_banner(ls), false);
 | 
						|
 | 
						|
    // Set the date to > 7 days from the last upgrade nag dismissal time.
 | 
						|
    override(Date, "now", () => addDays(start_time, 8).getTime()); // Thursday 1/9/2024 10:00:00 AM (UTC+0)
 | 
						|
    assert.equal(navbar_alerts.should_show_server_upgrade_banner(ls), true);
 | 
						|
});
 |