Knockout Role Directive Test

by sberube

HTML

<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<div>
    <p data-bind="requiredRoles: ['CSA_ADMINA','BBB','CCC']">This is a test</p>
    <p data-bind="requiredRoles: ['CSA_ADMIN','BBB','CCC']">This is test #2</p>
</div>

JavaScript

// Custom Globals
 var CSA = {
     // Browser Accept Language
     browserLocale: "en\x2DUS,en\x3Bq\x3D0.8",
     productPerspective: "ENTERPRISE",
     user: {
         name: "admin",
         id: "90d96588360da0c701360da0f1d600a1",
         roles: ['CODAR_APPLICATION_RELEASE_MANAGER', 'SERVICE_BUSINESS_MANAGER', 'CODAR_APPLICATION_DEVELOPER', 'RESOURCE_SUPPLY_MANAGER', 'CODAR_APPLICATION_QA', 'CODAR_APPLICATION_ARCHITECT', 'CONSUMER_SERVICE_ADMINISTRATOR', 'SERVICE_CONSUMER', 'CSA_ADMIN', 'SERVICE_OPERATIONS_MANAGER', 'SERVICE_DESIGNER']
     },
     // this is here because of testacular: it expects files to be under '/base/', so I override it there
     url: function (value) {
         return value;
     },
     version: "20140827-0945"
 };

var RoleHelper = {

        ADMIN_ROLE_NAME: "CSA_ADMIN",

        getActualRoles: function() {
            if (CSA && CSA.user && CSA.user.roles) {
                return CSA.user.roles;
            }

            return [];
        },

        // Checks if any of the roles passed in match the users actual roles
        hasRequiredRole: function(requiredRoles) {
            var actualRoles = this.getActualRoles();
            var result = false;

            if (requiredRoles === null || ( requiredRoles instanceof Array && requiredRoles.length === 0)) {
                result = true;
            } else {
                for (var i in actualRoles) {
                    var actualRole = actualRoles[i];
                    for (var j in requiredRoles) {
                        var requiredRole = requiredRoles[j];
                        if (actualRole === requiredRole) {
                            result = true;
                            break;
                        }
                    }
                    if (result) {
                        break;
                    }
                }
            }

            return result;
        },

        hasAdminRole: function() {
            return...