diff --git a/app/scripts/directives/playTopic.coffee b/app/scripts/directives/playTopic.coffee index d1a492fdd89..817e3f18c13 100644 --- a/app/scripts/directives/playTopic.coffee +++ b/app/scripts/directives/playTopic.coffee @@ -32,8 +32,9 @@ angular.module('neo4jApp.directives') if topic element.on 'click', (e) -> e.preventDefault() - - topic = topic.toLowerCase().trim().replace('-', ' ') + topic = topic.trim() + if not /^https?:\/\//i.test(topic) # Lowercase and remove '-' from all local links + topic = topic.toLowerCase().replace('-', ' ') Frame.create(input: "#{Settings.cmdchar}#{command} #{topic}") $rootScope.$apply() unless $rootScope.$$phase diff --git a/test/spec/directives/playTopic.coffee b/test/spec/directives/playTopic.coffee new file mode 100644 index 00000000000..818d7b8eb36 --- /dev/null +++ b/test/spec/directives/playTopic.coffee @@ -0,0 +1,67 @@ +###! +Copyright (c) 2002-2016 "Neo Technology," +Network Engine for Objects in Lund AB [http://neotechnology.com] + +This file is part of Neo4j. + +Neo4j is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +### + +'use strict' + +describe 'Directive: playTopic', () -> + myFrame = { + create: -> + } + beforeEach module 'neo4jApp.directives' + beforeEach module 'neo4jApp.settings' + beforeEach module 'LocalStorageModule' + beforeEach(module ($provide) -> + $provide.value('Frame', myFrame) + return + ) + beforeEach -> + spyOn(myFrame, 'create') + + it 'should lowercase local guides', inject ($rootScope, $compile) -> + scope = $rootScope.$new() + element = angular.element '' + element = $compile(element)(scope) + scope.$apply() + element.triggerHandler('click') + expect(myFrame.create).toHaveBeenCalledWith({input: ':play cypher'}) + + it 'should remove hyphens from local guides', inject ($rootScope, $compile) -> + scope = $rootScope.$new() + element = angular.element '' + element = $compile(element)(scope) + scope.$apply() + element.triggerHandler('click') + expect(myFrame.create).toHaveBeenCalledWith({input: ':play movie guide'}) + + it 'should keep casing on remote guide urls', inject ($rootScope, $compile) -> + scope = $rootScope.$new() + element = angular.element '' + element = $compile(element)(scope) + scope.$apply() + element.triggerHandler('click') + expect(myFrame.create).toHaveBeenCalledWith({input: ':play http://guides.neo4j.com/Start.html'}) + + it 'should keep hyphens on remote guide urls', inject ($rootScope, $compile) -> + scope = $rootScope.$new() + element = angular.element '' + element = $compile(element)(scope) + scope.$apply() + element.triggerHandler('click') + expect(myFrame.create).toHaveBeenCalledWith({input: ':play http://guides.neo4j.com/start-guides.html'})