@@ -6,11 +6,13 @@ import stubs = require('./stubs');
66
77import ProjectServiceLib = require( "../lib/services/project-service" ) ;
88import ProjectDataServiceLib = require( "../lib/services/project-data-service" ) ;
9+ import ProjectDataLib = require( "../lib/project-data" ) ;
910import ProjectHelperLib = require( "../lib/common/project-helper" ) ;
1011import StaticConfigLib = require( "../lib/config" ) ;
1112import NpmLib = require( "../lib/node-package-manager" ) ;
1213import HttpClientLib = require( "../lib/common/http-client" ) ;
1314import fsLib = require( "../lib/common/file-system" ) ;
15+ import platformServiceLib = require( "../lib/services/platform-service" ) ;
1416
1517import path = require( "path" ) ;
1618import temp = require( "temp" ) ;
@@ -64,7 +66,7 @@ class ProjectIntegrationTest {
6466 var projectDir = path . join ( tempFolder , projectName ) ;
6567 var appDirectoryPath = path . join ( projectDir , "app" ) ;
6668 var platformsDirectoryPath = path . join ( projectDir , "platforms" ) ;
67- var tnsProjectFilePath = path . join ( projectDir , ".tnsproject " ) ;
69+ let tnsProjectFilePath = path . join ( projectDir , "package.json " ) ;
6870
6971 assert . isTrue ( fs . exists ( appDirectoryPath ) . wait ( ) ) ;
7072 assert . isTrue ( fs . exists ( platformsDirectoryPath ) . wait ( ) ) ;
@@ -73,7 +75,7 @@ class ProjectIntegrationTest {
7375 assert . isFalse ( fs . isEmptyDir ( appDirectoryPath ) . wait ( ) ) ;
7476 assert . isTrue ( fs . isEmptyDir ( platformsDirectoryPath ) . wait ( ) ) ;
7577
76- var actualAppId = fs . readJson ( tnsProjectFilePath ) . wait ( ) . id ;
78+ var actualAppId = fs . readJson ( tnsProjectFilePath ) . wait ( ) [ "nativescript" ] . id ;
7779 var expectedAppId = appId ;
7880 assert . equal ( actualAppId , expectedAppId ) ;
7981
@@ -139,4 +141,135 @@ describe("Project Service Tests", () => {
139141 projectIntegrationTest . assertProject ( tempFolder , projectName , options . appid ) . wait ( ) ;
140142 } ) ;
141143 } ) ;
142- } ) ;
144+ } ) ;
145+
146+ function createTestInjector ( ) {
147+ var testInjector = new yok . Yok ( ) ;
148+
149+ testInjector . register ( "errors" , stubs . ErrorsStub ) ;
150+ testInjector . register ( 'logger' , stubs . LoggerStub ) ;
151+ testInjector . register ( "projectService" , ProjectServiceLib . ProjectService ) ;
152+ testInjector . register ( "projectHelper" , ProjectHelperLib . ProjectHelper ) ;
153+ testInjector . register ( "projectTemplatesService" , stubs . ProjectTemplatesService ) ;
154+ testInjector . register ( "projectNameValidator" , mockProjectNameValidator ) ;
155+
156+ testInjector . register ( "fs" , fsLib . FileSystem ) ;
157+ testInjector . register ( "projectDataService" , ProjectDataServiceLib . ProjectDataService ) ;
158+
159+ testInjector . register ( "staticConfig" , StaticConfigLib . StaticConfig ) ;
160+
161+ testInjector . register ( "npm" , NpmLib . NodePackageManager ) ;
162+ testInjector . register ( "httpClient" , HttpClientLib . HttpClient ) ;
163+ testInjector . register ( "config" , { } ) ;
164+ testInjector . register ( "lockfile" , stubs . LockFile ) ;
165+
166+ testInjector . register ( 'projectData' , ProjectDataLib . ProjectData ) ;
167+
168+ return testInjector ;
169+ }
170+
171+ describe ( "project upgrade procedure tests" , ( ) => {
172+ it ( "should throw error when no nativescript project folder specified" , ( ) => {
173+ var testInjector = createTestInjector ( ) ;
174+ var tempFolder = temp . mkdirSync ( "project upgrade" ) ;
175+ options . path = tempFolder ;
176+ var isErrorThrown = false ;
177+
178+ try {
179+ testInjector . resolve ( "projectData" ) ; // This should trigger upgrade procedure
180+ } catch ( err ) {
181+ isErrorThrown = true ;
182+ var expectedErrorMessage = "No project found at or above '%s' and neither was a --path specified.," + tempFolder ;
183+ assert . equal ( expectedErrorMessage , err . toString ( ) ) ;
184+ }
185+
186+ assert . isTrue ( isErrorThrown ) ;
187+ } ) ;
188+ it ( "should upgrade project when .tnsproject file exists but package.json file doesn't exist" , ( ) => {
189+ var testInjector = createTestInjector ( ) ;
190+ var fs : IFileSystem = testInjector . resolve ( "fs" ) ;
191+
192+ var tempFolder = temp . mkdirSync ( "projectUpgradeTest2" ) ;
193+ options . path = tempFolder ;
194+ var tnsProjectData = {
195+ "id" : "org.nativescript.Test" ,
196+ "tns-ios" : {
197+ "version" : "1.0.0"
198+ }
199+ } ;
200+ var tnsProjectFilePath = path . join ( tempFolder , ".tnsproject" ) ;
201+ fs . writeJson ( tnsProjectFilePath , tnsProjectData ) . wait ( ) ;
202+
203+ testInjector . resolve ( "projectData" ) ; // This should trigger upgrade procedure
204+
205+ var packageJsonFilePath = path . join ( tempFolder , "package.json" ) ;
206+ var packageJsonFileContent = require ( packageJsonFilePath ) ;
207+ assert . isTrue ( fs . exists ( packageJsonFilePath ) . wait ( ) ) ;
208+ assert . isFalse ( fs . exists ( tnsProjectFilePath ) . wait ( ) ) ;
209+ assert . deepEqual ( tnsProjectData , packageJsonFileContent [ "nativescript" ] ) ;
210+ } ) ;
211+ it ( "should upgrade project when .tnsproject and package.json exist but nativescript key is not presented in package.json file" , ( ) => {
212+ var testInjector = createTestInjector ( ) ;
213+ var fs : IFileSystem = testInjector . resolve ( "fs" ) ;
214+
215+ var tempFolder = temp . mkdirSync ( "projectUpgradeTest3" ) ;
216+ options . path = tempFolder ;
217+ var tnsProjectData = {
218+ "id" : "org.nativescript.Test" ,
219+ "tns-ios" : {
220+ "version" : "1.0.1"
221+ }
222+ } ;
223+ var packageJsonData = {
224+ "name" : "testModuleName" ,
225+ "version" : "0.0.0" ,
226+ "dependencies" : {
227+ "myFirstDep" : "0.0.1"
228+ }
229+ }
230+ let tnsProjectFilePath = path . join ( tempFolder , ".tnsproject" ) ;
231+ fs . writeJson ( tnsProjectFilePath , tnsProjectData ) . wait ( ) ;
232+
233+ var packageJsonFilePath = path . join ( tempFolder , "package.json" ) ;
234+ fs . writeJson ( packageJsonFilePath , packageJsonData ) . wait ( ) ;
235+
236+ testInjector . resolve ( "projectData" ) ; // This should trigger upgrade procedure
237+
238+ var packageJsonFileContent = require ( packageJsonFilePath ) ;
239+ var expectedPackageJsonContent : any = packageJsonData ;
240+ expectedPackageJsonContent [ "nativescript" ] = tnsProjectData ;
241+ assert . deepEqual ( expectedPackageJsonContent , packageJsonFileContent ) ;
242+ } ) ;
243+ it ( "shouldn't upgrade project when .tnsproject and package.json exist and nativescript key is presented in package.json file" , ( ) => {
244+ var testInjector = createTestInjector ( ) ;
245+ var fs : IFileSystem = testInjector . resolve ( "fs" ) ;
246+
247+ var tempFolder = temp . mkdirSync ( "projectUpgradeTest4" ) ;
248+ options . path = tempFolder ;
249+ var tnsProjectData = {
250+
251+ } ;
252+ var packageJsonData = {
253+ "name" : "testModuleName" ,
254+ "version" : "0.0.0" ,
255+ "dependencies" : {
256+ "myFirstDep" : "0.0.2"
257+ } ,
258+ "nativescript" : {
259+ "id" : "org.nativescript.Test" ,
260+ "tns-ios" : {
261+ "version" : "1.0.2"
262+ }
263+ }
264+ }
265+
266+ fs . writeJson ( path . join ( tempFolder , ".tnsproject" ) , tnsProjectData ) . wait ( ) ;
267+ fs . writeJson ( path . join ( tempFolder , "package.json" ) , packageJsonData ) . wait ( ) ;
268+ testInjector . resolve ( "projectData" ) ; // This should trigger upgrade procedure
269+
270+ var packageJsonFilePath = path . join ( tempFolder , "package.json" ) ;
271+ var packageJsonFileContent = require ( packageJsonFilePath ) ;
272+
273+ assert . deepEqual ( packageJsonData , packageJsonFileContent ) ;
274+ } ) ;
275+ } ) ;
0 commit comments