11using System ;
22using System . ComponentModel ;
3+ using System . Linq ;
4+ using System . Linq . Expressions ;
5+ using System . Numerics ;
36using System . Threading . Tasks ;
47using GitHub . Extensions ;
58using GitHub . Models ;
@@ -26,6 +29,42 @@ public async Task GitHubPage_Is_Initialized()
2629 target . EnterpriseTab . DidNotReceiveWithAnyArgs ( ) . Initialize ( null ) ;
2730 }
2831
32+ [ TestCase ( "https://github.com" , false , 0 ) ]
33+ [ TestCase ( "https://enterprise.com" , false , 1 ) ]
34+ [ TestCase ( "https://github.com" , true , 2 , Description = "Show URL tab for GitHub connections" ) ]
35+ [ TestCase ( "https://enterprise.com" , true , 2 , Description = "Show URL tab for Enterprise connections" ) ]
36+ public async Task Default_SelectedTabIndex_For_Group ( string address , bool isGroupA , int expectTabIndex )
37+ {
38+ var cm = CreateConnectionManager ( address ) ;
39+ var connection = cm . Connections [ 0 ] ;
40+ var usageService = CreateUsageService ( isGroupA ) ;
41+ var target = CreateTarget ( connectionManager : cm , usageService : usageService ) ;
42+
43+ await target . InitializeAsync ( connection ) ;
44+
45+ Assert . That ( target . SelectedTabIndex , Is . EqualTo ( expectTabIndex ) ) ;
46+ }
47+
48+ [ TestCase ( "https://github.com" , false , 1 , nameof ( UsageModel . MeasuresModel . NumberOfCloneViewGitHubTab ) ) ]
49+ [ TestCase ( "https://enterprise.com" , false , 1 , nameof ( UsageModel . MeasuresModel . NumberOfCloneViewEnterpriseTab ) ) ]
50+ [ TestCase ( "https://github.com" , true , 1 , nameof ( UsageModel . MeasuresModel . NumberOfCloneViewUrlTab ) ) ]
51+ [ TestCase ( "https://enterprise.com" , true , 1 , nameof ( UsageModel . MeasuresModel . NumberOfCloneViewUrlTab ) ) ]
52+ public async Task IncrementCounter_Showing_Default_Tab ( string address , bool isGroupA , int numberOfCalls , string counterName )
53+ {
54+ var cm = CreateConnectionManager ( address ) ;
55+ var connection = cm . Connections [ 0 ] ;
56+ var usageService = CreateUsageService ( isGroupA ) ;
57+ var usageTracker = Substitute . For < IUsageTracker > ( ) ;
58+ var target = CreateTarget ( connectionManager : cm , usageService : usageService , usageTracker : usageTracker ) ;
59+ usageTracker . IncrementCounter ( null ) . ReturnsForAnyArgs ( Task . CompletedTask ) ;
60+
61+ await target . InitializeAsync ( connection ) . ConfigureAwait ( false ) ;
62+
63+ await usageTracker . Received ( numberOfCalls ) . IncrementCounter (
64+ Arg . Is < Expression < Func < UsageModel . MeasuresModel , int > > > ( x =>
65+ ( ( MemberExpression ) x . Body ) . Member . Name == counterName ) ) ;
66+ }
67+
2968 [ Test ]
3069 public async Task EnterprisePage_Is_Initialized ( )
3170 {
@@ -274,6 +313,8 @@ static RepositoryCloneViewModel CreateTarget(
274313 IOperatingSystem os = null ,
275314 IConnectionManager connectionManager = null ,
276315 IRepositoryCloneService service = null ,
316+ IUsageService usageService = null ,
317+ IUsageTracker usageTracker = null ,
277318 IRepositorySelectViewModel gitHubTab = null ,
278319 IRepositorySelectViewModel enterpriseTab = null ,
279320 IRepositoryUrlViewModel urlTab = null ,
@@ -282,6 +323,8 @@ static RepositoryCloneViewModel CreateTarget(
282323 os = os ?? Substitute . For < IOperatingSystem > ( ) ;
283324 connectionManager = connectionManager ?? CreateConnectionManager ( "https://github.com" ) ;
284325 service = service ?? CreateRepositoryCloneService ( defaultClonePath ) ;
326+ usageService = usageService ?? CreateUsageService ( ) ;
327+ usageTracker = usageTracker ?? Substitute . For < IUsageTracker > ( ) ;
285328 gitHubTab = gitHubTab ?? CreateSelectViewModel ( ) ;
286329 enterpriseTab = enterpriseTab ?? CreateSelectViewModel ( ) ;
287330 urlTab = urlTab ?? Substitute . For < IRepositoryUrlViewModel > ( ) ;
@@ -290,11 +333,23 @@ static RepositoryCloneViewModel CreateTarget(
290333 os ,
291334 connectionManager ,
292335 service ,
336+ usageService ,
337+ usageTracker ,
293338 gitHubTab ,
294339 enterpriseTab ,
295340 urlTab ) ;
296341 }
297342
343+ static IUsageService CreateUsageService ( bool isGroupA = false )
344+ {
345+ var usageService = Substitute . For < IUsageService > ( ) ;
346+ var guidBytes = new byte [ 16 ] ;
347+ guidBytes [ guidBytes . Length - 1 ] = ( byte ) ( isGroupA ? 0 : 1 ) ;
348+ var userGuid = new Guid ( guidBytes ) ;
349+ usageService . GetUserGuid ( ) . Returns ( userGuid ) ;
350+ return usageService ;
351+ }
352+
298353 static IRepositoryModel CreateRepositoryModel ( string repo = "owner/repo" )
299354 {
300355 var split = repo . Split ( '/' ) ;
0 commit comments