1
0
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:
Ben McIlwain
2026-05-28 16:50:04 -04:00
committed by GitHub
parent 33d30ea6a1
commit d68f3e5cc0
2 changed files with 65 additions and 15 deletions

View File

@@ -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> {

View File

@@ -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");
}
}