Skip to content

Commit b01f568

Browse files
test(audience-sdk): centralise per-test fixture data values in TestFixtures
The SDK test suite repeated the same identifier and payload literals across MessageBuilderTests, TypedEventTests, JsonTests, ImmutableAudienceTests, and DeleteDataTests. The pairs that appeared both as inputs and as assertion targets were the worst offenders (anon-42, user-42, user-99, from-id, to-id) since a typo flipping one side would silently pass on the other. Add TestFixtures alongside TestDefaults (which already centralises config defaults) and reference TestFixtures.X across the five files. Constants cover anonymous IDs (1, 42, 123), user IDs (42, 99), alias endpoints (from / to), identity values keyed to IdentityType.Custom / Steam / Passport (player-42 / player_steam / player_passport), Resource event payload values (gold currency, quest_reward itemType, main_quest_01 itemId), Purchase event payload values (gem_pack_01 itemId, Starter Gem Pack itemName, txn_abc123 transactionId), and the MilestoneReached name (first_boss_defeated). Includes main_quest_01, player_passport, anon-123, and first_boss_defeated beyond the user's listed values: same per-fixture data category, same migration treatment. tutorial_complete from the user's list does not appear in the test suite (the milestone fixture uses first_boss_defeated); skipped on that basis. Per the user's "everything random goes in a constant" stance, applied against the previous session's recommendation that scenario descriptors read better inline. Recording the override on the user's explicit request. Follow-up to SDK-272 (centralisation of duplicated literals).
1 parent ba0bcf4 commit b01f568

7 files changed

Lines changed: 86 additions & 38 deletions

File tree

src/Packages/Audience/Tests/Runtime/DeleteDataTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void DeleteData_WithUserId_FiresDelete_WithUserIdQuery()
7474
var handler = new CapturingHandler();
7575
ImmutableAudience.Init(MakeConfig(handler));
7676

77-
ImmutableAudience.DeleteData(userId: "player-42");
77+
ImmutableAudience.DeleteData(userId: TestFixtures.PlayerCustomId);
7878
WaitForRequest(handler);
7979

8080
// Filter out the game_launch POST from Init.
@@ -151,7 +151,7 @@ public async Task DeleteData_ReturnsTask_ThatCompletesAfterRequest()
151151
var handler = new CapturingHandler();
152152
ImmutableAudience.Init(MakeConfig(handler));
153153

154-
var task = ImmutableAudience.DeleteData(userId: "player-42");
154+
var task = ImmutableAudience.DeleteData(userId: TestFixtures.PlayerCustomId);
155155
Assert.IsNotNull(task, "DeleteData must return a non-null Task");
156156

157157
// Await directly: no need for the RequestSent gate when the task
@@ -168,7 +168,7 @@ public void DeleteData_BeforeInit_ReturnsCompletedTask()
168168
// Not initialised: must not throw, must return a completed Task.
169169
ImmutableAudience.ResetState();
170170

171-
var task = ImmutableAudience.DeleteData(userId: "player-42");
171+
var task = ImmutableAudience.DeleteData(userId: TestFixtures.PlayerCustomId);
172172

173173
Assert.IsNotNull(task);
174174
Assert.IsTrue(task.IsCompleted, "DeleteData before Init must return an already-completed Task");
@@ -189,7 +189,7 @@ public void DeleteData_ServerError_InvokesOnError()
189189
};
190190
ImmutableAudience.Init(config);
191191

192-
ImmutableAudience.DeleteData(userId: "player-42");
192+
ImmutableAudience.DeleteData(userId: TestFixtures.PlayerCustomId);
193193

194194
Assert.IsTrue(received.Wait(TimeSpan.FromSeconds(5)),
195195
"OnError should fire when DeleteData's response is non-2xx");

src/Packages/Audience/Tests/Runtime/Events/MessageBuilderTests.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class MessageBuilderTests
1313
[Test]
1414
public void Track_RequiredFieldsPresent()
1515
{
16-
var result = MessageBuilder.Track(TestEventNames.LevelComplete, "anon-1", null, PackageVersion);
16+
var result = MessageBuilder.Track(TestEventNames.LevelComplete, TestFixtures.AnonId1, null, PackageVersion);
1717

1818
Assert.AreEqual(MessageTypes.Track, result[MessageFields.Type]);
1919
Assert.IsTrue(result.ContainsKey(MessageFields.MessageId));
@@ -36,43 +36,43 @@ public void Track_EventNameLongerThan256Chars_TruncatedTo256()
3636
[Test]
3737
public void Track_NullUserId_NotPresentInDict()
3838
{
39-
var result = MessageBuilder.Track("evt", "anon-1", null, PackageVersion);
39+
var result = MessageBuilder.Track("evt", TestFixtures.AnonId1, null, PackageVersion);
4040

4141
Assert.IsFalse(result.ContainsKey(MessageFields.UserId));
4242
}
4343

4444
[Test]
4545
public void Track_NonNullUserId_PresentInDict()
4646
{
47-
var result = MessageBuilder.Track("evt", "anon-1", "user-99", PackageVersion);
47+
var result = MessageBuilder.Track("evt", TestFixtures.AnonId1, TestFixtures.UserId99, PackageVersion);
4848

4949
Assert.IsTrue(result.ContainsKey(MessageFields.UserId));
50-
Assert.AreEqual("user-99", result[MessageFields.UserId]);
50+
Assert.AreEqual(TestFixtures.UserId99, result[MessageFields.UserId]);
5151
}
5252

5353
[Test]
5454
public void Identify_TypeAndIdentityFieldsPresent()
5555
{
56-
var result = MessageBuilder.Identify("anon-42", "user-42", IdentityType.Steam.ToLowercaseString(), PackageVersion);
56+
var result = MessageBuilder.Identify(TestFixtures.AnonId42, TestFixtures.UserId42, IdentityType.Steam.ToLowercaseString(), PackageVersion);
5757

5858
Assert.AreEqual(MessageTypes.Identify, result[MessageFields.Type]);
59-
Assert.AreEqual("anon-42", result[MessageFields.AnonymousId]);
60-
Assert.AreEqual("user-42", result[MessageFields.UserId]);
59+
Assert.AreEqual(TestFixtures.AnonId42, result[MessageFields.AnonymousId]);
60+
Assert.AreEqual(TestFixtures.UserId42, result[MessageFields.UserId]);
6161
Assert.AreEqual(IdentityType.Steam.ToLowercaseString(), result[MessageFields.IdentityType]);
6262
}
6363

6464
[Test]
6565
public void Alias_AllFourFieldsPresent()
6666
{
6767
var result = MessageBuilder.Alias(
68-
"from-id", IdentityType.Email.ToLowercaseString(),
69-
"to-id", IdentityType.Steam.ToLowercaseString(),
68+
TestFixtures.AliasFromId, IdentityType.Email.ToLowercaseString(),
69+
TestFixtures.AliasToId, IdentityType.Steam.ToLowercaseString(),
7070
PackageVersion);
7171

7272
Assert.AreEqual(MessageTypes.Alias, result[MessageFields.Type]);
73-
Assert.AreEqual("from-id", result[MessageFields.FromId]);
73+
Assert.AreEqual(TestFixtures.AliasFromId, result[MessageFields.FromId]);
7474
Assert.AreEqual(IdentityType.Email.ToLowercaseString(), result[MessageFields.FromType]);
75-
Assert.AreEqual("to-id", result[MessageFields.ToId]);
75+
Assert.AreEqual(TestFixtures.AliasToId, result[MessageFields.ToId]);
7676
Assert.AreEqual(IdentityType.Steam.ToLowercaseString(), result[MessageFields.ToType]);
7777
}
7878

src/Packages/Audience/Tests/Runtime/Events/TypedEventTests.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,19 @@ public void Resource_Source_ProducesCorrectProperties()
6161
var evt = new Resource
6262
{
6363
Flow = ResourceFlow.Source,
64-
Currency = "gold",
64+
Currency = TestFixtures.ResourceCurrency,
6565
Amount = 100,
66-
ItemType = "quest_reward",
67-
ItemId = "main_quest_01"
66+
ItemType = TestFixtures.ResourceItemType,
67+
ItemId = TestFixtures.ResourceItemId
6868
};
6969

7070
var props = evt.ToProperties();
7171

7272
Assert.AreEqual(ResourceFlow.Source.ToLowercaseString(), props[EventPropertyKeys.Flow]);
73-
Assert.AreEqual("gold", props[EventPropertyKeys.Currency]);
73+
Assert.AreEqual(TestFixtures.ResourceCurrency, props[EventPropertyKeys.Currency]);
7474
Assert.AreEqual(100m, props[EventPropertyKeys.Amount]);
75-
Assert.AreEqual("quest_reward", props[EventPropertyKeys.ItemType]);
76-
Assert.AreEqual("main_quest_01", props[EventPropertyKeys.ItemId]);
75+
Assert.AreEqual(TestFixtures.ResourceItemType, props[EventPropertyKeys.ItemType]);
76+
Assert.AreEqual(TestFixtures.ResourceItemId, props[EventPropertyKeys.ItemId]);
7777
}
7878

7979
[Test]
@@ -85,7 +85,7 @@ public void Resource_EventName_IsResource()
8585
[Test]
8686
public void Resource_WithoutFlow_ThrowsOnToProperties()
8787
{
88-
var evt = new Resource { Currency = "gold", Amount = 100 };
88+
var evt = new Resource { Currency = TestFixtures.ResourceCurrency, Amount = 100 };
8989

9090
var ex = Assert.Throws<ArgumentException>(() => evt.ToProperties());
9191
Assert.That(ex!.Message, Does.Contain("Flow"));
@@ -103,7 +103,7 @@ public void Resource_WithoutCurrency_ThrowsOnToProperties()
103103
[Test]
104104
public void Resource_WithoutAmount_ThrowsOnToProperties()
105105
{
106-
var evt = new Resource { Flow = ResourceFlow.Source, Currency = "gold" };
106+
var evt = new Resource { Flow = ResourceFlow.Source, Currency = TestFixtures.ResourceCurrency };
107107

108108
var ex = Assert.Throws<ArgumentException>(() => evt.ToProperties());
109109
Assert.That(ex!.Message, Does.Contain("Amount"));
@@ -116,20 +116,20 @@ public void Purchase_ProducesCorrectProperties()
116116
{
117117
Currency = "USD",
118118
Value = 9.99m,
119-
ItemId = "gem_pack_01",
120-
ItemName = "Starter Gem Pack",
119+
ItemId = TestFixtures.PurchaseItemId,
120+
ItemName = TestFixtures.PurchaseItemName,
121121
Quantity = 1,
122-
TransactionId = "txn_abc123"
122+
TransactionId = TestFixtures.PurchaseTransactionId
123123
};
124124

125125
var props = evt.ToProperties();
126126

127127
Assert.AreEqual("USD", props[EventPropertyKeys.Currency]);
128128
Assert.AreEqual(9.99m, props[EventPropertyKeys.Value]);
129-
Assert.AreEqual("gem_pack_01", props[EventPropertyKeys.ItemId]);
130-
Assert.AreEqual("Starter Gem Pack", props[EventPropertyKeys.ItemName]);
129+
Assert.AreEqual(TestFixtures.PurchaseItemId, props[EventPropertyKeys.ItemId]);
130+
Assert.AreEqual(TestFixtures.PurchaseItemName, props[EventPropertyKeys.ItemName]);
131131
Assert.AreEqual(1, props[EventPropertyKeys.Quantity]);
132-
Assert.AreEqual("txn_abc123", props[EventPropertyKeys.TransactionId]);
132+
Assert.AreEqual(TestFixtures.PurchaseTransactionId, props[EventPropertyKeys.TransactionId]);
133133
}
134134

135135
[Test]
@@ -172,9 +172,9 @@ public void Purchase_WithoutValue_ThrowsOnToProperties()
172172
[Test]
173173
public void MilestoneReached_ProducesCorrectProperties()
174174
{
175-
var props = new MilestoneReached { Name = "first_boss_defeated" }.ToProperties();
175+
var props = new MilestoneReached { Name = TestFixtures.MilestoneName }.ToProperties();
176176

177-
Assert.AreEqual("first_boss_defeated", props[EventPropertyKeys.Name]);
177+
Assert.AreEqual(TestFixtures.MilestoneName, props[EventPropertyKeys.Name]);
178178
Assert.AreEqual(1, props.Count);
179179
}
180180

src/Packages/Audience/Tests/Runtime/ImmutableAudienceTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ public void UserId_AfterIdentifyAndReset_TracksState()
105105
Assert.IsNull(ImmutableAudience.UserId,
106106
"UserId should be null until Identify is called");
107107

108-
ImmutableAudience.Identify("player-42", IdentityType.Custom);
109-
Assert.AreEqual("player-42", ImmutableAudience.UserId,
108+
ImmutableAudience.Identify(TestFixtures.PlayerCustomId, IdentityType.Custom);
109+
Assert.AreEqual(TestFixtures.PlayerCustomId, ImmutableAudience.UserId,
110110
"UserId must reflect the most recent Identify call");
111111

112112
ImmutableAudience.Reset();
@@ -215,7 +215,7 @@ public void ContextProvider_Set_MergesOnIdentifyPath()
215215
};
216216

217217
ImmutableAudience.Init(MakeConfig(ConsentLevel.Full));
218-
ImmutableAudience.Identify("player-42", IdentityType.Custom);
218+
ImmutableAudience.Identify(TestFixtures.PlayerCustomId, IdentityType.Custom);
219219
ImmutableAudience.Shutdown();
220220

221221
var queueDir = AudiencePaths.QueueDir(_testDir);
@@ -1325,8 +1325,8 @@ public void FullToAnonymous_StripsUserIdFromQueuedTrackAndDropsIdentifyAlias()
13251325
{
13261326
ImmutableAudience.Init(MakeConfig(ConsentLevel.Full));
13271327

1328-
ImmutableAudience.Identify("player_steam", IdentityType.Steam);
1329-
ImmutableAudience.Alias("player_steam", IdentityType.Steam, "player_passport", IdentityType.Passport);
1328+
ImmutableAudience.Identify(TestFixtures.PlayerSteamId, IdentityType.Steam);
1329+
ImmutableAudience.Alias(TestFixtures.PlayerSteamId, IdentityType.Steam, TestFixtures.PlayerPassportId, IdentityType.Passport);
13301330
ImmutableAudience.Track(TestEventNames.TrackedBeforeDowngrade);
13311331

13321332
ImmutableAudience.FlushQueueToDiskForTesting();
@@ -1351,7 +1351,7 @@ public void FullToAnonymous_StripsUserIdFromQueuedTrackAndDropsIdentifyAlias()
13511351
public void FullToAnonymous_FutureTracksOmitUserId()
13521352
{
13531353
ImmutableAudience.Init(MakeConfig(ConsentLevel.Full));
1354-
ImmutableAudience.Identify("player_steam", IdentityType.Steam);
1354+
ImmutableAudience.Identify(TestFixtures.PlayerSteamId, IdentityType.Steam);
13551355
ImmutableAudience.SetConsent(ConsentLevel.Anonymous);
13561356

13571357
ImmutableAudience.Track(TestEventNames.TrackedAfterDowngrade);
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
namespace Immutable.Audience.Tests
2+
{
3+
// Per-fixture data values shared across the SDK test suite.
4+
internal static class TestFixtures
5+
{
6+
// Anonymous IDs
7+
internal const string AnonId1 = "anon-1";
8+
internal const string AnonId42 = "anon-42";
9+
internal const string AnonId123 = "anon-123";
10+
11+
// User IDs
12+
internal const string UserId42 = "user-42";
13+
internal const string UserId99 = "user-99";
14+
15+
// Alias endpoints
16+
internal const string AliasFromId = "from-id";
17+
internal const string AliasToId = "to-id";
18+
19+
// Identity values keyed to IdentityType.Custom / Steam / Passport
20+
internal const string PlayerCustomId = "player-42";
21+
internal const string PlayerSteamId = "player_steam";
22+
internal const string PlayerPassportId = "player_passport";
23+
24+
// Resource event payload values
25+
internal const string ResourceCurrency = "gold";
26+
internal const string ResourceItemType = "quest_reward";
27+
internal const string ResourceItemId = "main_quest_01";
28+
29+
// Purchase event payload values
30+
internal const string PurchaseItemId = "gem_pack_01";
31+
internal const string PurchaseItemName = "Starter Gem Pack";
32+
internal const string PurchaseTransactionId = "txn_abc123";
33+
34+
// MilestoneReached event payload values
35+
internal const string MilestoneName = "first_boss_defeated";
36+
}
37+
}

src/Packages/Audience/Tests/Runtime/TestFixtures.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Packages/Audience/Tests/Runtime/Utility/JsonTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ public void Serialize_RealisticEventPayload_ProducesCorrectJson()
183183
{
184184
{ MessageFields.Type, MessageTypes.Track },
185185
{ MessageFields.EventName, TestEventNames.LevelComplete },
186-
{ MessageFields.AnonymousId, "anon-123" },
186+
{ MessageFields.AnonymousId, TestFixtures.AnonId123 },
187187
{ MessageFields.UserId, null },
188188
{ MessageFields.Properties, new Dictionary<string, object>
189189
{

0 commit comments

Comments
 (0)