Viewing File: /usr/local/cpanel/base/frontend/jupiter/site-monitor/models/site.spec.js

/*
# site-monitor/models/site.spec.js                       Copyright 2021 cPanel, L.L.C.
#                                                                 All rights reserved.
# copyright@cpanel.net                                              http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/

/* global define: false, describe: false, it: false, beforeEach: false, expect: false */

define([
    "app/models/site",
    "app/models/monitor",
    "app/models/domain-type.enum",
],
function(Site, Monitor, DomainType) {
    "use strict";

    var sampleSite = {
        documentRoot: 'public_html',
        domain: 'muppets.com',
        hasValidHTTPSAliases: false,
        homedir: '/home/muppets',
        isHttpsRedirecting: true,
        nonHTTPS: false,
        realRootDomain: 'muppets.com',
        redirectsTo: undefined,
        rootDomain: 'muppets.com',
        type: 'main_domain',
    };

    describe("new Site", function() {
        it("should create a new Site object if everything is valid", function() {
            var site = new Site(sampleSite);
            expect(site).toEqual(jasmine.objectContaining({
                    documentRoot: 'public_html',
                    domain: 'muppets.com',
                    hasValidHTTPSAliases: false,
                    homedir: '/home/muppets',
                    isHttpsRedirecting: true,
                    nonHTTPS: false,
                    realRootDomain: 'muppets.com',
                    redirectsTo: undefined,
                    rootDomain: 'muppets.com',
                    type: DomainType.MAIN,
                    protocol: 'https',
                    monitors: [],
                    fetchFailed: false,
                }));
        })
    });

    describe("Sites methods", function() {
        var sampleSite = {
            domain: 'muppets.com',
            type: DomainType.MAIN,
            isHttpsRedirecting: true,
        };

        var site;
        var monitors = {
            first: new Monitor({
                id: '1234',
                name: 'Public Site',
                domain: 'muppets.com',
            }),
            second: new Monitor({
                id: '5678',
                name: 'Store',
                domain: 'muppets.com',
                path: 'tickets'
            }),
            third: new Monitor({
                id: '91011',
                name: 'Actors Portal',
                domain: 'muppets.com',
                path: 'actors',
            }),
            update: new Monitor({
                id: '121314',
                name: 'Public Site',
                domain: 'muppets.com',
                path: 'index2.html'
            }),
        };


        var findByIdGenerator = function(partial) {
            return function findById(monitor) {
                return monitor.id === partial.id;
            };
        };

        describe("addMonitor", function() {
            beforeEach(function() {
                site = new Site(sampleSite);
            });

            it('should add monitors that are unique', function() {

                site.addMonitor(monitors.first);
                site.addMonitor(monitors.second);
                site.addMonitor(monitors.third);

                expect(site.monitors).toEqual([
                    jasmine.objectContaining(monitors.first),
                    jasmine.objectContaining(monitors.second),
                    jasmine.objectContaining(monitors.third),
                ]);
            });

            it('should update monitors that have the same name', function() {

                site.addMonitor(monitors.first);
                expect(site.monitors).toEqual([
                    jasmine.objectContaining(monitors.first),
                ]);

                site.addMonitor(monitors.update);
                expect(site.monitors).toEqual([
                    jasmine.objectContaining(monitors.update),
                ]);
            });

            it('should add monitors that have distinct ids when passing a different match function', function() {

                site.addMonitor(monitors.first, findByIdGenerator);
                expect(site.monitors).toEqual([
                    jasmine.objectContaining(monitors.first),
                ]);

                site.addMonitor(monitors.update, findByIdGenerator);
                expect(site.monitors).toEqual([
                    jasmine.objectContaining(monitors.first),
                    jasmine.objectContaining(monitors.update),
                ]);
            });

        });

        describe("removeMonitor", function() {
            beforeEach(function() {
                site = new Site(sampleSite);
                site.addMonitor(monitors.first);
                site.addMonitor(monitors.second);
                site.addMonitor(monitors.third);
            });

            it("should remove the first item by its name", function() {
                expect(site.monitors.length).toEqual(3);
                site.removeMonitor(monitors.first);
                expect(site.monitors).toEqual([
                    jasmine.objectContaining(monitors.second),
                    jasmine.objectContaining(monitors.third),
                ]);
            });

            it("should remove the middle item by its name", function() {
                expect(site.monitors.length).toEqual(3);
                site.removeMonitor(monitors.second);
                expect(site.monitors).toEqual([
                    jasmine.objectContaining(monitors.first),
                    jasmine.objectContaining(monitors.third),
                ]);
            });

            it("should remove the last item by its name", function() {
                expect(site.monitors.length).toEqual(3);
                site.removeMonitor(monitors.third);
                expect(site.monitors).toEqual([
                    jasmine.objectContaining(monitors.first),
                    jasmine.objectContaining(monitors.second),
                ]);
            });

            it("should not remove an item that it can't find", function() {
                expect(site.monitors.length).toEqual(3);
                site.removeMonitor({ name: "unknown" });
                expect(site.monitors.length).toEqual(3);
            });

            it("should remove an item by its id if passed a custom lookup method.", function() {
                expect(site.monitors.length).toEqual(3);
                site.removeMonitor({ id: '1234' }, findByIdGenerator);
                expect(site.monitors).toEqual([
                    jasmine.objectContaining(monitors.second),
                    jasmine.objectContaining(monitors.third),
                ]);
            });
        });

        describe("anyEnabled", function() {
            beforeEach(function() {
                site = new Site(sampleSite);
            });

            it("should report false if no montors are present", function() {
                expect(site.anyEnabled()).toEqual(false);
            });

            it("should report true if any monitors are present", function() {
                site.addMonitor(monitors.first);
                expect(site.anyEnabled()).toEqual(true);
            });
        });
    });
});
Back to Directory File Manager