@@ -6,11 +6,13 @@ import stubs = require('./stubs');
6
6
7
7
import ProjectServiceLib = require( "../lib/services/project-service" ) ;
8
8
import ProjectDataServiceLib = require( "../lib/services/project-data-service" ) ;
9
+ import ProjectDataLib = require( "../lib/project-data" ) ;
9
10
import ProjectHelperLib = require( "../lib/common/project-helper" ) ;
10
11
import StaticConfigLib = require( "../lib/config" ) ;
11
12
import NpmLib = require( "../lib/node-package-manager" ) ;
12
13
import HttpClientLib = require( "../lib/common/http-client" ) ;
13
14
import fsLib = require( "../lib/common/file-system" ) ;
15
+ import platformServiceLib = require( "../lib/services/platform-service" ) ;
14
16
15
17
import path = require( "path" ) ;
16
18
import temp = require( "temp" ) ;
@@ -64,7 +66,7 @@ class ProjectIntegrationTest {
64
66
var projectDir = path . join ( tempFolder , projectName ) ;
65
67
var appDirectoryPath = path . join ( projectDir , "app" ) ;
66
68
var platformsDirectoryPath = path . join ( projectDir , "platforms" ) ;
67
- var tnsProjectFilePath = path . join ( projectDir , ".tnsproject " ) ;
69
+ let tnsProjectFilePath = path . join ( projectDir , "package.json " ) ;
68
70
69
71
assert . isTrue ( fs . exists ( appDirectoryPath ) . wait ( ) ) ;
70
72
assert . isTrue ( fs . exists ( platformsDirectoryPath ) . wait ( ) ) ;
@@ -73,7 +75,7 @@ class ProjectIntegrationTest {
73
75
assert . isFalse ( fs . isEmptyDir ( appDirectoryPath ) . wait ( ) ) ;
74
76
assert . isTrue ( fs . isEmptyDir ( platformsDirectoryPath ) . wait ( ) ) ;
75
77
76
- var actualAppId = fs . readJson ( tnsProjectFilePath ) . wait ( ) . id ;
78
+ var actualAppId = fs . readJson ( tnsProjectFilePath ) . wait ( ) [ "nativescript" ] . id ;
77
79
var expectedAppId = appId ;
78
80
assert . equal ( actualAppId , expectedAppId ) ;
79
81
@@ -139,4 +141,135 @@ describe("Project Service Tests", () => {
139
141
projectIntegrationTest . assertProject ( tempFolder , projectName , options . appid ) . wait ( ) ;
140
142
} ) ;
141
143
} ) ;
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