mirror of
https://github.com/google/nomulus
synced 2026-05-30 19:46:34 +00:00
Centralize Fee validation and add tests (#3070)
This commit: - Centralizes all creation validation checks into Fee.create(). - Inlines the redundant private createWithCustomDescription() method. - Removes the awkward ternary operator for null type evaluation. - Adds FeeTest.java to completely cover the Fee instance creation logic.
This commit is contained in:
@@ -46,8 +46,14 @@ public class Fee extends BaseFee {
|
||||
public static Fee create(
|
||||
BigDecimal cost, FeeType type, boolean isPremium, Object... descriptionArgs) {
|
||||
checkArgumentNotNull(type, "Must specify the type of the fee");
|
||||
return createWithCustomDescription(
|
||||
cost, type, isPremium, type.renderDescription(descriptionArgs));
|
||||
checkArgumentNotNull(cost, "Cost cannot be null");
|
||||
checkArgument(cost.signum() >= 0, "Cost must be a non-negative number");
|
||||
Fee instance = new Fee();
|
||||
instance.cost = cost;
|
||||
instance.type = type;
|
||||
instance.isPremium = isPremium;
|
||||
instance.description = type.renderDescription(descriptionArgs);
|
||||
return instance;
|
||||
}
|
||||
|
||||
/** Creates a Fee for the given cost, type, and valid date range with the default description. */
|
||||
@@ -62,19 +68,6 @@ public class Fee extends BaseFee {
|
||||
return instance;
|
||||
}
|
||||
|
||||
/** Creates a Fee for the given cost and type with a custom description. */
|
||||
private static Fee createWithCustomDescription(
|
||||
BigDecimal cost, FeeType type, boolean isPremium, String description) {
|
||||
Fee instance = new Fee();
|
||||
checkArgumentNotNull(cost, "Cost cannot be null");
|
||||
checkArgument(cost.signum() >= 0, "Cost must be a non-negative number");
|
||||
instance.cost = cost;
|
||||
instance.type = type;
|
||||
instance.isPremium = isPremium;
|
||||
instance.description = description;
|
||||
return instance;
|
||||
}
|
||||
|
||||
/** Builder for {@link Fee}. */
|
||||
public static class Builder extends Buildable.Builder<Fee> {
|
||||
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
// Copyright 2026 The Nomulus Authors. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package google.registry.model.domain.fee;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import google.registry.model.domain.fee.BaseFee.FeeType;
|
||||
import java.math.BigDecimal;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class FeeTest {
|
||||
|
||||
@Test
|
||||
void testCreate_success() {
|
||||
Fee fee = Fee.create(BigDecimal.valueOf(10.00), FeeType.CREATE, false);
|
||||
assertThat(fee.getCost()).isEqualTo(BigDecimal.valueOf(10.00));
|
||||
assertThat(fee.getType()).isEqualTo(FeeType.CREATE);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCreate_nullCost() {
|
||||
IllegalArgumentException thrown =
|
||||
assertThrows(IllegalArgumentException.class, () -> Fee.create(null, FeeType.CREATE, false));
|
||||
assertThat(thrown).hasMessageThat().contains("Cost cannot be null");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCreate_negativeCost() {
|
||||
IllegalArgumentException thrown =
|
||||
assertThrows(
|
||||
IllegalArgumentException.class,
|
||||
() -> Fee.create(BigDecimal.valueOf(-5.00), FeeType.CREATE, false));
|
||||
assertThat(thrown).hasMessageThat().contains("Cost must be a non-negative number");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCreate_nullType() {
|
||||
IllegalArgumentException thrown =
|
||||
assertThrows(
|
||||
IllegalArgumentException.class,
|
||||
() -> Fee.create(BigDecimal.valueOf(10.00), null, false));
|
||||
assertThat(thrown).hasMessageThat().contains("Must specify the type of the fee");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user