From d20b6454ab2db125c268a0fe576740c6c842f19a Mon Sep 17 00:00:00 2001 From: Florian Reifschneider Date: Sat, 20 Apr 2019 16:23:14 +0200 Subject: [PATCH] fix(router): fix return value for getTransition of NSRouterLink Return undefined transition value from getTransition method of NSRouterLink when boolean value is used for pageTransition input. Closes #1784 --- nativescript-angular/router/ns-router-link.ts | 7 ++- tests/app/tests/ns-router-link.ts | 43 +++++++++++++++++++ tests/app/tests/test-config.ts | 4 ++ tests/karma.conf.js | 2 +- tests/package.json | 11 +++-- 5 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 tests/app/tests/ns-router-link.ts diff --git a/nativescript-angular/router/ns-router-link.ts b/nativescript-angular/router/ns-router-link.ts index d5e73270f..a6f4273a4 100644 --- a/nativescript-angular/router/ns-router-link.ts +++ b/nativescript-angular/router/ns-router-link.ts @@ -115,7 +115,7 @@ export class NSRouterLink { // tslint:disable-line:directive-class-suffix } private getTransition(): { animated: boolean, transition?: NavigationTransition } { - let transition: NavigationTransition = {}; + let transition: NavigationTransition; let animated: boolean; if (typeof this.pageTransition === "boolean") { @@ -125,7 +125,9 @@ export class NSRouterLink { // tslint:disable-line:directive-class-suffix animated = false; } else { animated = true; - transition.name = this.pageTransition; + transition = { + name: this.pageTransition + }; } } else { animated = true; @@ -134,6 +136,7 @@ export class NSRouterLink { // tslint:disable-line:directive-class-suffix let duration = +this.pageTransitionDuration; if (!isNaN(duration)) { + transition = transition || {}; transition.duration = duration; } diff --git a/tests/app/tests/ns-router-link.ts b/tests/app/tests/ns-router-link.ts new file mode 100644 index 000000000..091e0637d --- /dev/null +++ b/tests/app/tests/ns-router-link.ts @@ -0,0 +1,43 @@ +import {NSRouterLink} from "nativescript-angular/router/ns-router-link"; +import {ActivatedRoute, Router} from "@angular/router"; +import {RouterExtensions} from "nativescript-angular/router"; +import {assert, fake, spy, stub} from "./test-config"; +import {SinonStub} from "sinon"; + +describe("NSRouterLink", () => { + + const mockRouter = {} as Router; + let mockRouterExtensions = { + navigateByUrl: fake() + }; + const mockActivatedRoute = {} as ActivatedRoute; + let nsRouterLink: NSRouterLink; + let urlTreeStub: SinonStub; + + beforeEach(() => { + nsRouterLink = new NSRouterLink(mockRouter, mockRouterExtensions as unknown as RouterExtensions, mockActivatedRoute); + urlTreeStub = stub(nsRouterLink, 'urlTree').get(() => null); + }); + + afterEach(() => { + urlTreeStub.restore(); + }); + + it('#tap should call navigateByUrl with undefined transition in extras when boolean is given for pageTransition input', () => { + nsRouterLink.pageTransition = false; + nsRouterLink.onTap(); + assert.isUndefined(mockRouterExtensions.navigateByUrl.lastCall.args[1].transition); + }); + + it('#tap should call navigateByUrl with correct transition in extras when NavigationTransition object is given for pageTransition input', () => { + const pageTransition = { + name: 'slide', + duration: 500 + }; + nsRouterLink.pageTransition = pageTransition; + stub(nsRouterLink, 'urlTree').get(() => null); + nsRouterLink.onTap(); + assert.equal(pageTransition, mockRouterExtensions.navigateByUrl.lastCall.args[1].transition); + }); + +}); diff --git a/tests/app/tests/test-config.ts b/tests/app/tests/test-config.ts index 6472ab7d3..dc098fe78 100644 --- a/tests/app/tests/test-config.ts +++ b/tests/app/tests/test-config.ts @@ -3,4 +3,8 @@ }); import * as chai from "chai"; +import * as sinon from "sinon"; export let assert: typeof chai.assert = (global).chai.assert; +export let fake: typeof sinon.fake = (global).sinon.fake; +export let spy: typeof sinon.spy = (global).sinon.spy; +export let stub: typeof sinon.stub = (global).sinon.stub; \ No newline at end of file diff --git a/tests/karma.conf.js b/tests/karma.conf.js index b8ea87cb7..a02f0287a 100644 --- a/tests/karma.conf.js +++ b/tests/karma.conf.js @@ -8,7 +8,7 @@ module.exports = function(config) { // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha', 'chai'], + frameworks: ['mocha', 'chai', 'sinon'], // list of files / patterns to load in the browser diff --git a/tests/package.json b/tests/package.json index 29bede509..6f02fcab8 100644 --- a/tests/package.json +++ b/tests/package.json @@ -44,18 +44,21 @@ "devDependencies": { "@types/chai": "^4.1.4", "@types/mocha": "^5.2.4", + "@types/sinon": "^7.0.11", + "babel-traverse": "6.8.0", + "babel-types": "6.8.1", + "babylon": "6.8.0", "chai": "4.1.2", "karma": "2.0.4", "karma-chai": "0.1.0", "karma-mocha": "1.3.0", "karma-mocha-reporter": "2.2.5", "karma-nativescript-launcher": "0.4.0", + "karma-sinon": "^1.0.5", + "lazy": "1.0.11", "mocha": "5.2.0", "nativescript-dev-typescript": "next", - "babel-traverse": "6.8.0", - "babel-types": "6.8.1", - "babylon": "6.8.0", - "lazy": "1.0.11", + "sinon": "^7.3.2", "tslint": "^4.5.1", "typescript": "~3.1.1" },