/** * Created by ohnatkov on 10-23-2017. */ describe('Chat window directive', function () { var scope, compile, chatModel, $httpBackend, systemAlertService, participant1 = { firstName: 'Test', lastName: 'Person', fullName: 'Test Person', loginId: 'test', jid: 'test@server', thumbnail: 'thumbnail' }, participant2 = { firstName: 'Test2', lastName: 'Person2', fullName: 'Test2 Person2', loginId: 'test2', jid: 'test2@server', thumbnail: 'thumbnail2' }, room = { id: 'room@test', nick: '', roster: { test: participant1, test2: participant2 } }, chatRoom = new ChatWindowVO().build({room: room, isOpened: true}); beforeEach(module('myitsmApp', 'templates')); beforeEach(function () { module(function ($provide) { $provide.value('chatModel', { cachedProfiles: {}, getUserProfileByJID: function (jids) { this.cachedProfiles[Strophe.getNodeFromJid(participant1.jid)] = participant1; this.cachedProfiles[Strophe.getNodeFromJid(participant2.jid)] = participant2; return Promise.resolve([participant1, participant2]) }, Client: {conn: {authcid: 'currentUser'}}, leaveConversation: function () { }, leaveRoomAndDestroyChatWindow: function () { }, saveChatLogToTicketWorknote: function () { } }); $provide.provider('systemAlertService', function () { var self = {}; this.$get = function () { return { modal: jasmine.createSpy('systemAlertService.modal').and.callFake(function () { return { result: { then: jasmine.createSpy('systemAlertService.modal').and.callFake(function (callback) { self.callBack = callback || self.callBack; }) } } }), close: function (data) { if (self.callBack && angular.isFunction(self.callBack)) { self.callBack(data); } } } } }); }); }); beforeEach(inject(function ($rootScope, $compile, _$httpBackend_, _chatModel_, _systemAlertService_) { $httpBackend = _$httpBackend_; chatModel = _chatModel_; systemAlertService = _systemAlertService_; $httpBackend.whenGET(/^scripts\/app\/i18n\/resources-locale_en.*$/).respond(200, readJSON('scripts/app/i18n/resources-locale_en.json')); $httpBackend.whenGET('/smartit/rest/v2/metadata?type=global').respond(200, readJSON('mocks/metadata-global.json')); $httpBackend.whenGET('/smartit/restapi/person/supportgroupperson').respond(200, [{items: [{id: 'currentUser'}]}]); $httpBackend.whenGET('/smartit/rest/serverstates').respond(200, {}); $httpBackend.whenGET('/smartit/rest/sessionstatus?getLicenseKey=true').respond(200, {}); scope = $rootScope.$new(); compile = $compile; chatModel.cachedProfiles = {}; chatRoom = new ChatWindowVO().build({room: room, isOpened: true, isLoading: false}); })); it('should compile', function () { var elem = angular.element(''); var compiledElement = compile(elem)(scope); scope.chatRoom = chatRoom; scope.isPopupWindow = false; $httpBackend.flush(); expect(compiledElement).toBeDefined(); expect(compiledElement.find('.chat__message-editor').length).toEqual(1); }); it('should generate chat window header text', function () { var elem = angular.element(''); var compiledElement = compile(elem)(scope); scope.chatRoom = chatRoom; scope.isPopupWindow = false; $httpBackend.flush(); var elemScope = compiledElement.isolateScope(); spyOn(elemScope.chatRoom, 'generateRosterSummary').and.callThrough(); var chatHeaderText = elemScope.generateChatHeaderCaption(); expect(chatHeaderText).toEqual('test, test2'); expect(elemScope.chatRoom.generateRosterSummary).toHaveBeenCalled(); scope.chatRoom.generateRosterSummary = null; scope.chatRoom.roster = { test: participant1, test2: participant2, }; chatHeaderText = elemScope.generateChatHeaderCaption(); expect(chatHeaderText).toEqual('Test Person, Test2 Person2'); scope.chatRoom.roster = {}; chatHeaderText = elemScope.generateChatHeaderCaption(); expect(chatHeaderText).toEqual('No participants'); }); it('should handle invite user action click', function () { var elem = angular.element(''); var compiledElement = compile(elem)(scope); scope.chatRoom = chatRoom; scope.isPopupWindow = false; $httpBackend.flush(); var elemScope = compiledElement.isolateScope(); var inviteButton = elem.find('.chat__controls_item.icon-user_plus'); expect(inviteButton.length).toEqual(1); spyOn(elemScope.chatActions, 'showSearchForm').and.callThrough(); inviteButton.trigger('click'); expect(elemScope.chatActions.showSearchForm).toHaveBeenCalled(); expect(elem.find('.chat__search-bar').length).toEqual(1); expect(elemScope.searchBar.searchParam).toEqual(''); expect(elemScope.state.searchUserFormActive).toEqual(true); expect(elemScope.state.searchTicketProfileActive).toEqual(false); elemScope.chatActions.showSearchForm('invite'); elemScope.$digest(); expect(elem.find('.chat__search-bar').length).toEqual(0); expect(elemScope.state.searchUserFormActive).toEqual(false); }); it('should handle minimize chat action', function () { var elem = angular.element(''); var compiledElement = compile(elem)(scope); scope.chatRoom = chatRoom; scope.isPopupWindow = false; $httpBackend.flush(); var elemScope = compiledElement.isolateScope(); var minimizeButton = elem.find('.chat__controls_item.glyphicon-minus'); expect(minimizeButton.length).toEqual(1); spyOn(elemScope.chatActions, 'minimize').and.callThrough(); minimizeButton.trigger('click'); expect(elemScope.chatActions.minimize).toHaveBeenCalled(); expect(elemScope.chatRoom.isOpened).toEqual(false); }); it('should handle leave chat action', function () { var elem = angular.element(''); var compiledElement = compile(elem)(scope); scope.chatRoom = chatRoom; scope.isPopupWindow = false; scope.$digest(); $httpBackend.flush(); var elemScope = compiledElement.isolateScope(); var leaveChatButton = elem.find('.chat__controls_item.icon-exit'); expect(leaveChatButton.length).toEqual(1); spyOn(elemScope.chatActions, 'leaveChat').and.callThrough(); spyOn(chatModel, 'leaveRoomAndDestroyChatWindow').and.callThrough(); elemScope.chatRoom.room.nick = 'test'; leaveChatButton.trigger('click'); expect(elemScope.chatActions.leaveChat).toHaveBeenCalled(); expect(systemAlertService.modal).toHaveBeenCalled(); systemAlertService.close({leave: true}); expect(elemScope.chatRoom.isOpened).toEqual(false); expect(chatModel.leaveRoomAndDestroyChatWindow).toHaveBeenCalled(); }); });