Skip to content

Commit 45ea4e7

Browse files
committed
added new test cases and other improvements
1 parent 4e25731 commit 45ea4e7

File tree

6 files changed

+70
-17
lines changed

6 files changed

+70
-17
lines changed

FirebaseAdmin/FirebaseAdmin.Tests/FirebaseAdmin.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFramework>netcoreapp2.0</TargetFramework>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System;
2+
using FirebaseAdmin.Messaging;
3+
using FirebaseAdmin.Messaging.Util;
4+
using Xunit;
5+
6+
namespace FirebaseAdmin.Tests.Messaging
7+
{
8+
public class FcmOptionsTest
9+
{
10+
[Fact]
11+
public void FcmOptionsCopyAndValidate()
12+
{
13+
var options = new FcmOptions() { AnalyticsLabel = "label" };
14+
var result = options.CopyAndValidate();
15+
Assert.Equal(options.AnalyticsLabel, result.AnalyticsLabel);
16+
}
17+
18+
[Fact]
19+
public void ApnsFcmOptionsCopyAndValidate()
20+
{
21+
var options = new ApnsFcmOptions() { AnalyticsLabel = "label" };
22+
var result = options.CopyAndValidate();
23+
Assert.Equal(options.AnalyticsLabel, result.AnalyticsLabel);
24+
}
25+
26+
[Fact]
27+
public void AndroidFcmOptionsCopyAndValidate()
28+
{
29+
var options = new AndroidFcmOptions() { AnalyticsLabel = "label" };
30+
var result = options.CopyAndValidate();
31+
Assert.Equal(options.AnalyticsLabel, result.AnalyticsLabel);
32+
}
33+
34+
[Fact]
35+
public void FcmOptionsCopyAndValidateNullLabel()
36+
{
37+
var options = new FcmOptions() { AnalyticsLabel = null };
38+
Assert.Throws<ArgumentException>(() => options.CopyAndValidate());
39+
}
40+
41+
[Fact]
42+
public void AnalyticsLabelTooLong()
43+
{
44+
Assert.Throws<ArgumentException>(() => AnalyticsLabelChecker.ValidateAnalyticsLabel("012345678901234567890123456789012345678901234567890"));
45+
}
46+
47+
[Fact]
48+
public void AnalyticsLabelEmtpty()
49+
{
50+
Assert.Throws<ArgumentException>(() => AnalyticsLabelChecker.ValidateAnalyticsLabel(string.Empty));
51+
}
52+
53+
[Fact]
54+
public void AnalyticsLabelInvalidCharacters()
55+
{
56+
Assert.Throws<ArgumentException>(() => AnalyticsLabelChecker.ValidateAnalyticsLabel("label(label)"));
57+
}
58+
}
59+
}

FirebaseAdmin/FirebaseAdmin/Messaging/AndroidFcmOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ internal AndroidFcmOptions CopyAndValidate()
2424
{
2525
AnalyticsLabel = this.AnalyticsLabel,
2626
};
27-
AnalyticsLabelChecker.CheckAnalyticsLabelOrThrow(this.AnalyticsLabel);
27+
AnalyticsLabelChecker.ValidateAnalyticsLabel(copy.AnalyticsLabel);
2828

2929
return copy;
3030
}

FirebaseAdmin/FirebaseAdmin/Messaging/ApnsFcmOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ internal ApnsFcmOptions CopyAndValidate()
2424
{
2525
AnalyticsLabel = this.AnalyticsLabel,
2626
};
27-
AnalyticsLabelChecker.CheckAnalyticsLabelOrThrow(this.AnalyticsLabel);
27+
AnalyticsLabelChecker.ValidateAnalyticsLabel(copy.AnalyticsLabel);
2828

2929
return copy;
3030
}

FirebaseAdmin/FirebaseAdmin/Messaging/FcmOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ internal FcmOptions CopyAndValidate()
2424
{
2525
AnalyticsLabel = this.AnalyticsLabel,
2626
};
27-
AnalyticsLabelChecker.CheckAnalyticsLabelOrThrow(this.AnalyticsLabel);
27+
AnalyticsLabelChecker.ValidateAnalyticsLabel(copy.AnalyticsLabel);
2828

2929
return copy;
3030
}
Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,31 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Collections.Immutable;
4-
using System.Linq;
52
using System.Text.RegularExpressions;
63

74
namespace FirebaseAdmin.Messaging.Util
85
{
96
/// <summary>
107
/// Checker for analytics label.
118
/// </summary>
12-
public static class AnalyticsLabelChecker
9+
internal static class AnalyticsLabelChecker
1310
{
14-
private static ImmutableHashSet<char> alowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-~%".ToCharArray().ToImmutableHashSet();
11+
private static string pattern = "^[a-zA-Z0-9-_.~%]{0,50}$";
1512

1613
/// <summary>
1714
/// Checks anytytics labels an throw if not valid.
1815
/// </summary>
1916
/// <exception cref="ArgumentException">If analytics label does not match pattern.</exception>
2017
/// <param name="analyticsLabel">Analytics label.</param>
21-
public static void CheckAnalyticsLabelOrThrow(string analyticsLabel)
18+
public static void ValidateAnalyticsLabel(string analyticsLabel)
2219
{
23-
if (analyticsLabel.Length > 50)
20+
if (string.IsNullOrWhiteSpace(analyticsLabel))
2421
{
2522
throw new ArgumentException("Analytics label must have format matching'^[a-zA-Z0-9-_.~%]{1,50}$");
2623
}
2724

28-
foreach (var character in analyticsLabel)
25+
if (!Regex.IsMatch(analyticsLabel, pattern))
2926
{
30-
if (!alowedChars.Contains(character))
31-
{
32-
throw new ArgumentException("Analytics label must have format matching'^[a-zA-Z0-9-_.~%]{1,50}$");
33-
}
27+
throw new ArgumentException("Analytics label must have format matching'^[a-zA-Z0-9-_.~%]{1,50}$");
3428
}
3529
}
3630
}
37-
}
31+
}

0 commit comments

Comments
 (0)