11// Copyright (c) .NET Foundation. All rights reserved.
22// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33
4+ using System ;
45using Microsoft . Extensions . Logging ;
56using Moq ;
67using Xunit ;
@@ -18,40 +19,45 @@ public void CreatesANewEnrollmentInstance()
1819
1920 Assert . NotNull ( enrollment ) ;
2021 Assert . Equal ( ABTestEnrollmentState . FirstHit , enrollment . State ) ;
21- Assert . Equal ( 2 , enrollment . SchemaVersion ) ;
22+ Assert . Equal ( 3 , enrollment . SchemaVersion ) ;
2223 Assert . InRange ( enrollment . PreviewSearchBucket , 1 , 100 ) ;
2324 Assert . InRange ( enrollment . PackageDependentBucket , 1 , 100 ) ;
2425 }
2526 }
2627
2728 public class Serialize : Facts
2829 {
29- [ Fact ]
30- public void ProducesExpectedString ( )
30+ [ Theory ]
31+ [ InlineData ( 1 ) ]
32+ [ InlineData ( 2 ) ]
33+ [ InlineData ( 4 ) ]
34+ public void SerializeWithNotImplementedSchemaVersion_ThrowNotImplementedException ( int schemaVersion )
3135 {
3236 var enrollment = new ABTestEnrollment (
33- ABTestEnrollmentState . Active ,
34- schemaVersion : 2 ,
35- previewSearchBucket : 42 ,
36- packageDependentBucket : 82 ) ;
37+ state : It . IsAny < ABTestEnrollmentState > ( ) ,
38+ schemaVersion : schemaVersion ,
39+ previewSearchBucket : It . IsAny < int > ( ) ,
40+ packageDependentBucket : It . IsAny < int > ( ) ) ;
3741
38- var serialized = Target . Serialize ( enrollment ) ;
39-
40- Assert . Equal ( @"{""v"":2,""ps"":42,""pd"":82}" , serialized ) ;
42+ var exception = Assert . Throws < NotImplementedException > ( ( ) => Target . Serialize ( enrollment ) ) ;
43+ Assert . Equal ( $ "Serializing schema version { schemaVersion } is not implemented.", exception . Message ) ;
4144 }
4245
43- [ Fact ]
44- public void ProducesExpectedStringVersionTwo ( )
46+ [ Theory ]
47+ [ InlineData ( 3 , ABTestEnrollmentState . Active ) ]
48+ [ InlineData ( 3 , ABTestEnrollmentState . FirstHit ) ]
49+ [ InlineData ( 3 , ABTestEnrollmentState . Upgraded ) ]
50+ public void ProducesExpectedString ( int schemaVersion , ABTestEnrollmentState state )
4551 {
4652 var enrollment = new ABTestEnrollment (
47- ABTestEnrollmentState . Active ,
48- schemaVersion : 2 ,
53+ state : state ,
54+ schemaVersion : schemaVersion ,
4955 previewSearchBucket : 42 ,
50- packageDependentBucket : 74 ) ;
56+ packageDependentBucket : 82 ) ;
5157
5258 var serialized = Target . Serialize ( enrollment ) ;
5359
54- Assert . Equal ( @"{""v"":2 ,""ps"":42,""pd"":74 }" , serialized ) ;
60+ Assert . Equal ( @"{""v"":3 ,""ps"":42,""pd"":82 }" , serialized ) ;
5561 }
5662 }
5763
@@ -66,22 +72,33 @@ public class Deserialize : Facts
6672 [ InlineData ( "[]" ) ]
6773 [ InlineData ( "null" ) ]
6874 [ InlineData ( @"{""ps"":42}" ) ]
69- [ InlineData ( @"{""v"":2,""ps"":42}" ) ]
75+ [ InlineData ( @"{""pd"":42}" ) ]
76+ [ InlineData ( @"{""ps"":20,""pd"":82}" ) ]
7077 [ InlineData ( @"{""v"":1}" ) ]
7178 [ InlineData ( @"{""v"":1,""ps"":-1}" ) ]
7279 [ InlineData ( @"{""v"":1,""ps"":0}" ) ]
7380 [ InlineData ( @"{""v"":1,""ps"":101}" ) ]
74- [ InlineData ( @"{""v"":2,""ps"":10,""pd"":101}" ) ]
7581 [ InlineData ( @"{""v"":2}" ) ]
76- [ InlineData ( @"{""pd"":42}" ) ]
82+ [ InlineData ( @"{""v"":2,""ps"":42}" ) ]
83+ [ InlineData ( @"{""v"":2,""pd"":42}" ) ]
84+ [ InlineData ( @"{""v"":2,""ps"":10,""pd"":101}" ) ]
7785 [ InlineData ( @"{""v"":2,""ps"":1,""pd"":-1}" ) ]
7886 [ InlineData ( @"{""v"":2,""ps"":10,""pd"":0}" ) ]
79- [ InlineData ( @"{""v"":3,""ps"":42,""pd"":53}" ) ]
8087 [ InlineData ( @"{""v"":2,""ps"":-1,""pd"":24}" ) ]
8188 [ InlineData ( @"{""v"":2,""ps"":0,""pd"":35}" ) ]
8289 [ InlineData ( @"{""v"":2,""ps"":101,""pd"":56}" ) ]
8390 [ InlineData ( @"{""v"":2,""ps"":200,""pd"":82}" ) ]
84- [ InlineData ( @"{""ps"":20,""pd"":82}" ) ]
91+ [ InlineData ( @"{""v"":3}" ) ]
92+ [ InlineData ( @"{""v"":3,""ps"":42}" ) ]
93+ [ InlineData ( @"{""v"":3,""pd"":42}" ) ]
94+ [ InlineData ( @"{""v"":3,""ps"":10,""pd"":101}" ) ]
95+ [ InlineData ( @"{""v"":3,""ps"":1,""pd"":-1}" ) ]
96+ [ InlineData ( @"{""v"":3,""ps"":10,""pd"":0}" ) ]
97+ [ InlineData ( @"{""v"":3,""ps"":-1,""pd"":24}" ) ]
98+ [ InlineData ( @"{""v"":3,""ps"":0,""pd"":35}" ) ]
99+ [ InlineData ( @"{""v"":3,""ps"":101,""pd"":56}" ) ]
100+ [ InlineData ( @"{""v"":3,""ps"":200,""pd"":82}" ) ]
101+ [ InlineData ( @"{""v"":4,""ps"":42,""pd"":53}" ) ]
85102 public void RejectsInvalid ( string input )
86103 {
87104 var success = Target . TryDeserialize ( input , out var enrollment ) ;
@@ -95,14 +112,16 @@ public void RejectsInvalid(string input)
95112 [ InlineData ( @"{""v"":1,""ps"":42,""zzz"":false}" , 42 ) ]
96113 [ InlineData ( @"{""v"":1,""ps"":1}" , 1 ) ]
97114 [ InlineData ( @"{""v"":1,""ps"":100}" , 100 ) ]
98- public void UpgradesValidVersionV1 ( string input , int previewSearchBucket )
115+ public void UpgradesValidVersion ( string input , int previewSearchBucket )
99116 {
117+ TelemetryService . Setup ( t => t . TrackABTestEnrollmentUpgraded ( 1 , 3 , It . IsAny < int > ( ) , It . IsAny < int > ( ) ) ) ;
100118 var success = Target . TryDeserialize ( input , out var enrollment ) ;
101119
120+ TelemetryService . Verify ( t => t . TrackABTestEnrollmentUpgraded ( 1 , 3 , It . IsAny < int > ( ) , It . IsAny < int > ( ) ) , Times . Once ) ;
102121 Assert . True ( success , "The derialization should have succeeded." ) ;
103122 Assert . NotNull ( enrollment ) ;
104123 Assert . Equal ( ABTestEnrollmentState . Upgraded , enrollment . State ) ;
105- Assert . Equal ( 2 , enrollment . SchemaVersion ) ;
124+ Assert . Equal ( 3 , enrollment . SchemaVersion ) ;
106125 Assert . Equal ( previewSearchBucket , enrollment . PreviewSearchBucket ) ;
107126 Assert . InRange ( enrollment . PackageDependentBucket , 1 , 100 ) ;
108127 }
@@ -116,13 +135,35 @@ public void UpgradesValidVersionV1(string input, int previewSearchBucket)
116135 [ InlineData ( @"{""v"":2,""ps"":52,""pd"":1}" , 52 , 1 ) ]
117136 [ InlineData ( @"{""v"":2,""ps"":68,""pd"":100}" , 68 , 100 ) ]
118137 public void ParsesValidVersion2 ( string input , int previewSearchBucket , int packageDependentBucket )
138+ {
139+ TelemetryService . Setup ( t => t . TrackABTestEnrollmentUpgraded ( 2 , 3 , It . IsAny < int > ( ) , It . IsAny < int > ( ) ) ) ;
140+ var success = Target . TryDeserialize ( input , out var enrollment ) ;
141+
142+ TelemetryService . Verify ( t => t . TrackABTestEnrollmentUpgraded ( 2 , 3 , It . IsAny < int > ( ) , It . IsAny < int > ( ) ) , Times . Once ) ;
143+ Assert . True ( success , "The derialization should have succeeded." ) ;
144+ Assert . NotNull ( enrollment ) ;
145+ Assert . Equal ( ABTestEnrollmentState . Upgraded , enrollment . State ) ;
146+ Assert . Equal ( 3 , enrollment . SchemaVersion ) ;
147+ Assert . Equal ( previewSearchBucket , enrollment . PreviewSearchBucket ) ;
148+ Assert . Equal ( packageDependentBucket , enrollment . PackageDependentBucket ) ;
149+ }
150+
151+ [ Theory ]
152+ [ InlineData ( @"{""v"":3,""ps"":42,""pd"":57}" , 42 , 57 ) ]
153+ [ InlineData ( @"{""v"":3,""ps"":1,""pd"":1}" , 1 , 1 ) ]
154+ [ InlineData ( @"{""v"":3,""ps"":100,""pd"":100}" , 100 , 100 ) ]
155+ [ InlineData ( @"{""v"":3,""ps"":1,""pd"":32}" , 1 , 32 ) ]
156+ [ InlineData ( @"{""v"":3,""ps"":100,""pd"":57}" , 100 , 57 ) ]
157+ [ InlineData ( @"{""v"":3,""ps"":52,""pd"":1}" , 52 , 1 ) ]
158+ [ InlineData ( @"{""v"":3,""ps"":68,""pd"":100}" , 68 , 100 ) ]
159+ public void ParsesValidVersion3 ( string input , int previewSearchBucket , int packageDependentBucket )
119160 {
120161 var success = Target . TryDeserialize ( input , out var enrollment ) ;
121162
122163 Assert . True ( success , "The derialization should have succeeded." ) ;
123164 Assert . NotNull ( enrollment ) ;
124165 Assert . Equal ( ABTestEnrollmentState . Active , enrollment . State ) ;
125- Assert . Equal ( 2 , enrollment . SchemaVersion ) ;
166+ Assert . Equal ( 3 , enrollment . SchemaVersion ) ;
126167 Assert . Equal ( previewSearchBucket , enrollment . PreviewSearchBucket ) ;
127168 Assert . Equal ( packageDependentBucket , enrollment . PackageDependentBucket ) ;
128169 }
0 commit comments