Skip to content

Commit c1233ce

Browse files
authored
Create virtual methods on user context (#280)
* feat(common): Changed public members on OptimizelyUserContext to be virtual Make OptimizelyUserContext members virtual, making them overridable by testing frameworks * fix(tests): Run tests on English culture Set the current thread culture to english, as for systems on others cultures, some tests were failing.
1 parent 34a74cb commit c1233ce

File tree

3 files changed

+36
-10
lines changed

3 files changed

+36
-10
lines changed

OptimizelySDK.Tests/OptimizelySDK.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@
9797
<Compile Include="TestBucketer.cs" />
9898
<Compile Include="BucketerTest.cs" />
9999
<Compile Include="ProjectConfigTest.cs" />
100+
<Compile Include="TestSetup.cs" />
100101
<Compile Include="UtilsTests\ConditionParserTest.cs" />
101102
<Compile Include="UtilsTests\EventTagUtilsTest.cs" />
102103
<Compile Include="UtilsTests\ExceptionExtensionsTest.cs" />

OptimizelySDK.Tests/TestSetup.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using NUnit.Framework;
2+
using System.Globalization;
3+
using System.Threading;
4+
5+
namespace OptimizelySDK.Tests
6+
{
7+
[SetUpFixture]
8+
public class TestSetup
9+
{
10+
[SetUp]
11+
public void Init()
12+
{
13+
/* There are some issues doing assertions on tests with floating point numbers using the .ToString()
14+
* method, as it's culture dependent. EG: TestGetFeatureVariableValueForTypeGivenFeatureFlagIsNotEnabledForUser,
15+
* assigning the culture to English will make this kind of tests to work on others culture based systems. */
16+
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
17+
}
18+
19+
[TearDown]
20+
public void Cleanup()
21+
{
22+
// Empty, but required: https://nunit.org/nunitv2/docs/2.6.4/setupFixture.html
23+
}
24+
}
25+
}

OptimizelySDK/OptimizelyUserContext.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public OptimizelyUserContext(Optimizely optimizely, string userId, UserAttribute
5252
/// Returns Optimizely instance associated with the UserContext.
5353
/// </summary>
5454
/// <returns> Optimizely instance.</returns>
55-
public Optimizely GetOptimizely()
55+
public virtual Optimizely GetOptimizely()
5656
{
5757
return Optimizely;
5858
}
@@ -61,7 +61,7 @@ public Optimizely GetOptimizely()
6161
/// Returns UserId associated with the UserContext
6262
/// </summary>
6363
/// <returns>UserId of this instance.</returns>
64-
public string GetUserId()
64+
public virtual string GetUserId()
6565
{
6666
return UserId;
6767
}
@@ -108,7 +108,7 @@ public void SetAttribute(string key, object value)
108108
/// </summary>
109109
/// <param name="key">A flag key for which a decision will be made.</param>
110110
/// <returns>A decision result.</returns>
111-
public OptimizelyDecision Decide(string key)
111+
public virtual OptimizelyDecision Decide(string key)
112112
{
113113
return Decide(key, new OptimizelyDecideOption[] { });
114114
}
@@ -122,7 +122,7 @@ public OptimizelyDecision Decide(string key)
122122
/// <param name="key">A flag key for which a decision will be made.</param>
123123
/// <param name="options">A list of options for decision-making.</param>
124124
/// <returns>A decision result.</returns>
125-
public OptimizelyDecision Decide(string key,
125+
public virtual OptimizelyDecision Decide(string key,
126126
OptimizelyDecideOption[] options)
127127
{
128128
var optimizelyUserContext = Copy();
@@ -134,7 +134,7 @@ public OptimizelyDecision Decide(string key,
134134
/// </summary>
135135
/// <param name="keys">list of flag keys for which a decision will be made.</param>
136136
/// <returns>A dictionary of all decision results, mapped by flag keys.</returns>
137-
public Dictionary<string, OptimizelyDecision> DecideForKeys(string[] keys, OptimizelyDecideOption[] options)
137+
public virtual Dictionary<string, OptimizelyDecision> DecideForKeys(string[] keys, OptimizelyDecideOption[] options)
138138
{
139139
var optimizelyUserContext = Copy();
140140
return Optimizely.DecideForKeys(optimizelyUserContext, keys, options);
@@ -145,7 +145,7 @@ public Dictionary<string, OptimizelyDecision> DecideForKeys(string[] keys, Optim
145145
/// </summary>
146146
/// <param name="keys">list of flag keys for which a decision will be made.</param>
147147
/// <returns>A dictionary of all decision results, mapped by flag keys.</returns>
148-
public Dictionary<string, OptimizelyDecision> DecideForKeys(string[] keys)
148+
public virtual Dictionary<string, OptimizelyDecision> DecideForKeys(string[] keys)
149149
{
150150
return DecideForKeys(keys, new OptimizelyDecideOption[] { });
151151
}
@@ -154,7 +154,7 @@ public Dictionary<string, OptimizelyDecision> DecideForKeys(string[] keys)
154154
/// Returns a key-map of decision results ({@link OptimizelyDecision}) for all active flag keys.
155155
/// </summary>
156156
/// <returns>A dictionary of all decision results, mapped by flag keys.</returns>
157-
public Dictionary<string, OptimizelyDecision> DecideAll()
157+
public virtual Dictionary<string, OptimizelyDecision> DecideAll()
158158
{
159159
return DecideAll(new OptimizelyDecideOption[] { });
160160
}
@@ -164,7 +164,7 @@ public Dictionary<string, OptimizelyDecision> DecideAll()
164164
/// </summary>
165165
/// <param name="options">A list of options for decision-making.</param>
166166
/// <returns>All decision results mapped by flag keys.</returns>
167-
public Dictionary<string, OptimizelyDecision> DecideAll(OptimizelyDecideOption[] options)
167+
public virtual Dictionary<string, OptimizelyDecision> DecideAll(OptimizelyDecideOption[] options)
168168
{
169169
var optimizelyUserContext = Copy();
170170
return Optimizely.DecideAll(optimizelyUserContext, options);
@@ -174,7 +174,7 @@ public Dictionary<string, OptimizelyDecision> DecideAll(OptimizelyDecideOption[]
174174
/// Track an event.
175175
/// </summary>
176176
/// <param name="eventName">The event name.</param>
177-
public void TrackEvent(string eventName)
177+
public virtual void TrackEvent(string eventName)
178178
{
179179
TrackEvent(eventName, new EventTags());
180180
}
@@ -184,7 +184,7 @@ public void TrackEvent(string eventName)
184184
/// </summary>
185185
/// <param name="eventName">The event name.</param>
186186
/// <param name="eventTags">A map of event tag names to event tag values.</param>
187-
public void TrackEvent(string eventName,
187+
public virtual void TrackEvent(string eventName,
188188
EventTags eventTags)
189189
{
190190
Optimizely.Track(eventName, UserId, Attributes, eventTags);

0 commit comments

Comments
 (0)