Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion PatchNotes.Data/User.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public class User : IHasCreatedAt, IHasUpdatedAt
public bool IsPro =>
SubscriptionStatus == "active" ||
SubscriptionStatus == "trialing" ||
SubscriptionStatus == "past_due" ||
(SubscriptionStatus == "past_due" && SubscriptionExpiresAt > DateTimeOffset.UtcNow) ||
(SubscriptionStatus == "canceled" && SubscriptionExpiresAt > DateTimeOffset.UtcNow);

public ICollection<Watchlist> Watchlists { get; set; } = [];
Expand Down
69 changes: 69 additions & 0 deletions PatchNotes.Tests/UserTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
using PatchNotes.Data;

namespace PatchNotes.Tests;

public class UserTests
{
private static User MakeUser(string? status, DateTimeOffset? expiresAt = null) => new()
{
StytchUserId = "user-test",
SubscriptionStatus = status,
SubscriptionExpiresAt = expiresAt,
};

[Fact]
public void IsPro_Active_ReturnsTrue()
{
var user = MakeUser("active");
Assert.True(user.IsPro);
}

[Fact]
public void IsPro_Trialing_ReturnsTrue()
{
var user = MakeUser("trialing");
Assert.True(user.IsPro);
}

[Fact]
public void IsPro_Null_ReturnsFalse()
{
var user = MakeUser(null);
Assert.False(user.IsPro);
}

[Fact]
public void IsPro_PastDue_WithFutureExpiry_ReturnsTrue()
{
var user = MakeUser("past_due", DateTimeOffset.UtcNow.AddDays(7));
Assert.True(user.IsPro);
}

[Fact]
public void IsPro_PastDue_WithExpiredExpiry_ReturnsFalse()
{
var user = MakeUser("past_due", DateTimeOffset.UtcNow.AddDays(-1));
Assert.False(user.IsPro);
}

[Fact]
public void IsPro_PastDue_WithNullExpiry_ReturnsFalse()
{
var user = MakeUser("past_due", null);
Assert.False(user.IsPro);
}

[Fact]
public void IsPro_Canceled_WithFutureExpiry_ReturnsTrue()
{
var user = MakeUser("canceled", DateTimeOffset.UtcNow.AddDays(7));
Assert.True(user.IsPro);
}

[Fact]
public void IsPro_Canceled_WithExpiredExpiry_ReturnsFalse()
{
var user = MakeUser("canceled", DateTimeOffset.UtcNow.AddDays(-1));
Assert.False(user.IsPro);
}
}