@@ -16,7 +16,7 @@ public void GetCommand_ShouldReturnCommand()
1616 var npxHelper = new Mock < INpxHelper > ( ) . Object ;
1717 var logger = new Mock < ILogger < TypeSpecInitTool > > ( ) . Object ;
1818 var outputService = new Mock < IOutputHelper > ( ) . Object ;
19- var tool = new TypeSpecInitTool ( npxHelper , logger , outputService ) ;
19+ var tool = new TypeSpecInitTool ( npxHelper , CreateTypeSpecHelper ( ) , logger , outputService ) ;
2020
2121 // Act
2222 var command = tool . GetCommand ( ) ;
@@ -34,7 +34,7 @@ public async Task Init_WithInvalidTemplate_ShouldReturnError()
3434 var npxHelper = new Mock < INpxHelper > ( ) . Object ;
3535 var logger = new Mock < ILogger < TypeSpecInitTool > > ( ) . Object ;
3636 var outputService = new Mock < IOutputHelper > ( ) . Object ;
37- var tool = new TypeSpecInitTool ( npxHelper , logger , outputService ) ;
37+ var tool = new TypeSpecInitTool ( npxHelper , CreateTypeSpecHelper ( ) , logger , outputService ) ;
3838
3939 var result = await tool . InitTypeSpecProjectAsync ( outputDirectory : "never-used" , template : "invalid-template" , serviceNamespace : "MyService" , isCli : false ) ;
4040
@@ -52,7 +52,7 @@ public async Task Init_WithInvalidServiceNamespace_ShouldReturnError()
5252 var npxHelper = new Mock < INpxHelper > ( ) . Object ;
5353 var logger = new Mock < ILogger < TypeSpecInitTool > > ( ) . Object ;
5454 var outputService = new Mock < IOutputHelper > ( ) . Object ;
55- var tool = new TypeSpecInitTool ( npxHelper , logger , outputService ) ;
55+ var tool = new TypeSpecInitTool ( npxHelper , CreateTypeSpecHelper ( ) , logger , outputService ) ;
5656
5757 var result = await tool . InitTypeSpecProjectAsync ( outputDirectory : "never-used" , template : "azure-core" , serviceNamespace : "" , isCli : false ) ;
5858
@@ -64,20 +64,91 @@ public async Task Init_WithInvalidServiceNamespace_ShouldReturnError()
6464 }
6565
6666 [ Test ]
67- public async Task Init_WithNonExistentDirectory_ShouldReturnError ( )
67+ public async Task Init_WithNonEmptyDirectory_ShouldReturnError ( )
6868 {
6969 var npxHelper = new Mock < INpxHelper > ( ) . Object ;
7070 var logger = new Mock < ILogger < TypeSpecInitTool > > ( ) . Object ;
7171 var outputService = new Mock < IOutputHelper > ( ) . Object ;
72- var tool = new TypeSpecInitTool ( npxHelper , logger , outputService ) ;
72+ var tool = new TypeSpecInitTool ( npxHelper , CreateTypeSpecHelper ( ) , logger , outputService ) ;
73+ var tempDir = Path . Combine ( Path . GetTempPath ( ) , $ "test-nonexistent-{ Guid . NewGuid ( ) } ") ;
7374
74- var result = await tool . InitTypeSpecProjectAsync ( outputDirectory : Path . Combine ( Path . GetTempPath ( ) , $ "test-nonexistent- { Guid . NewGuid ( ) } " ) , template : "azure-core" , serviceNamespace : "MyService" , isCli : false ) ;
75+ Directory . CreateDirectory ( tempDir ) ;
7576
76- Assert . Multiple ( ( ) =>
77+ try
7778 {
78- Assert . That ( result . IsSuccessful , Is . False ) ;
79- Assert . That ( result . ResponseError , Does . Contain ( "Invalid --output-directory" ) ) ;
80- } ) ;
79+ await File . WriteAllTextAsync ( Path . Join ( tempDir , "somefile.txt" ) , "some file's contents" ) ;
80+
81+ var result = await tool . InitTypeSpecProjectAsync ( outputDirectory : tempDir , template : "azure-core" , serviceNamespace : "MyService" , isCli : false ) ;
82+
83+ Assert . Multiple ( ( ) =>
84+ {
85+ Assert . That ( result . IsSuccessful , Is . False ) ;
86+ Assert . That ( result . ResponseError , Does . Contain ( "Invalid --output-directory" ) ) ;
87+ } ) ;
88+ }
89+ finally
90+ {
91+ Directory . Delete ( tempDir , true ) ;
92+ }
93+ }
94+
95+ [ Test ]
96+ public async Task Init_IncorrectGitRepo ( )
97+ {
98+ var npxHelper = new Mock < INpxHelper > ( ) . Object ;
99+ var logger = new Mock < ILogger < TypeSpecInitTool > > ( ) . Object ;
100+ var outputService = new Mock < IOutputHelper > ( ) . Object ;
101+ var tool = new TypeSpecInitTool ( npxHelper , CreateTypeSpecHelper ( false ) , logger , outputService ) ;
102+ var tempDir = Path . Combine ( Path . GetTempPath ( ) , $ "test-nonexistent-{ Guid . NewGuid ( ) } ") ;
103+
104+ try
105+ {
106+ var result = await tool . InitTypeSpecProjectAsync ( outputDirectory : tempDir , template : "azure-core" , serviceNamespace : "MyService" , isCli : false ) ;
107+
108+ Assert . Multiple ( ( ) =>
109+ {
110+ Assert . That ( result . IsSuccessful , Is . False ) ;
111+ Assert . That ( result . ResponseError , Is . EqualTo ( $ "Failed: Invalid --output-directory, must be under the azure-rest-api-specs or azure-rest-api-specs-pr repo"
112+ ) ) ;
113+ } ) ;
114+ }
115+ finally
116+ {
117+ Directory . Delete ( tempDir , true ) ;
118+ }
119+ }
120+
121+ [ Test ]
122+ public async Task Init_NotUnderSpecifications ( )
123+ {
124+ var npxHelper = new Mock < INpxHelper > ( ) . Object ;
125+ var logger = new Mock < ILogger < TypeSpecInitTool > > ( ) . Object ;
126+ var outputService = new Mock < IOutputHelper > ( ) . Object ;
127+ var tool = new TypeSpecInitTool ( npxHelper , CreateTypeSpecHelper ( true ) , logger , outputService ) ;
128+ var tempDir = Path . Combine ( Path . GetTempPath ( ) , $ "test-nonexistent-{ Guid . NewGuid ( ) } ") ;
129+
130+ try
131+ {
132+ var result = await tool . InitTypeSpecProjectAsync ( outputDirectory : tempDir , template : "azure-core" , serviceNamespace : "MyService" , isCli : false ) ;
133+
134+ Assert . Multiple ( ( ) =>
135+ {
136+ Assert . That ( result . IsSuccessful , Is . False ) ;
137+ Assert . That ( result . ResponseError , Does . Contain ( "Invalid --output-directory" ) ) ;
138+ Assert . That ( result . ResponseError , Is . EqualTo ( $ "Failed: Invalid --output-directory, must be under <azure-rest-api-specs or azure-rest-api-specs-pr>{ Path . DirectorySeparatorChar } specification") ) ;
139+ } ) ;
140+ }
141+ finally
142+ {
143+ Directory . Delete ( tempDir , true ) ;
144+ }
145+ }
146+
147+ private static ITypeSpecHelper CreateTypeSpecHelper ( bool isSpecRepo = false )
148+ {
149+ var mock = new Mock < ITypeSpecHelper > ( ) ;
150+ mock . Setup ( m => m . IsRepoPathForSpecRepo ( It . IsAny < string > ( ) ) ) . Returns ( isSpecRepo ) ;
151+ return mock . Object ;
81152 }
82153 }
83154}
0 commit comments