1
0
mirror of https://github.com/bitwarden/server synced 2026-02-24 16:42:52 +00:00
Files
server/test/Admin.Test/Billing/Models/EditSubscriptionDiscountModelTests.cs
Kyle Denney b88ce58b59 [PM-30109] edit discounts in bitwarden portal (#7032)
* [PM-30109] edit discounts in bitwarden portal

* forgot model error

* dotnet format

* pr feedback

* pr feedback
2026-02-23 09:43:36 -06:00

146 lines
4.7 KiB
C#

using Bit.Admin.Billing.Models;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Subscriptions.Entities;
namespace Admin.Test.Billing.Models;
public class EditSubscriptionDiscountModelTests
{
[Fact]
public void AudienceType_WhenRestrictToNewUsersOnly_ReturnsUserHasNoPreviousSubscriptions()
{
var model = new EditSubscriptionDiscountModel
{
RestrictToNewUsersOnly = true
};
Assert.Equal(DiscountAudienceType.UserHasNoPreviousSubscriptions, model.AudienceType);
}
[Fact]
public void AudienceType_WhenNotRestricted_ReturnsAllUsers()
{
var model = new EditSubscriptionDiscountModel
{
RestrictToNewUsersOnly = false
};
Assert.Equal(DiscountAudienceType.AllUsers, model.AudienceType);
}
[Fact]
public void Validate_WhenEndDateBeforeStartDate_ReturnsError()
{
var model = new EditSubscriptionDiscountModel
{
StartDate = DateTime.UtcNow.Date.AddDays(10),
EndDate = DateTime.UtcNow.Date
};
var validationContext = new System.ComponentModel.DataAnnotations.ValidationContext(model);
var results = model.Validate(validationContext).ToList();
Assert.Single(results);
Assert.Contains("End Date must be on or after Start Date", results[0].ErrorMessage);
Assert.Contains(nameof(model.EndDate), results[0].MemberNames);
}
[Fact]
public void Validate_WhenEndDateEqualsStartDate_NoError()
{
var model = new EditSubscriptionDiscountModel
{
StartDate = DateTime.UtcNow.Date,
EndDate = DateTime.UtcNow.Date
};
var validationContext = new System.ComponentModel.DataAnnotations.ValidationContext(model);
var results = model.Validate(validationContext).ToList();
Assert.Empty(results);
}
[Fact]
public void Validate_WhenEndDateAfterStartDate_NoError()
{
var model = new EditSubscriptionDiscountModel
{
StartDate = DateTime.UtcNow.Date,
EndDate = DateTime.UtcNow.Date.AddDays(10)
};
var validationContext = new System.ComponentModel.DataAnnotations.ValidationContext(model);
var results = model.Validate(validationContext).ToList();
Assert.Empty(results);
}
[Fact]
public void Constructor_FromEntity_MapsAllProperties()
{
var discount = new SubscriptionDiscount
{
Id = Guid.NewGuid(),
StripeCouponId = "COUPON123",
Name = "Test Coupon",
PercentOff = 25m,
AmountOff = null,
Currency = "usd",
Duration = "once",
DurationInMonths = null,
StripeProductIds = new List<string> { "prod_1", "prod_2" },
StartDate = new DateTime(2025, 1, 1),
EndDate = new DateTime(2025, 12, 31),
AudienceType = DiscountAudienceType.AllUsers
};
var model = new EditSubscriptionDiscountModel(discount);
Assert.Equal(discount.Id, model.Id);
Assert.Equal(discount.StripeCouponId, model.StripeCouponId);
Assert.Equal(discount.Name, model.Name);
Assert.Equal(discount.PercentOff, model.PercentOff);
Assert.Equal(discount.AmountOff, model.AmountOff);
Assert.Equal(discount.Currency, model.Currency);
Assert.Equal(discount.Duration, model.Duration);
Assert.Equal(discount.DurationInMonths, model.DurationInMonths);
Assert.Equal(discount.StripeProductIds, model.StripeProductIds);
Assert.Equal(discount.StartDate, model.StartDate);
Assert.Equal(discount.EndDate, model.EndDate);
}
[Fact]
public void Constructor_FromEntity_WhenAudienceTypeIsUserHasNoPreviousSubscriptions_SetsRestrictToNewUsersOnlyTrue()
{
var discount = new SubscriptionDiscount
{
StripeCouponId = "COUPON123",
Duration = "once",
StartDate = DateTime.UtcNow.Date,
EndDate = DateTime.UtcNow.Date.AddMonths(1),
AudienceType = DiscountAudienceType.UserHasNoPreviousSubscriptions
};
var model = new EditSubscriptionDiscountModel(discount);
Assert.True(model.RestrictToNewUsersOnly);
}
[Fact]
public void Constructor_FromEntity_WhenAudienceTypeIsAllUsers_SetsRestrictToNewUsersOnlyFalse()
{
var discount = new SubscriptionDiscount
{
StripeCouponId = "COUPON123",
Duration = "once",
StartDate = DateTime.UtcNow.Date,
EndDate = DateTime.UtcNow.Date.AddMonths(1),
AudienceType = DiscountAudienceType.AllUsers
};
var model = new EditSubscriptionDiscountModel(discount);
Assert.False(model.RestrictToNewUsersOnly);
}
}